场景:POI读取Excel模板。
当使用POI操作Excel时,发现由POI生成的公式能够在打开Excel时被执行,
而事先手工写入Excel模板文件的公式则不自动被调用,必须手动双击该Cell才能生效。
采取的办法:
1.使用cell.setCellFormula方法重新在制定Cell里写入公式。
2.使用sheet.setForceFormulaRecalculation(true);方法强制让改Sheet执行公式。
当然,在方法2能够生效的情况下我们还是推荐使用方法2来解决这个问题。
写入图片:
- //先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
- ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();;
- BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"););;
- ImageIO.write(bufferImg,"jpg",byteArrayOut);;
- //读进一个excel模版
- FileInputStream fos = new FileInputStream(filePathName+"/stencil.xlt");;
- fs = new POIFSFileSystem(fos);;
- //创建一个工作薄
- HSSFWorkbook wb = new HSSFWorkbook(fs);;
- HSSFSheet sheet = wb.getSheetAt(0);;
- HSSFPatriarch patriarch = sheet.createDrawingPatriarch();;
- HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short); 0,0,(short);10,10);;
- patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray();,HSSFWorkbook.PICTURE_TYPE_JPEG););;
//先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();;
BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"););;
ImageIO.write(bufferImg,"jpg",byteArrayOut);;
//读进一个excel模版
FileInputStream fos = new FileInputStream(filePathName+"/stencil.xlt");;
fs = new POIFSFileSystem(fos);;
//创建一个工作薄
HSSFWorkbook wb = new HSSFWorkbook(fs);;
HSSFSheet sheet = wb.getSheetAt(0);;
HSSFPatriarch patriarch = sheet.createDrawingPatriarch();;
HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short); 0,0,(short);10,10);;
patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray();,HSSFWorkbook.PICTURE_TYPE_JPEG););;