Apache POI рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ MS Excel рдореЗрдВ рдЪрд┐рддреНрд░

рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, рдПрдХ рдЖрд░реНрдЯрд┐рдХрд▓ рдПрдХ рдХрд▓рд╛рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рдерд╛, рдЬреЛ рдЕрдкрдиреЗ рд╡реЗрдХреНрдЯрд░ рдлреАрдЪрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП MS Excel рдореЗрдВ рдЪрд┐рддреНрд░ рдмрдирд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрд╕рд╕реЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ, рдореИрдВ рдЙрд╕реА рдПрдХреНрд╕реЗрд▓ рдореЗрдВ рдЕрднреВрддрдкреВрд░реНрд╡ рдмрд┐рдЯрдореИрдк рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдХрд╣рд╛рдиреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдпрд╛, рдЬрд┐рд╕рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд▓рд╛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдпрд╛рдиреА рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХреЗрд╡рд▓ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореЛрдЬрд╝реЗрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдВрдЧ рднрд░рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдлреА рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рджрд┐рдЦрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╡реЗрдХреНрдЯрд░ рдЪрд┐рддреНрд░ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИред

рдЬрдм рдореИрдВрдиреЗ рдРрд╕реА рддрд╕реНрд╡реАрд░реЗрдВ рджреЗрдЦреАрдВ, рддреЛ, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реБрдЖ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рджреГрдврд╝рддрд╛ рдереА рдФрд░ "рдХрд╛рд░реНрдпрд╛рд▓рдп рдХреЗ рдХрд╛рдо" рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдХрд╛рд░реНрдп рдЬрд╛рд╡рд╛ рднрд╛рд╖рд╛ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдирд┐рдХрд▓рд╛, рдмрд╢рд░реНрддреЗ рдХрд┐ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдСрдлрд┐рд╕ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрд╛рдЪреЗ рдкреАрдУрдЖрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдЯ рдХреЗ рддрд╣рдд рд╡рд┐рд╡рд░рдгред

рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдПрдХреНрд╕реЗрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдо JPG рдЫрд╡рд┐ (рдпрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╛рд░реВрдк) рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдореМрдЬреВрджрд╛ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдпреЛрдЧреНрдп:
"рдЪрд┐рддреНрд░" рдХреА рдЪреМрдбрд╝рд╛рдИ 255 рдЕрдВрдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (рд╢реАрдЯ рдкрд░ рдХреЙрд▓рдо рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛)
рдбрд┐рдЬрд╝рд╛рдЗрди рд╢реИрд▓рд┐рдпреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд░рдВрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ) 4000 рд╣реИ
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдкрд╣рд▓реЗ рдПрдХ рдЪрд┐рддреНрд░ рдвреВрдВрдврдирд╛ рдФрд░ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЖрдХрд╛рд░ рдФрд░ рд░рдВрдЧ рдХреА рдЧрд╣рд░рд╛рдИ рдХрдо рдХрд░реЗрдВ) рдпрд╛ рдЗрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдХрд░реЗрдВред рд╣рдо рджреВрд╕рд░реЗ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдЬрд╛рдПрдВрдЧреЗ :)
рдЫрд╡рд┐
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рд╕реЗ рдпреБрдХреНрдд рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:

public class Main { public static void main(String[] args) { IMGRead ir = new IMGRead(); Map<String, Object[]> data = ir.read("C:\\picture.jpg"); POIWrite pw = new POIWrite(); pw.write(data); } } 


рдмреЗрд╢рдХ, рдордирд╣реВрд╕ рдФрд░ рд╣рд╛рд░реНрдбрдХреЛрдб, рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред

рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЪрд┐рддреНрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЗрд╕рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрд╕реНрд╡реАрд░ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ RGBColor рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдПрдВ рд╣реЛрддреА рд╣реИрдВ, рдЬреЛ рдмрд┐рдВрджреБ рдХреЗ рд░рдВрдЧ рдХреЗ рддреАрди рдШрдЯрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИрдВ:

 public Map<String, Object[]> read(String fileName) { File file = new File(fileName); BufferedImage source, image;//source and resized images Map<String, Object[]> data = new TreeMap<String, Object[]>(); try { source = ImageIO.read(file);//read picture from file int type = source.getType() == 0? BufferedImage.TYPE_INT_ARGB : source.getType();//get type image = resizeImage(source, type);//resize source = convert8(image); image = source; // :) // Getting pixel color for every pixel for (Integer y = 0; y < image.getHeight(); y++) { Object[] line = new Object[image.getWidth()]; for (int x = 0; x < image.getWidth(); x++) { int clr = image.getRGB(x, y); int red = (clr & 0x00ff0000) >> 16; int green = (clr & 0x0000ff00) >> 8; int blue = clr & 0x000000ff; line[x] = new RGBColor(red, green, blue); } data.put(String.format("%03d", y), line); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return data; } 


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪрд┐рддреНрд░ рдХреЛ рдЖрдХрд╛рд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рднреА рд╣реИ:

 private static BufferedImage resizeImage(BufferedImage originalImage, int type) { BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT, type); Graphics2D g = resizedImage.createGraphics(); g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null); g.dispose(); return resizedImage; } 


