Apache POI 使用Java处理Excel数据 进阶
1.POI入门教程链接
http://t.csdnimg.cn/Axn4P
http://t.csdnimg.cn/Axn4P建议:从入门看起会更好理解POI对Excel数据的使用和处理
记得引入依赖:
org.apache.poi
poi
4.0.1
org.apache.poi
poi-ooxml
4.0.1
org.apache.poi
poi-ooxml-schemas
4.0.1
2.POI对单元格样式处理
// JUnit的@Test注解表示这是一个测试方法
@Test
void testExcel() throws IOException {
// 创建一个新的XSSFWorkbook对象,这是操作Excel文件的核心类
XSSFWorkbook workbook = new XSSFWorkbook();
// 在工作簿中创建一个名为"sheet1"的工作表
XSSFSheet sheet = workbook.createSheet("sheet1");
// 在工作表中创建第三行(行索引从0开始)
Row row = sheet.createRow(2);
// 在该行中创建第三个单元格(列索引从0开始)
Cell cell = row.createCell(2);
// 设置单元格的值为"Hello World 2024"
cell.setCellValue("Hello World 2024");
// 创建一个单元格样式
CellStyle cellStyle = workbook.createCellStyle();
// 设置单元格的上下左右边框为细线
cellStyle.setBorderTop(BorderStyle.THIN);
cellStyle.setBorderBottom(BorderStyle.THIN);
cellStyle.setBorderLeft(BorderStyle.THIN);
cellStyle.setBorderRight(BorderStyle.THIN);
// 创建一个字体对象
Font font = workbook.createFont();
// 设置字体为"宋体"
font.setFontName("宋体");
// 设置字体大小为32磅
font.setFontHeightInPoints((short) 32);
// 将字体应用到单元格样式中
cellStyle.setFont(font);
// 设置行高为50磅
row.setHeightInPoints((short) 50);
// 设置第三列的宽度为100 * 365(单位是1/256个字符宽度)
sheet.setColumnWidth(2, 100 * 365);
// 将单元格样式应用到单元格上
cell.setCellStyle(cellStyle);
// 创建一个文件输出流,用于将Excel文件写入磁盘
FileOutputStream out = new FileOutputStream("D:\\Desktop\\JavaCode\\poi-demo\\src\\main\\resources\\test.xlsx");
// 将工作簿写入输出流
workbook.write(out);
// 关闭输出流
out.close();
}
3.将图片写入Excel表格中
// JUnit的@Test注解表示这是一个测试方法
@Test
void testDrawExcel() throws IOException {
// 创建一个新的XSSFWorkbook对象,这是操作Excel文件的核心类
XSSFWorkbook workbook = new XSSFWorkbook();
// 在工作簿中创建一个名为"sheet1"的工作表
XSSFSheet sheet = workbook.createSheet("sheet1");
// 创建一个文件输入流,用于读取图片文件
FileInputStream in = new FileInputStream("D:\\Desktop\\test.jpg");
// 创建一个字节数组,长度为图片文件的大小
byte[] bytes = new byte[in.available()];
// 读取图片文件到字节数组
in.read(bytes);
// 关闭输入流
in.close();
// 将图片添加到工作簿,并返回图片的索引
int index = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);
// 获取创建助手,用于创建绘图对象
CreationHelper helper = workbook.getCreationHelper();
// 创建绘图对象,用于在工作表中绘制图片
XSSFDrawing drawing = sheet.createDrawingPatriarch();
// 创建客户端锚点,用于指定图片的位置
ClientAnchor anchor = helper.createClientAnchor();
// 设置图片的起始行
anchor.setRow1(0);
// 设置图片的起始列
anchor.setCol1(1);
// 创建图片对象,并将其插入到工作表中
XSSFPicture picture = drawing.createPicture(anchor, index);
// 调整图片大小以适应单元格
picture.resize();
// 创建一个文件输出流,用于将Excel文件写入磁盘
FileOutputStream out = new FileOutputStream("D:\\Desktop\\JavaCode\\poi-demo\\src\\main\\resources\\test.xlsx");
// 将工作簿写入输出流
workbook.write(out);
// 关闭输出流
out.close();
}
4.使用模版Excel
如何想根据模版进行创建Excel表格。而不是直接覆盖创建新的Excel表格的方式:
// JUnit的@Test注解表示这是一个测试方法
@Test
void testDrawExcel() throws IOException {
// 使用Spring的ClassPathResource来加载类路径下的资源文件
Resource resource = new ClassPathResource("test.xlsx");
// 获取资源文件的FileInputStream
FileInputStream resourceIn = new FileInputStream(resource.getFile());
// 使用FileInputStream加载现有工作簿
XSSFWorkbook workbook = new XSSFWorkbook(resourceIn);
// 获取工作簿中的第一个工作表
XSSFSheet sheet = workbook.getSheetAt(0);
// 创建一个文件输入流,用于读取图片文件
FileInputStream in = new FileInputStream("D:\\Desktop\\test.jpg");
// 创建一个字节数组,长度为图片文件的大小
byte[] bytes = new byte[in.available()];
// 读取图片文件到字节数组
in.read(bytes);
// 关闭输入流
in.close();
// 将图片添加到工作簿,并返回图片的索引
int index = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG);
// 获取创建助手,用于创建绘图对象
CreationHelper helper = workbook.getCreationHelper();
// 获取工作表中的绘图对象,如果没有则创建
Drawing drawing = sheet.createDrawingPatriarch();
// 创建客户端锚点,用于指定图片的位置
ClientAnchor anchor = helper.createClientAnchor();
// 设置图片的起始行为第11行(行索引从0开始)
anchor.setRow1(10);
// 设置图片的起始列为第2列(列索引从0开始)
anchor.setCol1(1);
// 创建图片对象,并将其插入到工作表中
Picture picture = drawing.createPicture(anchor, index);
// 调整图片大小以适应单元格
picture.resize();
// 创建一个文件输出流,用于将Excel文件写入磁盘
FileOutputStream out = new FileOutputStream("D:\\Desktop\\JavaCode\\poi-demo\\src\\main\\resources\\test.xlsx");
// 将工作簿写入输出流
workbook.write(out);
// 关闭输出流
out.close();
}
5.自定义Excel工具类
(1)自定义注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ExcelAttribute {
/** 对应的列名称 */
String name() default "";
/** 列序号 */
int sort();
/** 字段类型对应的格式 */
String format() default "";
}
(2) 导出工具类:
public class ExcelExportUtil {
private int rowIndex;
private int styleIndex;
private String templatePath;
private Class clazz;
private Field fields[];
public ExcelExportUtil(Class clazz,int rowIndex,int styleIndex) {
this.clazz = clazz;
this.rowIndex = rowIndex;
this.styleIndex = styleIndex;
fields = clazz.getDeclaredFields();
}
/**
* 基于注解导出
*/
public void export(HttpServletResponse response,InputStream is, List objs,String
fileName) throws Exception {
XSSFWorkbook workbook = new XSSFWorkbook(is);
Sheet sheet = workbook.getSheetAt(0);
CellStyle[] styles = getTemplateStyles(sheet.getRow(styleIndex));
AtomicInteger datasAi = new AtomicInteger(rowIndex);
for (T t : objs) {
Row row = sheet.createRow(datasAi.getAndIncrement());
for(int i=0;i
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
