java操作excel的两种方式POI、JXL
许多系统都有数据导出的功能,大多数是导出excel文件,比如对一些报表、采购单等等。最近也是被师傅要求,对公司产品做excel导出功能,所以学习了一下java如何操作excel。下面是我用javase写的两个简单的demo,分别对应JXL方式和POI方式。
一、准备工作
demo对应jar包:jxl-2.6.jar、poi-4.0.0.jar
二、jxl方式操作excel
package excel.jxl; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; /** * jxl方式操作excel * @author admin * */ public class JxlExcelDemo { public static void main(String[] args) throws RowsExceededException, WriteException, IOException, BiffException { JxlExcelDemo demo = new JxlExcelDemo(); // 写入内容 // demo.jxlWriteExcel(); // 读取内容 demo.jxlReadExcel(); } /** * jxl方式对excel文件写入 * @throws IOException * @throws RowsExceededException * @throws WriteException */ public void jxlWriteExcel() throws IOException, RowsExceededException, WriteException { // 创建文件 File jxlFile = new File("src/excel/jxl/jxl.xls"); // 获得WritableWorkbook对象 WritableWorkbook wb = Workbook.createWorkbook(jxlFile); // 获得工作簿 WritableSheet sheet = wb.createSheet("sheet", 0); // 对工作簿单元格赋值 for (int row = 0; row < 10; row++) { for (int col = 0; col < 10; col++) { sheet.addCell(new Label(col, row, "test" + row + col)); } } // 将WritableWorkbook对象内容写入文件 wb.write(); wb.close(); } /** * jxl方式对excel文件读取 * @throws BiffException * @throws FileNotFoundException * @throws IOException */ public void jxlReadExcel() throws BiffException, FileNotFoundException, IOException { // 获得Workbook对象 Workbook wb = Workbook.getWorkbook(new FileInputStream(new File("src/excel/jxl/jxl.xls"))); // 获得所有的工作簿 Sheet[] sheets = wb.getSheets(); if(sheets != null) { for (Sheet sheet : sheets) { // 获取工作簿的行数 int rows = sheet.getRows(); // 获取工作簿的列数 int cols = sheet.getColumns(); for(int row = 0; row < rows; row++) { for (int col = 0; col < cols; col++) { String contents = sheet.getCell(col, row).getContents(); System.out.printf(contents + " "); } System.out.println(); } } } wb.close(); } }
三、poi方式操作excel
package excel.poi; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class PoiExcelDemo { public static void main(String[] args) throws IOException { PoiExcelDemo demo = new PoiExcelDemo(); // 写入内容 // demo.poiWriteExcel(); // 读取内容 demo.poiReadExcel(); } /** * poi方式对excel文件写入 * @throws IOException */ public void poiWriteExcel() throws IOException { // 创建HSSFWorkbook对象 HSSFWorkbook wb = new HSSFWorkbook(); // 创建工作簿 HSSFSheet sheet = wb.createSheet("sheet"); // 为工作簿创建行 for (int row = 0; row < 10; row++) { HSSFRow r = sheet.createRow(row); // 在工作簿的行中创建列 for (int col = 0; col < 10; col++) { r.createCell(col).setCellValue("test" + row + col); } } // 获取文件输出流 FileOutputStream fos = new FileOutputStream(new File("src/excel/poi/poi.xls")) ; // 将wb对象中的内容写入文件 wb.write(fos); fos.close(); wb.close(); } /** * poi方式对excel文件读取 * @throws IOException */ public void poiReadExcel() throws IOException { // 获取文件 POIFSFileSystem pfs = new POIFSFileSystem(new File("src/excel/poi/poi.xls")); // 获取wb对象 HSSFWorkbook wb = new HSSFWorkbook(pfs); // 获取excel所有工作簿 int sheets = wb.getNumberOfSheets(); for (int index = 0; index < sheets; index++) { // 获取指定工作簿 HSSFSheet sheet = wb.getSheetAt(index); // 获取指定工作簿所有行 int rows = sheet.getPhysicalNumberOfRows(); // 获取指定工作簿首行列数 HSSFRow firstRow = sheet.getRow(0); if(firstRow == null) { continue; } int cols = firstRow.getPhysicalNumberOfCells(); for (int row = 0; row < rows; row++) { // 获取工作簿指定行信息 HSSFRow r = sheet.getRow(row); for (int col = 0; col < cols; col++) { // 获取工作簿指定行指定列数据 String value = r.getCell(col).getStringCellValue(); System.out.print(value + " "); } System.out.println(); } } pfs.close(); wb.close(); } }
四、总结
通过这两个demo做下简单的总结:
jxl方式是对excel的整个sheet做操作,在sheet对象中在对应行、列的单元格中写入、读取数据;
poi方式是对excel的行、列做操作,在sheet对象中获取行对象,由行对象获取列对象,在指定的列对象中写入、读取数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)