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对象中获取行对象,由行对象获取列对象,在指定的列对象中写入、读取数据。

浙公网安备 33010602011771号