前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >POI如何往单元格中写公式并计算demo

POI如何往单元格中写公式并计算demo

作者头像
在水一方
发布2022-12-07 14:34:17
9060
发布2022-12-07 14:34:17
举报
文章被收录于专栏:在水一方在水一方

需求

导出excel的时候需要导出某些通过公式计算的单元格

场景一

将公式写入某个单元格并执行计算

代码语言:javascript
复制
    @Test
    public void formulaTest2() throws IOException {
	//本地创建formula.xlsx测试文件
        InputStream in = new FileInputStream("D:\\formula.xlsx");
        Workbook book = new XSSFWorkbook(in);
        Sheet sheet = book.getSheet("formula");
	// 这里必须要设置为true
        sheet.setForceFormulaRecalculation(true);
        Cell cell = sheet.getRow(6).getCell(2);
        // 可跨sheet页,"基础参数"为另外一个sheet也的名字
        cell.setCellFormula("基础参数!B3"); 

//        XSSFFormulaEvaluator formulaEvaluator= (XSSFFormulaEvaluator) book.getCreationHelper().createFormulaEvaluator();
//        formulaEvaluator.evaluateFormulaCell(cell);
        OutputStream stream = new FileOutputStream("D:\\formula.xlsx");
        book.write(stream);
        in.close();

    }

注意 : cell.setCellFormula("A3+A6")时公式的值中不能加等号,否则会报错

场景二

只把公式写到对应的某个各自不执行计算,自己往里面填充值

代码语言:javascript
复制
    @Test
    public void formulaTest2() throws IOException {
        InputStream in = new FileInputStream("D:\\formula.xlsx");
        Workbook book = new XSSFWorkbook(in);
        Sheet sheet = book.getSheet("formula");
        // 执行强制计算
        Cell cell = sheet.getRow(6).getCell(2);
	// 设置公式
        cell.setCellFormula("A3+A6");
        // 填充自己预设的值
        cell.setCellValue(11);
//        XSSFFormulaEvaluator formulaEvaluator= (XSSFFormulaEvaluator) book.getCreationHelper().createFormulaEvaluator();
//        formulaEvaluator.evaluateFormulaCell(cell);
        OutputStream stream = new FileOutputStream("D:\\formula.xlsx");
        book.write(stream);
        in.close();


    }

二 往excel中插入图片

代码语言:javascript
复制
public class TestCellStyle {
    public static void main(String[] args) throws Exception {
        //创建工作簿,excel2007版本的,如果是excel2003的话。创建的对象是:HSSFWorkbook
        Workbook workbook = new SXSSFWorkbook();
        //创建sheet
        Sheet sheet = workbook.createSheet("picture sheet");
 
        //创建文件输入流
        FileInputStream inputStream = new FileInputStream("D:\\2345Downloads\\datupian.png");
        //利用POI提供的工具类把文件流转化成二进制数据
        byte[] bytes = IOUtils.toByteArray(inputStream);
 
        //向POI内存中添加一张图片,返回图片在图片集合中的索引
        int pictureIndex = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);//参数一:图片的二进制数据,参数二:图片类型
 
        //从Workbook中得到绘制图片的工具类
        CreationHelper helper = workbook.getCreationHelper();
        //创建锚点,设置图片坐标
        ClientAnchor clientAnchor = helper.createClientAnchor();
        clientAnchor.setRow1(2);//设置起始行
        clientAnchor.setCol1(3);//设置起始列
 
        //从sheet对象中得到一个绘图对象
        Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();
 
        //绘制图片,锚点,图片在内存中的位置
        Picture picture = drawingPatriarch.createPicture(clientAnchor, pictureIndex);
 
        // 使用固定的长宽比例系数
        double a = 10;//表示的是10列
        double b = 15;//表示的是15行
        picture.resize(a,b);//自适应渲染图片
 
        //创建文件输出流
        FileOutputStream out = new FileOutputStream("D:\\2345Downloads\\picture2.xlsx");
        //调用工作簿的write创建excel
        workbook.write(out);
        out.close();
    }
}

转载自文章:https://blog.csdn.net/zengdongwen/article/details/103490661

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求
    • 场景一
    • 场景二
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档