java实现excel导入导出
Java导入导出excel,easypoi的简单使用

Java导⼊导出excel,easypoi的简单使⽤基于spring boot框架,先上pom配置<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.0.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.0.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.0.0</version></dependency>实体类package com.vo;import cn.afterturn.easypoi.excel.annotation.Excel;import com.baomidou.mybatisplus.annotation.TableName;import mon.data.entity.CurdEntity;@TableName("wx_user")public class User extends CurdEntity {@Excel(name = "姓名")String name;@Excel(name = "⽤户")String user;@Excel(name = "年龄")int groupValue;public int getGroupValue() {return groupValue;}public void setGroupValue(int groupValue) {this.groupValue = groupValue;}public String getName() {return name;}public void setName(String name) { = name;}public String getUser() {return user;}public void setUser(String user) {er = user;}}通⽤⽅法类package mon.util;import cn.afterturn.easypoi.excel.ExcelExportUtil;import cn.afterturn.easypoi.excel.ExcelImportUtil;import cn.afterturn.easypoi.excel.entity.ExportParams;import cn.afterturn.easypoi.excel.entity.ImportParams;import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;import ng3.StringUtils;import ermodel.Workbook;import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletResponse;import java.io.File;import java.io.IOException;import .URLEncoder;import java.util.List;import java.util.Map;import java.util.NoSuchElementException;/*** @Description: 表格⼯具类*/public class PoiUtils {public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response) { ExportParams exportParams = new ExportParams(title, sheetName);exportParams.setCreateHeadRows(isCreateHeader);defaultExport(list, pojoClass, fileName, response, exportParams);}public static void exportExcel(List<?> list, String title, String sheetName, Class<?> pojoClass, String fileName, HttpServletResponse response) {defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName));}public static void exportExcel(List<Map<String, Object>> list, String fileName, HttpServletResponse response) {defaultExport(list, fileName, response);}private static void defaultExport(List<?> list, Class<?> pojoClass, String fileName, HttpServletResponse response, ExportParams exportParams) {Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);if (workbook != null) ;downLoadExcel(fileName, response, workbook);}private static void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {try {response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));workbook.write(response.getOutputStream());} catch (IOException e) {throw new RuntimeException(e.getMessage());}}private static void defaultExport(List<Map<String, Object>> list, String fileName, HttpServletResponse response) {Workbook workbook = ExcelExportUtil.exportExcel(list, ExcelType.HSSF);if (workbook != null) ;downLoadExcel(fileName, response, workbook);}/*** 导⼊* @param filePath* @param titleRows* @param headerRows* @param pojoClass* @param <T>* @return*/public static <T> List<T> importExcel(String filePath, Integer titleRows, Integer headerRows, Class<T> pojoClass) {if (StringUtils.isBlank(filePath)) {return null;}ImportParams params = new ImportParams();params.setTitleRows(titleRows);params.setHeadRows(headerRows);List<T> list = null;try {list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);} catch (NoSuchElementException e) {throw new RuntimeException("模板不能为空");} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e.getMessage());}return list;}/*** 导⼊表格* @param file* @param pojoClass* @param <T>* @return*/public static <T> List<T> importExcel(MultipartFile file, Class<T> pojoClass) {if (file == null) {return null;}ImportParams params = new ImportParams();try {List<T> list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);return list;} catch (NoSuchElementException e) {throw new RuntimeException("excel⽂件不能为空");} catch (Exception e) {throw new RuntimeException(e.getMessage());}}}接⼝调⽤相关⽅法,这⾥演⽰⼀下导⼊功能@PostMapping("excelList")//批量保存,⼀条保存失败,数据全部回滚,测试事务是否⽣效public MsgDataBody excelList(MultipartFile file){MsgDataBody<List<User>> msgBody = new MsgDataBody();msgBody.setCode(Constant.Error.getCode());msgBody.setMsg("导⼊失败");try {List<User> userList = PoiUtils.importExcel(file,User.class);/** 相关导⼊操作* */msgBody.setData(userList);msgBody.setCode(Constant.Success.getCode());msgBody.setMsg("导⼊失败");}catch (Exception e){msgBody.setMsg("导⼊失败["+e.getMessage()+"]");}return msgBody;}更多的easypoi教程可以看官⽹教程:。
Java中Easypoi实现excel多sheet表导入导出功能