рдФрд░ рд░рдВрдЧ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ (рдореИрдВ рдЖрда-рдмрд┐рдЯ рд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕реНрд░реЛрдд рджреЗрдЦреЗрдВ ):

 public static BufferedImage convert8(BufferedImage src) { BufferedImage dest = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_BYTE_INDEXED); ColorConvertOp cco = new ColorConvertOp(src.getColorModel() .getColorSpace(), dest.getColorModel().getColorSpace(), null); cco.filter(src, dest); return dest; } 


рд╣рдо рдЙрд╕ рдХрдХреНрд╖рд╛ рдореЗрдВ рдкрд╛рд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХреНрд╕реЗрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ "рдЪрд┐рддреНрд░" рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 2 рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

 public void write(Map<String, Object[]> data) { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Picture"); Map<String, HSSFCellStyle> colorToStyle = new HashMap<String, HSSFCellStyle>(); HSSFCellStyle style; Set<String> keyset = data.keySet(); int rownum = 0; for (String key : keyset) { Row row = sheet.createRow(rownum++); row.setHeight((short) 50); Object[] objArr = data.get(key); int cellnum = 0; for (Object obj : objArr) { sheet.setColumnWidth(cellnum, 100); Cell cell = row.createCell(cellnum++); RGBColor rgb = (RGBColor) obj; try { style = colorToStyle.get(rgb.toString()); cell.setCellStyle(style); } catch (Exception e) { style = workbook.createCellStyle(); style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); style.setFillForegroundColor(setColor(workbook, rgb.getR(), rgb.getG(), rgb.getB()).getIndex()); colorToStyle.put(rgb.toString(), style); cell.setCellStyle(style); } } } try { FileOutputStream out = new FileOutputStream(new File("C:\\picture.xls")); workbook.write(out); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } 

ColorToStyle рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реЗрд▓ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдирдИ рд╢реИрд▓реА рдмрдирд╛рдирд╛, рд╣рдо рдЗрд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рдВрдЧ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рд╣рд░ рдмрд╛рд░ рдЬрдм рдПрдХ рдирдП рд╕реЗрд▓ рдореЗрдВ рднрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡рд╛рдВрдЫрд┐рдд рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рддреИрдпрд╛рд░ рд╢реИрд▓реА рд╣реИ, рдпрд╛ рдХреНрдпрд╛ рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдФрд░ рдЕрдВрдд рдореЗрдВ, Apache POI рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ RGB рд░рдВрдЧреЛрдВ рдХреЛ HSSFColor рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ findSimilarColor () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреИрд▓реЗрдЯ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд░рдВрдЧ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред

 public HSSFColor setColor(HSSFWorkbook workbook, byte r, byte g, byte b) { HSSFPalette palette = workbook.getCustomPalette(); HSSFColor hssfColor = null; try { hssfColor = palette.findSimilarColor(r, g, b); if (hssfColor == null) { System.err.println("null " + r + " " + g + " " + b); palette.setColorAtIndex(HSSFColor.RED.index, r, g, b); hssfColor = palette.getColor(HSSFColor.RED.index); } } catch (Exception e) { e.printStackTrace(); } return hssfColor; } 


"рд░рдЪрдирд╛рддреНрдордХрддрд╛" рдХреЗ рдкрд░рд┐рдгрд╛рдо:

рдмреЗрд╢рдХ, рдРрд╕реЗ рдореЛрдЬрд╝рд╛рдЗрдХ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдХреГрддрд┐ рд╕реЗ рджреВрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЫрд╡рд┐ рдФрд░ рдЙрд╕рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╣реА рдЪрдпрди рдХреЗ рд╕рд╛рде, рдЖрдк рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ "рдЪрд┐рддреНрд░" рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЕрдкрд╛рдЪреЗ POI (рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп) рдХрд╛рд░реНрдпрд╛рд▓рдп рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдореЗрдВ рд╡реЗрдХреНрдЯрд░ рдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ :(

Source: https://habr.com/ru/post/In180489/


All Articles