本篇文章着重分享两个方面:使用poi在EXCEL中插入图片 和 插入公式
1、使用 Apache POI 在指定的 Excel 单元格中插入图片:
插入图片的步骤
-
创建或读取 Excel 文件:使用 Apache POI 创建一个新的 Excel 工作簿(Workbook),或者从现有的 Excel 文件中读取。
-
加载图片文件:将要插入的图片加载为字节数组。
-
创建图片对象:使用Workbook的addPicture方法将图片添加到 Excel 中。
-
在指定单元格中插入图片:使用Drawing和ClientAnchor类来指定图片的插入位置。
代码示例:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class InsertImageInExcel {
public static void main(String[] args) throws IOException {
// 创建一个新的工作簿
Workbook workbook = new XSSFWorkbook();
// 创建一个新的工作表
Sheet sheet = workbook.createSheet("Sheet1");
// 读取图片文件
FileInputStream imageFile = new FileInputStream("***/image.jpg");
byte[] imageBytes = imageFile.readAllBytes();
imageFile.close();
// 将图片添加到工作簿中,并返回图片索引
int pictureIndex = workbook.addPicture(imageBytes, Workbook.PICTURE_TYPE_JPEG);
// 创建一个绘图对象
Drawing<?> drawing = sheet.createDrawingPatriarch();
// 创建一个客户端锚点,指定图片的位置
ClientAnchor anchor = workbook.getCreationHelper().createClientAnchor();
anchor.setCol1(1); // 图片开始插入的列
anchor.setRow1(1); // 图片开始插入的行
anchor.setCol2(3); // 图片结束的列(可选)
anchor.setRow2(5); // 图片结束的行(可选)
anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
// 插入图片
Picture picture = drawing.createPicture(anchor, pictureIndex);
picture.resize(); // 调整图片大小以适应单元格(可选)
// 将工作簿写入文件
FileOutputStream fileOut = new FileOutputStream("***/excel-file.xlsx");
workbook.write(fileOut);
fileOut.close();
// 关闭工作簿
workbook.close();
system.out.println("图片插入成功!");
}
}
使用注意事项
- 图片格式:Apache POI 支持的图片格式包括 PNG、JPEG 和 EMF。
- 单元格合并和尺寸调整:如果需要精确控制图片在 Excel 中的显示,可以手动调整单元格大小或合并单元格,以适应图片的大小。
- 文件路径和异常处理:确保文件路径正确,并处理可能的异常,例如FileNotFoundException或IOException。
2、使用Apache POI 在指定的 Excel 单元格中插入公式
插入公式的步骤
-
创建或读取 Excel 文件:使用 Apache POI 创建一个新的 Excel 工作簿(Workbook),或者从现有的 Excel 文件中读取。
-
定位到指定的单元格:通过Sheet和Row对象找到需要插入公式的单元格。
-
插入公式:使用setCellFormula方法将公式设置到指定的单元格中。
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class InsertFormulaInExcel {
public static void main(String[] args) throws IOException {
// 创建一个新的工作簿
Workbook workbook = new XSSFWorkbook();
// 创建一个新的工作表
Sheet sheet = workbook.createSheet("Sheet1");
// 创建一行
Row row = sheet.createRow(0);
// 在第一行的第一个和第二个单元格设置数字
Cell cellA1 = row.createCell(0);
cellA1.setCellValue(5);
Cell cellB1 = row.createCell(1);
cellB1.setCellValue(10);
// 在第三个单元格插入一个公式
Cell cellC1 = row.createCell(2);
cellC1.setCellFormula("A1+B1"); // 插入公式:A1 + B1
// 重新计算公式(可选,确保公式结果显示)
Formulaevaluator evaluator = workbook.getCreationHelper().createFormulaevaluator();
evaluator.evaluateFormulaCell(cellC1);
// 将工作簿写入文件
FileOutputStream fileOut = new FileOutputStream("***/excel-file.xlsx");
workbook.write(fileOut);
fileOut.close();
// 关闭工作簿
workbook.close();
system.out.println("公式插入成功!");
}
}
使用注意事项
-
公式格式:Excel 公式使用标准的 A1 样式表示,例如SUM(A1:A10)、AVERAGE(B1:B10)。确保公式语法正确,否则可能导致公式错误。
-
重新计算公式:虽然 Excel 会在打开文件时自动计算公式,但在某些情况下,使用Formulaevaluator可以在保存文件之前计算公式的值。这在需要显示公式计算结果时很有用。
-
文件路径和异常处理:确保文件路径正确,并处理可能的异常,例如FileNotFoundException或IOException。
-
支持的 Excel 功能:Apache POI 支持 Excel 中的大多数常用公式,但不支持所有的 Excel 函数。请确保使用的公式是 POI 所支持的。