需求
导出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();
}</code></pre></div></div><blockquote><p> 注意 : 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();
}</code></pre></div></div><p>二 往excel中插入图片</p><div class="rno-markdown-code"><div class="rno-markdown-code-toolbar"><div class="rno-markdown-code-toolbar-info"><div class="rno-markdown-code-toolbar-item is-type"><span class="is-m-hidden">代码语言:</span>javascript</div></div><div class="rno-markdown-code-toolbar-opt"><div class="rno-markdown-code-toolbar-copy"><i class="icon-copy"></i><span class="is-m-hidden">复制</span></div></div></div><div class="developer-code-block"><pre class="prism-token token line-numbers language-javascript"><code class="language-javascript" style="margin-left:0">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