Java实现excel导入导出
涉及技术:Struts2框架(文件上传)、xml解析技术(定制导入模板)、JQuery EasyUI
使用 new File(“路径/文件名”);获取文件实例
使用 common-io下的FileUtils 工具类调用 .openInputStream(文件实例)获取匿名对象
使用匿名对象为构造参数创建 Excel 工作簿 ,new HSSFWorkbook(输出流匿名对象)
根据工作簿实例获取 工作表 sheet 的实例 HSSFSheet ;
使用 .getLastRowNum() 可获取sheet 中的最后一行行号,根据行号遍历每一行;
每一行中使用 sheet.getRow(索引) 获取每一行的实例;使用 .getLastCellNum()获取行中的最后一列索引;
遍历当前行的每一列,使用 row.getCell()获取行中每一列的单元格对象;
使用 .getStringCellValue() 获取每个单元格对象的值
最终将 excel 文件下载到本地,需创建一个文件;
具体根据 File 的实例调用 .createNewFile(); 创建一个新的文件;
使用工具类中的FileUtils.openOutputStream(file);创建输出流对象
将工作簿 使用 .write(stream);的方式将数据输出
最终需要执行流的关闭操作
基于poi 里创建 excel 表单文件,
创建 HSSFWorkbook() 的实例,其实例便是一个工作薄;
再根据工作簿创建对应的工作表 sheet , 使用 .createSheet();
数据的添加使用 工作表 sheet 创建要存放数据的行, sheet .createRow(索引),返回值是 HSSFRow 代表行;
插入数据时需根据插入位置创建当前行的每一列单元格: 使用HSSFRow的实例 调用 .createCell(索引)创建单元格,并使用setCellValue()执行数据的插入
从指定路径下的 excel 文件中获取数据的方式,
根据 new File("xxx")的匿名对象为形参使用Workbook.getWorkbook()获取工作簿
根据工作簿中工作表的页面索引获取对应页面的工作表 sheet
从所获取的工作表 sheet 中 遍历每一行 : sheet.getRows()
从所获取的工作表 sheet 中 遍历每一列 : sheet.getColumns()
根据行列的索引获取每个单元格的数据
成功执行的 JXL 效果图
excel的创建:
声明Excel文件路径 new File ("xx/xx.xls")
根据路径实例创建 excel 工作簿
创建工作簿的页码, excel 是可以有多个页面的,每页使用 sheet1 表示
需要创建多个页面时只需要使用 workbook.createSheet(“页码”,索引位置(从0开始))就可以了
excel 表格内部的元素声明使用 Label (标签)来表示,根据 new Label(xx,xx,xx);的构造方法来存入对应参数;其参数配置为(第几列,第几行,值)来进行表示;例: 最左上角的为 (0,0,"列名")表示第0列第0行,值为"列名"
读写Excel的三种常见技术
row 行
cell 列
sheet表
生成导入模板
使用POI导出excel
public class PoiReadExcel { public static void main(String[] args) { //需要解析的Excel文件 File file = new File("e:/poi_test.xls"); try { //创建工作簿,读取文件内容 HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file)); //读取Excel文件的第一个工作页 //方式一 //HSSFSheet sheet = workbook.getSheet("sheet0"); //方式二 HSSFSheet sheet = workbook.getSheetAt(0); int firstRowNum = 0; //第一行 //获取sheet中最后一行行号 int lastRowNum = sheet.getLastRowNum(); //获取最后一行 for(int i=0;i<=lastRowNum;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(); System.out.print(value+" "); } System.out.println(); } } catch (Exception e) { e.printStackTrace(); } } }
通过POI创建EXCEL
引入POI相关的jar包poi-xxx.jar
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; import java.io.IOException; /** * @author xueli.li * @create 2018/12/13 20:00 * @Description: **/ public class PoiExpExcel {//POI生成Excel文件 public static void main(String[] args) { String[] title = {"id", "name", "sex"}; //创建Excel工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); //创建一个工作表sheet HSSFSheet sheet = workbook.createSheet(); //创建第一行 HSSFRow row = sheet.createRow(0); HSSFCell cell = null; //插入第一行数据 id,name,sex for (int i = 0; i < title.length; i++) { cell = row.createCell(i); cell.setCellValue(title[i]); } //追加数据 for (int i = 1; i <= 10; i++) { HSSFRow nextrow = sheet.createRow(i); HSSFCell cell2 = nextrow.createCell(0); cell2.setCellValue("a" + i); cell2 = nextrow.createCell(1); cell2.setCellValue("user" + i); cell2 = nextrow.createCell(2); cell2.setCellValue("男"); } //创建一个文件 File file = new File("e:/poi_test.xls"); try { file.createNewFile(); //将Excel内容存盘//FileUtils类来自commons-io.jar包 FileOutputStream stream = FileUtils.openOutputStream(file); workbook.write(stream); stream.close(); } catch (IOException e) { e.printStackTrace(); } } }
jXL读取EXCEL
public class JslReadExcel { public static void main(String[] args) { //File file = new File("e:/jxl_test.xls"); try { //创建工作簿 Workbook workbook = Workbook.getWorkbook(new File("e:/jxl_test.xls")); //获取第一个工作表sheet页 Sheet sheet = workbook.getSheet(0); //循环获取 //1.循环行 for(int i=0;i<sheet.getRows();i++){ //2.循环列 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(); } } }
JXL创建Excel
下载并导入jxl.jar
public class JxlExcel { public static void main(String[] args) { //用数组存表头 String[] title={"id","name","sex","age"}; //创建Excel文件 File file = new File("e:/jxl_test.xls"); try { file.createNewFile(); //创建工作簿 WritableWorkbook workbook = Workbook.createWorkbook(file); //创建sheet WritableSheet sheet = workbook.createSheet("sheet1", 0); //往sheet中添加数据 Label label = null; //第一行设置列名 for(int i=0;i<title.length;i++){ //Label(i,0,title[i]) 表示第i列第0行,值为title[i] label = new Label(i,0,title[i]); //添加单元格 sheet.addCell(label); } //追加数据 for(int i=1;i<10;i++){ //Label(0,i,"a"+1) 表示第0列,第i行,值为“a”+1 label = new Label(0,i,"a"+i); sheet.addCell(label); label = new Label(1,i,"user"+i); sheet.addCell(label); label = new Label(2,i,"男"); sheet.addCell(label); label = new Label(3,i,"20"); sheet.addCell(label); } workbook.write(); workbook.close(); } catch (Exception e) { e.printStackTrace(); } } } }
读写excel三种常用技术
POI
JXL
FASTEXCEL
POI和JXL对比
读写excel三种常用技术
POI
JXL
FASTEXCEL
定制excel导入模板
定制excel导入模板