Java实现Excel导入导出
一、读取Excel常用的三种方式 (本文讲解97-2003 或更高版本)最底下有码云地址,不用一个个敲
1、POI
2、JXL
3、FASTEXCEL
二、POI
Apache POI 是Apache软件基金会的开放源码函式库,POI提供API给java程序对Microsoft Office格式档案读和写的功能
HSSF 是Horrible SpreadSheet Format的缩写,也即 “讨厌的电子表达格式”。通过 HSSF,你可以用纯java代码来读取、写入、修改Excel文件。
知识点补充:
HSSF – 读写Microsoft Excel 格式档案的功能。
XSSF – 读写Microsoft Excel OOXML格式档案的功能。
HWPF – 读写Microsoft Word 格式档案的功能。
HSLF – 读写Microsoft PowerPoint格式档案的功能。
HDGF – 读写Microsoft Visio格式档案的功能
如果想生成 PDF 可以使用 iText 技术
通过iText不仅可以生成PDF或者rtf 的文档,而且可以将XML、Html文件转化成PDF文件
下载iText.jar 文件以后,只需要在系统的CLASSPATH中加入iText.jar的路径,在程序中就可以使用iText类库了。
二、JXL
java Execl是一开放的源码项目,可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。
包括常见格式的设置:字体,颜色,背景,合并单元格等。
三、POI 、 JXL 对比
POI 效率高 JXL效率低
POI 操作相对复杂 JXL操作简单
POI 支持字体、数字、日期操作 JXL支持字体、数字、日期操作
POI 能修饰单元格属性 JXL能支持修饰单元格属性,格式支持不如POI强大
POI 支持公式,宏,图像图表一些企业应用上会非常实用 JXL 部分支持
四、FastExcel
FastExcel是一个采用纯java开发的excel文件读写组件,支持Excel 97-2003文件格式。
FastExcel只能读取单元格的字符信息,而其他属性 如颜色、字体等就不支持了,因此FastExcel只需要很小的内存。
五、开始学习 (这里是pom方式引入)
1、Excel 实战 之 JXL
首先第一步引入JXL
<!-- jxl --> <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6.10</version> </dependency>
实战之创建Excel
导入
package com.excel.demo.jxl; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import java.io.File; public class JxlCreateExcel { public static void main(String[] args) { // 首先设置表格第一行 表格头名称 也就是列名 String [] title = {"id","name","sex"}; // 创建Excel文件 存入路径 File file = new File("e:/jxl.xls"); try { file.createNewFile(); // 创建工作薄 WritableWorkbook workbook = Workbook.createWorkbook(file); // 创建sheet WritableSheet sheet = workbook.createSheet("sheet1",0); // 添加数据 Label label = null; // 第一行设置列名 for (int i = 0; i < title.length; i++) { label = new Label(i,0,title[i]); sheet.addCell(label); } // 追加数据 从第二行开始 i从1开始 for (int i = 1; i < 9; i++) { label = new Label(0,i,"id:"+i); sheet.addCell(label); label = new Label(1,i,"user"); sheet.addCell(label); label = new Label(2,i,"男"); sheet.addCell(label); } // 写入 并在最后关闭流 workbook.write(); workbook.close(); } catch (Exception e) { e.printStackTrace(); } } }
package com.excel.demo.jxl; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import java.io.File; import java.io.IOException; public class JxlReadExcel { public static void main(String[] args) { try { // 创建 Workbook Workbook workbook = Workbook.getWorkbook(new File("e:/jxl.xls")); // 获取工作表sheet Sheet sheet = workbook.getSheet(0); // 获取数据 for (int i = 0; i < sheet.getRows(); i++) {// 获取行 for (int j = 0; j < sheet.getColumns(); j++) {// 获取列 Cell cell = sheet.getCell(j,i); System.out.print(cell.getContents() + " ");// 得到单元格的内容 } System.out.println(); } workbook.close(); } catch (Exception e) { e.printStackTrace(); } } }
1、Excel 实战 之 POI
引入poi pom
<!-- poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency> <!-- commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.2</version> </dependency>
创建Excel 代码如下:
导入
package com.excel.demo.poi; import org.apache.commons.io.FileUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.io.File; import java.io.FileOutputStream; public class PoiCreateExcel { public static void main(String[] args) { // 创建表头 String[] title = {"id","name","sex"}; //创建Excel工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); //创建一个工作表shheet HSSFSheet sheet = workbook.createSheet(); //创建第一行 HSSFRow row = sheet.createRow(0); HSSFCell cell = null; // 插入第一行 for (int i = 0; i < title.length; i++) { cell = row.createCell(i); cell.setCellValue(title[i]); } // 追加数据 for (int i = 1; i < 10; i++) {// 这里的int 起始是1 也就是第二行开始 HSSFRow nexTrow = sheet.createRow(i); HSSFCell cell2 = nexTrow.createCell(0); cell2.setCellValue("a"+i); cell2 = nexTrow.createCell(1); cell2.setCellValue("user"); cell2 = nexTrow.createCell(2); cell2.setCellValue("男"); } // 创建一个文件 File file = new File("e:/poi.xls"); try { file.createNewFile(); // 将内容存盘 FileOutputStream stream = FileUtils.openOutputStream(file); workbook.write(stream); stream.close(); } catch (Exception e) { e.printStackTrace(); } } }
package com.excel.demo.poi; import org.apache.commons.io.FileUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import java.io.File; public class PoiReadExcel { public static void main(String[] args) { // 引入需要解析的文件 File file = new File("e:/poi.xls"); try { // 创建Excel 读取文件内容 HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file)); /** * 第一种方式读取Sheet页 */ // HSSFSheet sheet = workbook.getSheet("Sheet0"); /** * 第二种方式读取Sheet页 */ HSSFSheet sheet = workbook.getSheetAt(0); int firstRowNum = 0;// 起始行第0行 int lasrRowNum = sheet.getLastRowNum();// 一直读到最后一行 for (int i = 0; i < lasrRowNum; i++) { HSSFRow row = sheet.getRow(i); // 获取当前最后单元格列号 int lastCellNum = row.getLastCellNum(); for (int j = 0; j < lastCellNum; j++) { HSSFCell cell = row.getCell(j); String value = cell.getStringCellValue();// 注意! 如果Excel 里面的值是String 那么getStringCellValue 如果是其他类型 则需要修改 System.out.print(value + " "); } System.out.println(); } } catch (Exception e) { e.printStackTrace(); } } }
以上支持97-2003版本的
接下来就是高版本的Excel 讲解
引入poi额外包
<!-- poi高版本额外包 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-examples</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-excelant</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>3.9</version> </dependency>
导出
package com.excel.demo.poi2; import org.apache.commons.io.FileUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.File; import java.io.FileOutputStream; public class PoiCreateExcel { public static void main(String[] args) { // 创建表头 String[] title = {"id","name","sex"}; //创建Excel工作薄 XSSFWorkbook workbook = new XSSFWorkbook(); //创建一个工作表shheet Sheet sheet = workbook.createSheet(); //创建第一行 Row row = sheet.createRow(0); Cell cell = null; // 插入第一行 for (int i = 0; i < title.length; i++) { cell = row.createCell(i); cell.setCellValue(title[i]); } // 追加数据 for (int i = 1; i < 10; i++) {// 这里的int 起始是1 也就是第二行开始 Row nexTrow = sheet.createRow(i); Cell cell2 = nexTrow.createCell(0); cell2.setCellValue("a"+i); cell2 = nexTrow.createCell(1); cell2.setCellValue("user"); cell2 = nexTrow.createCell(2); cell2.setCellValue("男"); } // 创建一个文件 File file = new File("e:/poi.xlsx");// 这里可以修改成高版本的 try { file.createNewFile(); // 将内容存盘 FileOutputStream stream = FileUtils.openOutputStream(file); workbook.write(stream); stream.close(); } catch (Exception e) { e.printStackTrace(); } } }