Java中Easypoi实现excel多sheet表导⼊导出功能Easypoi简化了开发中对⽂档的导⼊导出实现,并不像poi那样都要写⼤段⼯具类来搞定⽂档的读写。
第⼀步引⼊Easypoi依赖<!-- 导出⽂件⼯具 EasyPoi实现Excel读写管理测试⽤例 --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.2.0</version></dependency>Easypoi的注解使⽤说明(存留查看即可)第⼆步定义对应表格头数据对象实体类(注解的使⽤可以查阅上⾯的按需使⽤即可)@Setter@Getter@ToStringpublic class LoginCaseDto {@Excel(name = "flag(0是反向,1是正向)",orderNum = "1",width = 20)private String flag;@Excel(name = "urlid(访问id)",orderNum = "2",width = 20)private String urlid;@Excel(name = "name(登录账号)",orderNum = "3",width = 20)private String name;@Excel(name = "pwd(登录密码)",orderNum = "4",width = 20)private String pwd;@Excel(name = "desc(期望提⽰语)",orderNum = "5",width = 40)private String desc;@Excel(name = "actual(实际测试结果)",orderNum = "6",width = 40 )private String actual;@Excel(name = "urlpath(被测路径)",orderNum = "7",width = 40 )private String urlpath;}public class LoginUrlDto {@Excel(name = "id(访问测试类型)",orderNum = "1",width = 20)private String id;@Excel(name = "type(请求类型)",orderNum = "2",width = 20)private String type;@Excel(name = "url(访问地址)",orderNum = "3",width = 40)private String url;}第三步:封装Easypoi⼯具类(⽹上查了很多但是并不完整,这⾥补充下)关键封装⼯具类多sheet导⼊⽅法/*** 功能描述:根据接收的Excel⽂件来导⼊多个sheet,根据索引可返回⼀个集合* @param filePath 导⼊⽂件路径* @param sheetIndex 导⼊sheet索引* @param titleRows 表标题的⾏数* @param headerRows 表头⾏数* @param pojoClass Excel实体类* @return*/public static <T> List<T> importExcel(String filePath,int sheetIndex,Integer titleRows, Integer headerRows, Class<T> pojoClass) {// 根据file得到Workbook,主要是要根据这个对象获取,传过来的excel有⼏个sheet页ImportParams params = new ImportParams();// 第⼏个sheet页params.setStartSheetIndex(sheetIndex);params.setTitleRows(titleRows);params.setHeadRows(headerRows);List<T> list = null;try {list = ExcelImportUtil.importExcel(new File(filePath), pojoClass, params);} catch (NoSuchElementException e) {throw new RuntimeException("模板不能为空");} catch (Exception e) {e.printStackTrace();}return list;}excel导⼊⽰例(直接传⼊sheet索引获取对应的sheet表)多sheet表导出⽅法使⽤(需要把导⼊的多sheet表数据转成list集合获取新数据后调⽤该⽅法重新写⼊)/*** 功能描述:把同⼀个表格多个sheet测试结果重新输出,如果后续增加多个List<Map<String, Object>>对象,需要后⾯继续追加* @ExcelEntiry sheet表格映射的实体对象* @return*/public static String exportSheet( Object...objects){Workbook workBook = null;try {// 创建参数对象(⽤来设定excel得sheet得内容等信息)ExportParams deptExportParams = new ExportParams();// 设置sheet得名称deptExportParams.setSheetName("登录⽤例");// 设置sheet表头名称deptExportParams.setTitle("测试⽤例");// 创建sheet1使⽤得mapMap<String, Object> deptExportMap = new HashMap<>();// title的参数为ExportParams类型,⽬前仅仅在ExportParams中设置了sheetNamedeptExportMap.put("title", deptExportParams);// 模版导出对应得实体类型deptExportMap.put("entity", LoginCaseDto.class);// sheet中要填充得数据deptExportMap.put("data", objects[0]);ExportParams empExportParams = new ExportParams();empExportParams.setTitle("被测RUL路径");empExportParams.setSheetName("被测url");// 创建sheet2使⽤得mapMap<String, Object> empExportMap = new HashMap<>();empExportMap.put("title", empExportParams);empExportMap.put("entity", LoginUrlDto.class);empExportMap.put("data", objects[1]);// 将sheet1、sheet2使⽤得map进⾏包装List<Map<String, Object>> sheetsList = new ArrayList<>();sheetsList.add(deptExportMap);sheetsList.add(empExportMap);// 执⾏⽅法workBook = EasyPoiUtil.exportExcel(sheetsList, ExcelType.HSSF);//String fileName = URLEncoder.encode("test", "UTF-8");String filepath = (String) LoadStaticConfigUtil.getCommonYml( "testcaseexcel.cases");FileOutputStream fos = new FileOutputStream(filepath);workBook.write(fos);fos.close();}catch (Exception e){e.printStackTrace();}finally {if(workBook != null) {try {workBook.close();} catch (IOException e) {e.printStackTrace();}}}return "success";}最后即可获取新的测试结果表格。
Java数据导入导出Excel

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import jxl.Workbook;import jxl.format.UnderlineStyle;import bel;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;import jxl.write.biff.RowsExceededException;import ermodel.HSSFCell;import ermodel.HSSFCellStyle;import ermodel.HSSFRow;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;public class ExcelOpt {/*** 生成一个Excel文件jxl* @param fileName 要生成的Excel文件名* @jxl.jar 版本:2.6*/public static void writeExcel(String fileName){WritableWorkbook wwb = null;try {//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象wwb = Workbook.createWorkbook(new File(fileName));} catch (IOException e) {e.printStackTrace();}if(wwb!=null){//创建一个可写入的工作表//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置WritableSheet ws = wwb.createSheet("工作表名称", 0);//下面开始添加单元格for(int i=0;i<10;i++){for(int j=0;j<5;j++){//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");try {//将生成的单元格添加到工作表中ws.addCell(labelC);} catch (RowsExceededException e) {e.printStackTrace();} catch (WriteException e) {e.printStackTrace();}}}try {//从内存中写入文件中wwb.write();//关闭资源,释放内存wwb.close();} catch (IOException e) {e.printStackTrace();} catch (WriteException e) {e.printStackTrace();}}}/*** 生成一个Excel文件POI* @param inputFile 输入模板文件路径* @param outputFile 输入文件存放于服务器路径* @param dataList 待导出数据* @throws Exception* @roseuid:*/public static void exportExcelFile(String inputFile,String outputFile,List dataList) throws Exception{//用模板文件构造poiPOIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(inputFile));//创建模板工作表HSSFWorkbook templatewb = new HSSFWorkbook(fs);//直接取模板第一个sheet对象HSSFSheet templateSheet = templatewb.getSheetAt(1);//得到模板的第一个sheet的第一行对象为了得到模板样式HSSFRow templateRow = templateSheet.getRow(0);//HSSFSheet timplateSheet = templatewb.getSheetAt(1);//取得Excel文件的总列数int columns = templateSheet.getRow((short) 0).getPhysicalNumberOfCells();// Debug.println("columns is : " + columns); //========================= //创建样式数组HSSFCellStyle styleArray[] = new HSSFCellStyle[columns];//一次性创建所有列的样式放在数组里for (int s = 0; s < columns; s++) {//得到数组实例styleArray[s] = templatewb.createCellStyle();} 循环对每一个单元格进行赋值//定位行for (int rowId = 1; rowId < dataList.size(); rowId++) {//依次取第rowId行数据每一个数据是valueListList valueList = (List) dataList.get(rowId - 1);//定位列for (int columnId = 0; columnId < columns; columnId++) {//依次取出对应与colunmId列的值//每一个单元格的值String dataValue = (String) valueList.get(columnId);//取出colunmId列的的style//模板每一列的样式HSSFCellStyle style = styleArray[columnId];//取模板第colunmId列的单元格对象//模板单元格对象HSSFCell templateCell = templateRow.getCell((short) columnId);//创建一个新的rowId行行对象//新建的行对象HSSFRow hssfRow = templateSheet.createRow(rowId);//创建新的rowId行columnId列单元格对象//新建的单元格对象HSSFCell cell = hssfRow.createCell((short) columnId);//如果对应的模板单元格样式为非锁定if (templateCell.getCellStyle().getLocked() == false) {//设置此列style为非锁定style.setLocked(false);//设置到新的单元格上cell.setCellStyle(style);}//否则样式为锁定else {//设置此列style为锁定style.setLocked(true);//设置到新单元格上cell.setCellStyle(style);}//设置编码cell.setEncoding(HSSFCell.ENCODING_UTF_16);//Debug.println("dataValue : " + dataV alue);//设置值统一为Stringcell.setCellValue(dataV alue);}}//设置输入流FileOutputStream fOut = new FileOutputStream(outputFile);//将模板的内容写到输出文件上templatewb.write(fOut);fOut.flush();//操作结束,关闭文件fOut.close();}/*** 导出数据为XLS格式* @param fos 生成Excel文件Path* @param bo 要导入的数据*/public static void writeExcelBo(String fos, java.util.List ve) {jxl.write.WritableWorkbook wwb;try{wwb= Workbook.createWorkbook(new File(fos));jxl.write.WritableSheet ws= wwb.createSheet("上市新书", 10);ws.addCell(new bel(0, 1, "书名"));ws.addCell(new bel(1, 1, "作者"));ws.addCell(new bel(2, 1, "定价"));ws.addCell(new bel(3, 1, "出版社"));int bookSize=ve.size();BookVO book = new BookVO();for (int i= 0; i < bookSize; i++){book= (BookVO)ve.get(i);ws.addCell(new bel(0, i + 2, "" + book.getBookName()));ws.addCell(new bel(1, i + 2, book.getBookAuthor()));ws.addCell(new bel(2, i + 2, "" + book.getBookPrice()));ws.addCell(new bel(3, i + 2, book.getBookConcern()));}// jxl.write.WritableFont wfc=//newjxl.write.WritableFont(WritableFont.ARIAL,255,WritableFont.BOLD,false,UnderlineStyle.NO_U NDERLINE,jxl.format.Colour.BLACK);//jxl.write.WritableCellFormat wcfFC= new jxl.write.WritableCellFormat(wfc);ws.addCell(new bel(0, 0, "2007年07月即将上市新书!"));wwb.write();// 关闭Excel工作薄对象wwb.close();} catch (IOException e){} catch (RowsExceededException e){} catch (WriteException e){}}public static void main(String[] args) {writeExcel("c:\\Test测试Excel.xls");System.out.println("OK");ArrayList list = new ArrayList();for (int i = 0; i < 10; i++) {BookVO book = new BookVO();book.setBookName("WebWork in action+"+i);book.setBookAuthor("唐勇+"+i);book.setBookPrice("39元+"+i);book.setBookConcern("飞思科技+"+i);list.add(book);}writeExcelBo("c:\\上市新书.xls",list);System.err.println("Book OK!!!");}}=================摘要=====================java如何操作Excel(数据导入导出)(转)jxl.jar,可以到下载。
java实现导出Excel(跨行跨列)

java实现导出Excel(跨行跨列)在Java中,可以使用Apache POI库来实现导出Excel文件,并且可以实现跨行和跨列的功能。
Apache POI是一个开源的Java库,可以处理Microsoft Office格式的文档,包括Excel。
以下是使用Apache POI库实现导出Excel文件的步骤:1. 首先,需要引入Apache POI依赖。
可以在Maven或Gradle中添加以下依赖项:```xml<!-- Apache POI --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>2. 创建一个Workbook对象,该对象代表一个Excel文件:```javaWorkbook workbook = new XSSFWorkbook(;```3. 创建一个Sheet对象,该对象代表Excel文件中的一个工作表:```javaSheet sheet = workbook.createSheet("Sheet1");```4. 创建行和单元格,根据需要设置跨行和跨列的属性。
可以使用CellRangeAddress类来实现跨行和跨列的功能:```javaRow row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("跨行跨列");//合并单元格,从第1行到第3行,从第1列到第5列CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 2, 0, 4);sheet.addMergedRegion(cellRangeAddress);5. 将数据写入Excel文件中的单元格:```javaRow row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("Hello");```6. 将Workbook对象写入到文件中:```javaFileOutputStream fileOutputStream = new FileOutputStream("output.xlsx");workbook.write(fileOutputStream);fileOutputStream.close(;```完整的示例代码如下所示:```javaimport ermodel.*;import org.apache.poi.ss.util.CellRangeAddress;import ermodel.XSSFWorkbook;import java.io.FileOutputStream;import java.io.IOException;public class ExcelExporterpublic static void main(String[] args) throws IOExceptionWorkbook workbook = new XSSFWorkbook(;Sheet sheet = workbook.createSheet("Sheet1");Row row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("跨行跨列");//合并单元格,从第1行到第3行,从第1列到第5列CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 2, 0, 4);sheet.addMergedRegion(cellRangeAddress);FileOutputStream fileOutputStream = newFileOutputStream("output.xlsx");workbook.write(fileOutputStream);fileOutputStream.close(;System.out.println("Excel文件导出成功!");}```执行该代码后,会在项目的根目录下生成一个名为`output.xlsx`的Excel文件,其中包含一个跨行和跨列的单元格。
JAVA实现Excel导入导出以及excel样式设置

JAVA实现Excel导⼊导出以及excel样式设置JAVA实现Excel导⼊/导出以及excel样式设置图2.1 POI的⽬录结构 POI使⽤初步 POI提供给⽤户使⽤的对象在ermodel包中,主要部分包括Excel对象、样式和格式,还有辅助操作等。
最主要的⼏个对象如表3.1所⽰: 表3.1 POI主要对象POI对象名称对应的Excel对象HSSFWorkbook⼯作簿HSSFSheet⼯作表HSSFRow⾏HSSFCell单元格 下⾯我们来看如下的例⼦,使⽤表3.1中的对象在程序的当前⽬录下创建⼀个Excel⽂件test.xls,在第⼀个单元格中写⼊内容,然后读出第⼀个单元格的内容。
完整的程序如下:import ermodel.HSSFWorkbook;import ermodel.HSSFSheet;import ermodel.HSSFRow;import ermodel.HSSFCell;import java.io.FileOutputStream;import java.io.FileInputStream;public class CreateXL{ public static String xlsFile="test.xls"; //产⽣的Excel⽂件的名称 public static void main(String args[]) { try { HSSFWorkbook workbook = new HSSFWorkbook(); //产⽣⼯作簿对象 HSSFSheet sheet = workbook.createSheet(); //产⽣⼯作表对象 //设置第⼀个⼯作表的名称为firstSheet //为了⼯作表能⽀持中⽂,设置字符编码为UTF_16 workbook.setSheetName(0,"firstSheet",HSSFWorkbook.ENCODING_UTF_16); //产⽣⼀⾏ HSSFRow row = sheet.createRow((short)0); //产⽣第⼀个单元格 HSSFCell cell = row.createCell((short) 0); //设置单元格内容为字符串型 cell.setCellType(HSSFCell.CELL_TYPE_STRING); //为了能在单元格中写⼊中⽂,设置字符编码为UTF_16。
Java导入导出Excel工具类ExcelUtil

Java导⼊导出Excel⼯具类ExcelUtil导出就是将List转化为Excel(listToExcel)导⼊就是将Excel转化为List(excelToList)导⼊导出中会出现各种各样的问题,⽐如:数据源为空、有重复⾏等,我⾃定义了⼀个ExcelException异常类,⽤来处理这些问题。
异常类导出⼯具类:public Map<String,Object> exportMessageExcelFile(String title, String[] headers,List dossierList, OutputStream out, String pattern){boolean flag = true;Map<String,Object> map = new HashMap<String,Object>();StringBuffer messageFile = new StringBuffer();// 声明⼀个⼯作薄HSSFWorkbook workbook = new HSSFWorkbook();// ⽣成⼀个表格HSSFSheet sheet = workbook.createSheet(title);// 设置表格默认列宽度为15个字节sheet.setDefaultColumnWidth((short) 15);// ⽣成⼀个样式HSSFCellStyle style = workbook.createCellStyle();style.setBorderBottom(HSSFCellStyle.BORDER_THIN);style.setBorderLeft(HSSFCellStyle.BORDER_THIN);style.setBorderRight(HSSFCellStyle.BORDER_THIN);style.setBorderTop(HSSFCellStyle.BORDER_THIN);style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//产⽣表格标题⾏HSSFRow row = sheet.createRow(0);for (short i = 0; i < headers.length; i++) {HSSFCell cell = row.createCell(i);cell.setCellStyle(style);HSSFRichTextString text = new HSSFRichTextString(headers[i]);cell.setCellValue(text);}for(int i = 0; i< dossierList.size();i++){Object[] obj = (Object[]) dossierList.get(i);row = sheet.createRow(i+1);for (int j = 0; j < obj.length; j++) {HSSFCell cell = row.createCell(j);cell.setCellStyle(style);if(j==0){cell.setCellValue(i+1);//序号}if(j==1){//Logger.debug("obj[5]"+obj[5]);cell.setCellValue(obj[5]==null?"":obj[5].toString());//办理⼈}if(j==2){//Logger.debug("obj[3]"+obj[3]);cell.setCellValue(obj[3]==null?"":obj[3].toString());//办理时间}if(j==3){// Logger.debug("obj[2]"+obj[2]);cell.setCellValue(obj[2]==null?obj[6]==null?"":obj[6].toString():obj[2].toString());//办理意见if(null!=obj[6]&&!"".equals(obj[6])){messageFile.append(obj[6].toString()+",");}break;}}}map.put("messageFile", messageFile.toString().endsWith(",")?messageFile.toString().substring(0, messageFile.toString().length()-1):messageFile.toString());try {workbook.write(out);} catch (IOException e) {e.printStackTrace();flag = false;}finally {//清理资源try {if(out != null){out.close();}} catch (IOException e) {e.printStackTrace();}}map.put("flag", flag);return map;}测试类:public static void main(String[] args) {ExportExcel<Object> ex = new ExportExcel<Object>();String[] headers = { "学号"};List<Object[]> dataset = new ArrayList<Object[]>();dataset.add(new Object[]{"1"});dataset.add(new Object[]{"2"});dataset.add(new Object[]{"3"});dataset.add(new Object[]{"4"});dataset.add(new Object[]{"5"});try {OutputStream out = new FileOutputStream("C://Users//Lenovo//Desktop/aa.xls");ex.exportMessageExcelFile("测试POI导出EXCEL⽂档", headers, dataset, out, "yyyy-MM-dd"); } catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}。
hutool工具类实现的简易excel文件导出方法

hutool工具类实现的简易excel文件导出方法一、前言Excel文件作为数据存储和交换的重要工具,在各种场景下都有着广泛的应用。
然而,对于一些非专业的开发者来说,手动编写Excel 文件的导出功能可能会显得有些复杂。
为此,我们介绍一种使用hutool工具类实现的简易Excel文件导出方法。
二、hutool工具类介绍hutool是一组Java工具类的集合,提供了大量实用的功能,如文件操作、网络操作、日期时间处理等。
它具有简洁、高效、易用的特点,为开发者提供了很大的便利。
三、Excel文件导出步骤1.导入hutool库首先,需要在项目中导入hutool库,以便使用其中的功能。
可以通过Maven或Gradle等方式将其添加到项目依赖中。
2.创建Excel文件使用hutool提供的ExcelWriter类,可以很方便地创建一个Excel文件。
3.写入数据使用ExcelWriter类的write方法,可以将数据写入到Excel文件中。
支持写入各种类型的数据,如字符串、数字、日期等。
4.保存Excel文件完成数据写入后,需要调用ExcelWriter类的close方法来保存Excel文件。
四、示例代码以下是一个简单的示例代码,演示了如何使用hutool工具类实现Excel文件的导出:```javaimportcn.hutool.core.io.FileUtil;importcn.hutool.core.util.ExcelUtil;importcn.hutool.core.util.StrUtil;importjava.io.File;importjava.util.ArrayList;importjava.util.List;publicclassExcelExporter{publicstaticvoidmain(String[]args){//创建Excel文件StringfileName="example.xlsx";Filefile=FileUtil.getSingleFile(fileName);ExcelWriterwriter=newExcelWriter(file);//写入数据List<String>data1=newArrayList<>();data1.add("姓名");data1.add("年龄");writer.write(StrUtil.repeatCell("数据1",2));//写入标题行writer.write(data1);//写入数据行List<String>data2=newArrayList<>();data2.add("张三");data2.add("25");writer.write(data2);//写入数据行//关闭Excel文件writer.close();}}```五、总结使用hutool工具类实现Excel文件的导出,可以简化开发过程,提高效率。
通过Excel批量导入数据-Java代码

通过Excel批量导⼊数据-Java代码1. 依赖<!-- excel导出 start--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.16</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.16</version></dependency><!-- excel导出 end-->2. 导⼊⼯具类/*** 将 Excel内容转为List** @param file 上传的Excel⽂件* @param name Excel表格中第⼀个sheet的名字* @return对应的map集合**/public static List<Map<String, Object>> excelToList(MultipartFile file, String name) throws Exception {Workbook workbook = WorkbookFactory.create(file.getInputStream());Sheet sheet = workbook.getSheet(name);//⾏数int num = sheet.getLastRowNum();//列数int col = sheet.getRow(0).getLastCellNum();List<Map<String, Object>> list = new ArrayList<>();String[] colName = new String[col];//获取列名Row row = sheet.getRow(0);for (int i = 0; i < col; i++) {String[] s = row.getCell(i).getStringCellValue().split("-");colName[i] = s[0];}//将⼀⾏中每列数据放⼊⼀个map中,然后把map放⼊listfor (int i = 1; i <= num; i++) {Map<String, Object> map = new HashMap<>();Row row1 = sheet.getRow(i);if (row1 != null) {for (int j = 0; j < col; j++) {Cell cell = row1.getCell(j);if (cell != null) {cell.setCellType(Cell.CELL_TYPE_STRING);map.put(colName[j], cell.getStringCellValue());}}}list.add(map);}return list;}3. 导⼊业务代码public void importExcel(MultipartFile file) {try {List<Map<String, Object>> importList = ExcelUtil.excelToList(file, "Sheet1");List<User> list = getUserList(importList);int flag = 0;List<User> userList = new ArrayList<>(16);for (User u : list) {userList.add(h);flag++;if (0 == flag % 500 || flag == list.size()) {UserDao.addBatchUser(userList);userList.clear();("执⾏前 {} 条成功", flag);}}} catch (Exception e) {("导⼊Excel失败");e.printStackTrace();}}private List<User> getUserList(List<Map<String, Object>> importList) {List<User> list = new ArrayList<>(16);importList.forEach(e -> {User user = new User();if (Objects.nonNull(e.get("姓名"))) {user.setUsername(e.get("姓名").toString());}if (Objects.nonNull(e.get("年龄"))) {user.setAge(e.get("年龄").toString());}if (Objects.nonNull(e.get("⼿机号"))) {user.setPhone(e.get("⼿机号").toString());}list.add(user);});return list;}========================================================================================== 1. 导出Excel⼯具类/*** 导出 excel** @param response 响应下载* @param name ⽂件名字* @param list 导出的数据list* @return**/public static void exportToExcel(HttpServletResponse response, String name, List<LinkedHashMap<String, Object>> list) {try {//⽂件名称String fileName = name + ".xls";HSSFWorkbook hssfWorkbook = new HSSFWorkbook();HSSFSheet hssfSheet = hssfWorkbook.createSheet(name);int rowNum = 0;//新建⾏HSSFRow hssfRow = hssfSheet.createRow(rowNum++);//列int j = 0;if (list.size() > 0) {for (String i : list.get(0).keySet()) {//新建第⼀⾏hssfRow.createCell(j++).setCellValue(i);}//将数据放⼊表中for (int i = 0; i < list.size(); i++) {//新建⼀⾏HSSFRow row = hssfSheet.createRow(rowNum++);Map map = list.get(i);System.out.println(map);j = 0;for (Object obj : map.values()) {if (obj != null) {row.createCell(j++).setCellValue(obj.toString());} else {row.createCell(j++);}}}}// 告诉浏览器⽤什么软件可以打开此⽂件response.setHeader("content-Type", "application/vnd.ms-excel");// 下载⽂件的默认名称response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "utf-8"));hssfWorkbook.write(response.getOutputStream());} catch (Exception e) {e.printStackTrace();}}2. 导出业务代码public void exportExcel(HttpServletResponse response, String name) {List<LinkedHashMap<String, Object>> list = new ArrayList<>(16);UserDto userDto = new UserDto(18);//设置导出哪些数据List<User> userList = userDao.selectByCon(userDto);userList.forEach(e->{ LinkedHashMap<String, Object> map = new LinkedHashMap<>(16);map.put("姓名",e.getUsername());map.put("年龄",e.getAge());map.put("⼿机号",e.getPhone());list.add(map);});ExcelUtil.exportToExcel(response,name,list);}3. 可以在浏览器访问接⼝,直接下载,也可以调⽤postman->send and download请求下载。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java数据导入Excelpackage com.bossy.base;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import jxl.Workbook;import jxl.format.UnderlineStyle;import bel;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;import jxl.write.biff.RowsExceededException;import ermodel.HSSFCell;import ermodel.HSSFCellStyle; import ermodel.HSSFRow; import ermodel.HSSFSheet; import ermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem;public class ExcelOpt {/*** 生成一个Excel文件jxl* @param fileName 要生成的Excel文件名* @jxl.jar 版本:2.6*/public static void writeExcel(String fileName){WritableWorkbook wwb = null;try {//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象wwb = Workbook.createWorkbook(new File(fileName));} catch (IOException e) {e.printStackTrace();}if(wwb!=null){//创建一个可写入的工作表//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置WritableSheet ws = wwb.createSheet("工作表名称", 0);//下面开始添加单元格for(int i=0;i<10;i++){for(int j=0;j<5;j++){//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");try {//将生成的单元格添加到工作表中ws.addCell(labelC);} catch (RowsExceededException e) {e.printStackTrace();} catch (WriteException e) {e.printStackTrace();}}}try {//从内存中写入文件中wwb.write();//关闭资源,释放内存wwb.close();} catch (IOException e) {e.printStackTrace();} catch (WriteException e) {e.printStackTrace();}}}/*** 生成一个Excel文件POI* @param inputFile 输入模板文件路径* @param outputFile 输入文件存放于服务器路径* @param dataList 待导出数据* @throws Exception* @roseuid:*/public static void exportExcelFile(String inputFile,String outputFile,List dataList) throws Exception{ //用模板文件构造poiPOIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(inputFile));//创建模板工作表HSSFWorkbook templatewb = new HSSFWorkbook(fs);//直接取模板第一个sheet对象HSSFSheet templateSheet = templatewb.getSheetAt(1);//得到模板的第一个sheet的第一行对象为了得到模板样式HSSFRow templateRow = templateSheet.getRow(0);//HSSFSheet timplateSheet = templatewb.getSheetAt(1);//取得Excel文件的总列数int columns = templateSheet.getRow((short) 0).getPhysicalNumberOfCells();// Debug.println("columns is : " + columns); //=========================//创建样式数组HSSFCellStyle styleArray[] = new HSSFCellStyle[columns];//一次性创建所有列的样式放在数组里for (int s = 0; s < columns; s++) {//得到数组实例styleArray[s] = templatewb.createCellStyle();}//循环对每一个单元格进行赋值//定位行for (int rowId = 1; rowId < dataList.size(); rowId++) {//依次取第rowId行数据每一个数据是valueListList valueList = (List) dataList.get(rowId - 1);//定位列for (int columnId = 0; columnId < columns; columnId++) {//依次取出对应与colunmId列的值//每一个单元格的值String dataValue = (String) valueList.get(columnId);//取出colunmId列的的style//模板每一列的样式HSSFCellStyle style = styleArray[columnId];//取模板第colunmId列的单元格对象//模板单元格对象HSSFCell templateCell = templateRow.getCell((short) columnId); //创建一个新的rowId行行对象//新建的行对象HSSFRow hssfRow = templateSheet.createRow(rowId);//创建新的rowId行columnId列单元格对象//新建的单元格对象HSSFCell cell = hssfRow.createCell((short) columnId);//如果对应的模板单元格样式为非锁定if (templateCell.getCellStyle().getLocked() == false) {//设置此列style为非锁定style.setLocked(false);//设置到新的单元格上cell.setCellStyle(style);}//否则样式为锁定else {//设置此列style为锁定style.setLocked(true);//设置到新单元格上cell.setCellStyle(style);}//设置编码cell.setEncoding(HSSFCell.ENCODING_UTF_16);//Debug.println("dataValue : " + dataValue);//设置值统一为Stringcell.setCellValue(dataValue);}}//设置输入流FileOutputStream fOut = new FileOutputStream(outputFile); //将模板的内容写到输出文件上templatewb.write(fOut);fOut.flush();//操作结束,关闭文件fOut.close();}/*** 导出数据为XLS格式* @param fos 生成Excel文件Path* @param bo 要导入的数据*/public static void writeExcelBo(String fos, java.util.List ve){jxl.write.WritableWorkbook wwb;try{wwb= Workbook.createWorkbook(new File(fos));jxl.write.WritableSheet ws= wwb.createSheet("上市新书", 10);ws.addCell(new bel(0, 1, "书名"));ws.addCell(new bel(1, 1, "作者"));ws.addCell(new bel(2, 1, "定价"));ws.addCell(new bel(3, 1, "出版社"));int bookSize=ve.size();BookVO book = new BookVO();for (int i= 0; i < bookSize; i++){book= (BookVO)ve.get(i);ws.addCell(new bel(0, i + 2, "" + book.getBookName()));ws.addCell(new bel(1, i + 2, book.getBookAuthor()));ws.addCell(new bel(2, i + 2, "" + book.getBookPrice()));ws.addCell(new bel(3, i + 2, book.getBookConcern()));}// jxl.write.WritableFont wfc=//new jxl.write.WritableFont(WritableFont.ARIAL,255,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK); //jxl.write.WritableCellFormat wcfFC= new jxl.write.WritableCellFormat(wfc);ws.addCell(new bel(0, 0, "2007年07月即将上市新书!"));wwb.write();// 关闭Excel工作薄对象wwb.close();} catch (IOException e){} catch (RowsExceededException e){} catch (WriteException e){}}public static void main(String[] args) {writeExcel("c:\\Test测试Excel.xls");System.out.println("OK");ArrayList list = new ArrayList();for (int i = 0; i < 10; i++) {BookVO book = new BookVO();book.setBookName("WebWork in action+"+i);book.setBookAuthor("唐勇+"+i);book.setBookPrice("39元+"+i);book.setBookConcern("飞思科技+"+i);list.add(book);}writeExcelBo("c:\\上市新书.xls",list);System.err.println("Book OK!!!");}}java如何操作Excel(数据导入导出)(转)jxl.jar,可以到/project/showfiles.php?group_id=79926下载。