1.HSSFWorkbook(xls)
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 org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; /*讀取xls文件*/ public static List<PageData> readExcelByFileForXls(File file, int startrow, int startcol, int sheetnum) { List<PageData> varList = new ArrayList<PageData>(); try { //File target = new File(filepath, filename); //File target = new File(file); FileInputStream fi = new FileInputStream(file); HSSFWorkbook wb = new HSSFWorkbook(fi);//xslx HSSFSheet sheet= wb.getSheetAt(sheetnum); //sheet 從0開始 int rowNum = sheet.getLastRowNum() + 1; //取得最后一行的行號 for (int i = startrow; i < rowNum; i++) { //行循環開始 PageData varpd = new PageData(); HSSFRow row = sheet.getRow(i); //行 int cellNum = row.getLastCellNum(); //每行的最后一個單元格位置 for (int j = startcol; j < cellNum; j++) { //列循環開始 HSSFCell cell = row.getCell(Short.parseShort(j + "")); String cellValue = null; if (null != cell) { switch (cell.getCellType()) { // 判斷excel單元格內容的格式,並對其進行轉換,以便插入數據庫 case 0: cellValue = String.valueOf((int) cell.getNumericCellValue()); break; case 1: cellValue = cell.getStringCellValue(); break; case 2: cellValue = cell.getNumericCellValue() + ""; // cellValue = String.valueOf(cell.getDateCellValue()); break; case 3: cellValue = ""; break; case 4: cellValue = String.valueOf(cell.getBooleanCellValue()); break; case 5: cellValue = String.valueOf(cell.getErrorCellValue()); break; } } else { cellValue = ""; } varpd.put("var"+j, cellValue); } varList.add(varpd); } } catch (Exception e) { System.out.println(e); } return varList; }
2.XSSFWorkbook(xlsx)
/*讀取xlsx文件*/ public static List<PageData> readExcelByFileForXlsx(File file, int startrow, int startcol, int sheetnum) { List<PageData> varList = new ArrayList<PageData>(); try { //File target = new File(filepath, filename); //File target = new File(file); FileInputStream fi = new FileInputStream(file); XSSFWorkbook wb = new XSSFWorkbook(fi);//xslx XSSFSheet sheet= wb.getSheetAt(sheetnum); //sheet 從0開始 int rowNum = sheet.getLastRowNum() + 1; //取得最后一行的行號 for (int i = startrow; i < rowNum; i++) { //行循環開始 PageData varpd = new PageData(); XSSFRow row = sheet.getRow(i); //行 int cellNum = row.getLastCellNum(); //每行的最后一個單元格位置 for (int j = startcol; j < cellNum; j++) { //列循環開始 XSSFCell cell = row.getCell(Short.parseShort(j + "")); String cellValue = null; if (null != cell) { switch (cell.getCellType()) { // 判斷excel單元格內容的格式,並對其進行轉換,以便插入數據庫 case 0: cellValue = String.valueOf((int) cell.getNumericCellValue()); break; case 1: cellValue = cell.getStringCellValue(); break; case 2: cellValue = cell.getNumericCellValue() + ""; // cellValue = String.valueOf(cell.getDateCellValue()); break; case 3: cellValue = ""; break; case 4: cellValue = String.valueOf(cell.getBooleanCellValue()); break; case 5: cellValue = String.valueOf(cell.getErrorCellValue()); break; } } else { cellValue = ""; } varpd.put("var"+j, cellValue); } varList.add(varpd); } } catch (Exception e) { System.out.println(e); } return varList; }
poi導出excel最常用的是第一種方式HSSFWorkbook,不過這種方式數據量大的話會產生內存溢出問題,SXSSFWorkbook是一種大數據量導出格式,csv是另一種excel導出的一種輕快的實現。 先介紹一下這三種格式的特點 1 HSSFWorkbook excel文件底層是txt實現,我們經常見到的excel都是這種實現的。 2 SXSSFWorkbook excel文件底層是xml實現,同樣的數據量,大約是第一種的1/6-1/4之間 3 csv 這個比較新潮,數據量應該更小,可以百度。 一 HSSFWorkbook 實現 Map<String, Object> dataMap = service.AssignMiddleExcel(page); ObjectExcelView erv = new ObjectExcelView("逾期客戶表"); //執行excel操作 mv = new ModelAndView(erv,dataMap); dataMap 是個map ,包含兩個鍵值對 一個是標題列 Map<String,Object> dataMap = new HashMap<String,Object>(); List<String> titles = new ArrayList<String>(); titles.add("借款人姓名"); //1 titles.add("身份證號"); //2 titles.add("借款人手機號"); dataMap.put("titles", titles); 這是標題列 vpd是個map vpd.put("var1", userList.get(i).getString("realName")); //1 vpd.put("var2", userList.get(i).getString("contIdCard")); //2 vpd.put("var3", userList.get(i).getString("telephone")); //3 List<PageData> varList = new ArrayList<PageData>(); PageData就是個HashMap varList.add(vpd); dataMap.put("varList", varList); 這就是dataMap的由來 public class ObjectExcelView extends AbstractExcelView{ private String fileName; public ObjectExcelView(){ } public ObjectExcelView(String fileName){ this.fileName = fileName; } @Override protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws Exception { // TODO Auto-generated method stub //String fileName = "逾期客戶表-待催收"; HSSFSheet sheet; HSSFCell cell; response.setContentType("application/x-download");//下面三行是關鍵代碼,處理亂碼問題 response.setCharacterEncoding("utf-8"); response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("gbk"), "iso8859-1")+".xls"); sheet = workbook.createSheet("sheet1"); List<String> titles = (List<String>) model.get("titles"); int len = titles.size(); HSSFCellStyle headerStyle = workbook.createCellStyle(); //標題樣式 headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); headerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); HSSFFont headerFont = workbook.createFont(); //標題字體 headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); headerFont.setFontHeightInPoints((short)11); headerStyle.setFont(headerFont); short width = 20,height=25*20; sheet.setDefaultColumnWidth(width); for(int i=0; i<len; i++){ //設置標題 String title = titles.get(i); cell = getCell(sheet, 0, i); cell.setCellStyle(headerStyle); setText(cell,title); } sheet.getRow(0).setHeight(height); HSSFCellStyle contentStyle = workbook.createCellStyle(); //內容樣式 contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); List<PageData> varList = (List<PageData>) model.get("varList"); int varCount = varList.size(); for(int i=0; i<varCount; i++){ PageData vpd = varList.get(i); for(int j=0;j<len;j++){ String varstr = vpd.getString("var"+(j+1)) != null ? vpd.getString("var"+(j+1)) : ""; cell = getCell(sheet, i+1, j); cell.setCellStyle(contentStyle); setText(cell,varstr); } } } } 二 SXSSFWorkbook @RequestMapping("/excel111") public Object exportExcel(Page page,HttpServletRequest request,HttpServletResponse response){ PageData pd = new PageData(); pd = this.getPageData(); try{ //檢索條件=========== PageData pageData = service.setPdWithTrim(this.getPageData()); page.setPd(pageData); //檢索條件=========== Map<String, Object> dataMap = service.AssignMiddleExcel(page); OutputStream outputStream = response.getOutputStream(); String sheetName = "逾期客戶表"; List<String> list = (List<String>)dataMap.get("titles"); String[] headers = new String[list.size()]; for(int i = 0;i<list.size();i++){ headers[i]=list.get(i); } List<Object[]> dataList = new ArrayList<>(); List<PageData> varList = new ArrayList<PageData>(); varList = (List<PageData>)dataMap.get("varList"); varList.forEach(e ->{ List<Object> ObjectList = new ArrayList<>(); for(int i=0;i<headers.length;i++){ ObjectList.add(e.get("var"+(i+1))==null?null:e.getString("var"+(i+1))); } /* for (Object v : e.values()) { ObjectList.add(v); }*/ Object[] objarr = new Object[ObjectList.size()]; for(int i = 0;i<ObjectList.size();i++){ objarr[i] = ObjectList.get(i); } dataList.add(objarr); }); ExportUtil exportUtil = new ExportUtil(sheetName,headers,dataList); //SXSSFWorkbook 大批量數據導出 SXSSFWorkbook workBook = exportUtil.export(); // 如果文件名有中文,必須URL編碼 String fileName1 = URLEncoder.encode(sheetName, "UTF-8"); // response.reset(); // response.setContentType("application/force-download"); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-Disposition", "attachment; filename=" + fileName1+".xls"); workBook.write(outputStream); workBook.close(); outputStream.flush(); outputStream.close(); //ObjectExcelView erv = new ObjectExcelView("逾期客戶表"); //執行excel操作 //mv = new ModelAndView(erv,dataMap); } catch(Exception e){ logger.error(e.toString(), e); } return new Object(); } package com.fh.controller.assign_out; import java.util.ArrayList; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.streaming.SXSSFCell; import org.apache.poi.xssf.streaming.SXSSFRow; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFFont; import org.springframework.util.StringUtils; /** * Created by dell、 on 2017/10/12. */ public class ExportUtil { private SXSSFWorkbook wb = null;//大數據導出格式 private Sheet sheet = null; private String sheetName; private String[] headers;//表頭字段 private List<Object[]> dataList = new ArrayList<Object[]>();//表內容數據 //構造 public ExportUtil(SXSSFWorkbook wb, Sheet sheet) { this.wb = wb; this.sheet = sheet; } //構造 public ExportUtil(String sheetName, String[] headers, List<Object[]> dataList) { this.dataList = dataList; this.headers = headers; this.sheetName = sheetName; } //不知道做什么 public void setRegionStyle(CellRangeAddress region, XSSFCellStyle cs) { int toprowNum = region.getFirstRow(); for (int i = toprowNum; i <= region.getLastRow(); i++) { SXSSFRow row = (SXSSFRow) sheet.getRow(i); for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) { SXSSFCell cell = (SXSSFCell) row.getCell(j); cell.setCellStyle(cs); } } } // 設置表頭的單元格樣式 public CellStyle getHeadStyle() { // 創建單元格樣式 CellStyle cellStyle = wb.createCellStyle(); // 設置單元格的背景顏色為淡藍色 cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index); // 設置填充字體的樣式 cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); // 設置單元格居中對齊 cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 設置單元格垂直居中對齊 cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); // 創建單元格內容顯示不下時自動換行 cellStyle.setWrapText(false); // 設置單元格字體樣式 XSSFFont font = (XSSFFont) wb.createFont(); // font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 這是字體加粗 font.setFontName("宋體");// 設置字體的樣式 font.setFontHeight(14);// 設置字體的大小 cellStyle.setFont(font);// 將字體填充到表格中去 // 設置單元格邊框為細線條(上下左右) cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN); return cellStyle; } // 設置表體的單元格樣式 public CellStyle getBodyStyle() { // 創建單元格樣式 CellStyle cellStyle = wb.createCellStyle(); // 設置單元格居中對齊 cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 設置單元格居中對齊 cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); // 創建單元格內容不顯示自動換行 cellStyle.setWrapText(false); // 設置單元格字體樣式 XSSFFont font = (XSSFFont) wb.createFont(); font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 這是字體加粗 font.setFontName("宋體");// 設置字體 font.setFontHeight(12);// 設置字體的大小 cellStyle.setFont(font);// 將字體添加到表格中去 // 設置單元格邊框為細線條 cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN); return cellStyle; } //似乎沒用到 public Cell setHeadStyle(String[] titles) { Cell cell = null; CellStyle headStyle = getHeadStyle(); Row headRow = sheet.createRow(0); // 構建表頭 for (int i = 0; i < titles.length; i++) { cell = headRow.createCell(i); cell.setCellStyle(headStyle); cell.setCellValue(titles[i]); } return cell; } /* * 導出數據 */ public SXSSFWorkbook export() throws Exception { // String nsheetName = new String(sheetName.getBytes("UTF-8")); /* * response.setCharacterEncoding("utf-8"); * response.setContentType("application/x-msdownload"); * response.setHeader("Content-disposition", "attachment; filename=" + * sheetName + ".xlsx");// 組裝附件名稱和格式 */ Integer rowaccess = 1000;// 內存中緩存記錄行數,以免內存溢出 SXSSFWorkbook workbook = new SXSSFWorkbook(rowaccess); try { Sheet sheet = workbook.createSheet(sheetName); // 產生表格標題行 Row titleRow = sheet.createRow(0); Cell cellTiltle = titleRow.createCell(0); CellStyle columnTopStyle = this.getColumnTopStyle(workbook);// 獲取列頭樣式對象 sheet.setDefaultColumnWidth(100); sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (headers.length - 1))); cellTiltle.setCellStyle(columnTopStyle); cellTiltle.setCellValue(sheetName); Cell cell = null; CellStyle headStyle = this.getHeadStyle(workbook); // 定義所需列數 int columnNum = headers.length; Row headRow = sheet.createRow(2); // 在索引2的位置創建行(最頂端的行開始的第二行) //表頭 for (int n = 0; n < columnNum; n++) { Cell cellRowName = headRow.createCell(n); // 創建列頭對應個數的單元格 cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING); // 設置列頭單元格的數據類型 HSSFRichTextString text = new HSSFRichTextString(headers[n]); cellRowName.setCellValue(headers[n]); // 設置列頭單元格的值 cellRowName.setCellStyle(headStyle); // 設置列頭單元格樣式 sheet.setColumnWidth(n,256*20); } CellStyle bodyStyle = this.getBodyStyle(workbook); // 表體數據 for (int i = 0; i < dataList.size(); i++) { Object[] obj = dataList.get(i); Row row = sheet.createRow(i + 3);// 創建所需的行數 for (int j = 0; j < obj.length; j++) { cell = row.createCell(j); String str = String.valueOf(StringUtils.isEmpty(obj[j]) ? "" : obj[j]); cell.setCellValue(str); // 單元格的值 cell.setCellStyle(bodyStyle); // 單元格的樣式 } } } catch (Exception e) { e.printStackTrace(); } return workbook; } // 設置表頭的單元格樣式 public CellStyle getHeadStyle(SXSSFWorkbook workbook) { // 創建單元格樣式 CellStyle cellStyle = workbook.createCellStyle(); // 設置單元格的背景顏色為淡藍色 cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index); // 設置填充字體的樣式 cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); // 設置單元格居中對齊 cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 設置單元格垂直居中對齊 cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); // cellStyle.setShrinkToFit(true); // 創建單元格內容顯示不下時自動換行 //cellStyle.setWrapText(true); // 設置單元格字體樣式 XSSFFont font = (XSSFFont) workbook.createFont(); // font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 這是字體加粗 font.setFontName("宋體");// 設置字體的樣式 font.setFontHeight(12);// 設置字體的大小 cellStyle.setFont(font);// 將字體填充到表格中去 // 設置單元格邊框為細線條(上下左右) cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN); return cellStyle; } // 設置表體的單元格樣式 public CellStyle getBodyStyle(SXSSFWorkbook workbook) { // 創建單元格樣式 CellStyle cellStyle = workbook.createCellStyle(); // 設置單元格居中對齊 cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 設置單元格居中對齊 cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); // 創建單元格內容不顯示自動換行 //cellStyle.setWrapText(true); // 設置單元格字體樣式 XSSFFont font = (XSSFFont) workbook.createFont(); // font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);// 這是字體加粗 font.setFontName("宋體");// 設置字體 font.setFontHeight(10);// 設置字體的大小 cellStyle.setFont(font);// 將字體添加到表格中去 // 設置單元格邊框為細線條 cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN); return cellStyle; } public Cell setHeadStyle(String[] titles, SXSSFWorkbook workbook) { Cell cell = null; CellStyle headStyle = getHeadStyle(workbook); Row headRow = sheet.createRow(0); // 構建表頭 for (int i = 0; i < titles.length; i++) { cell = headRow.createCell(i); cell.setCellStyle(headStyle); cell.setCellValue(titles[i]); } return cell; } /* * 列頭單元格樣式 */ public CellStyle getColumnTopStyle(SXSSFWorkbook workbook) { // 設置字體 Font font = workbook.createFont(); // 設置字體大小 font.setFontHeightInPoints((short) 18); // 字體加粗 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 設置字體名字 font.setFontName("Courier New"); // 設置樣式; CellStyle style = workbook.createCellStyle(); // 設置底邊框; style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 設置底邊框顏色; style.setBottomBorderColor(HSSFColor.BLACK.index); // 設置左邊框; style.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 設置左邊框顏色; style.setLeftBorderColor(HSSFColor.BLACK.index); // 設置右邊框; style.setBorderRight(HSSFCellStyle.BORDER_THIN); // 設置右邊框顏色; style.setRightBorderColor(HSSFColor.BLACK.index); // 設置頂邊框; style.setBorderTop(HSSFCellStyle.BORDER_THIN); // 設置頂邊框顏色; style.setTopBorderColor(HSSFColor.BLACK.index); // 在樣式用應用設置的字體; style.setFont(font); // 設置自動換行; style.setWrapText(false); // 設置水平對齊的樣式為居中對齊; style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 設置垂直對齊的樣式為居中對齊; style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); return style; } } 三 csv /* * 導出委外催收中EXCEL 大數據量csv導出 * @return */ @RequestMapping("/excel") public Object exportExcel111(Page page, HttpServletResponse response ) { PageData pd = new PageData(); pd = this.getPageData(); try { //檢索條件=========== PageData pageData = service.setPdWithTrim(this.getPageData()); page.setPd(pageData); //檢索條件=========== Map<String, Object> dataMap = service.AssignMiddleExcel(page); String sheetName = "逾期客戶表"; List<Object> headlist = (List<Object>)dataMap.get("titles"); List<List<Object>> dataList = new ArrayList<>(); List<PageData> varList = new ArrayList<PageData>(); varList = (List<PageData>)dataMap.get("varList"); varList.forEach(e ->{ List<Object> ObjectList = new ArrayList<>(); for(int i=0;i<headlist.size();i++){ ObjectList.add(e.get("var"+(i+1))==null?null:e.getString("var"+(i+1))); } dataList.add(ObjectList); }); File csvFile =CSVUtils.createCSVFile(headlist,dataList,sheetName); BufferedInputStream bis = null; BufferedOutputStream bos = null; response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(csvFile.getName(), "UTF-8")); response.setHeader("Content-Length", String.valueOf(csvFile.length())); bis = new BufferedInputStream(new FileInputStream(csvFile)); bos = new BufferedOutputStream(response.getOutputStream()); byte[] buff = new byte[2048]; while (true) { int bytesRead; if (-1 == (bytesRead = bis.read(buff, 0, buff.length))) break; bos.write(buff, 0, bytesRead); } bis.close(); bos.close(); csvFile.delete(); }catch (Exception e){ e.printStackTrace(); } return new Object(); } package com.fh.controller.assign_out; import javax.servlet.http.HttpServletRequest; import java.io.*; import java.util.*; /** * Created by dell、 on 2017/10/12. */ public class CSVUtils { /** * CSV文件生成方法 * @param head * @param dataList * @param filename * @return */ public static File createCSVFile(List<Object> head, List<List<Object>> dataList, String filename) { File csvFile = null; BufferedWriter csvWtriter = null; try { csvFile = new File( "temp123/"+ File.separator + filename + ".csv"); File parent = csvFile.getParentFile(); if (parent != null && !parent.exists()) { parent.mkdirs(); } csvFile.createNewFile(); // GB2312使正確讀取分隔符"," csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream( csvFile), "GB2312"), 1024); // 寫入文件頭部 writeRow(head, csvWtriter); // 寫入文件內容 for (List<Object> row : dataList) { writeRow(row, csvWtriter); } csvWtriter.flush(); } catch (Exception e) { e.printStackTrace(); } finally { try { csvWtriter.close(); } catch (IOException e) { e.printStackTrace(); } } return csvFile; } /** * 寫一行數據方法 * @param row * @param csvWriter * @throws IOException */ private static void writeRow(List<Object> row, BufferedWriter csvWriter) throws IOException { // 寫入文件頭部 for (Object data : row) { StringBuffer sb = new StringBuffer(); String rowStr = sb.append("\"").append(data).append("\",").toString(); csvWriter.write(rowStr); } csvWriter.newLine(); } public static File createCSVFile(HttpServletRequest request){ List< Map<String,Object>> list = new ArrayList<>(); for(int i =0;i<10;i++){ Map<String,Object> mao = new HashMap<>(); mao.put("cutomerName","zhangsan"+i); mao.put("cutomerNam1","zhangsan"+i); mao.put("cutomerNam2","zhangsan"+i); mao.put("cutomerNam3","zhangsan"+i); mao.put("cutomerNam4","zhangsan"+i); mao.put("cutomerNam5","zhangsan"+i); mao.put("cutomerNam6","zhangsan"+i); mao.put("cutomerNam7","zhangsan"+i); mao.put("cutomerNam8","zhangsan"+i); mao.put("cutomerNam9", "2017-10-17 22:33:33 12.00"); mao.put("cutomerNam10",555555556); /* mao.put("cutomerNam11","zhangsan"+i); mao.put("cutomerNam12","zhangsan"+i); mao.put("cutomerNam13","zhangsan"+i); mao.put("cutomerNam14","zhangsan"+i); mao.put("cutomerNam15","zhangsan"+i); mao.put("cutomerNam16","zhangsan"+i); mao.put("cutomerNam17","zhangsan"+i); mao.put("cutomerNam18","zhangsan"+i); mao.put("cutomerNam19","zhangsan"+i); mao.put("cutomerNam20","zhangsan"+i); mao.put("cutomerNam21","zhangsan"+i); mao.put("cutomerNam22","zhangsan"+i); mao.put("cutomerNam23","zhangsan"+i); mao.put("cutomerNam24","zhangsan"+i); mao.put("cutomerNam25","zhangsan"+i); mao.put("cutomerNam26","zhangsan"+i); mao.put("cutomerNam27","zhangsan"+i); mao.put("cutomerNam28","zhangsan"+i); mao.put("cutomerNam29","zhangsan"+i); mao.put("cutomerNam30","zhangsan"+i); mao.put("cutomerNam31","zhangsan"+i); mao.put("cutomerNam32","zhangsan"+i); mao.put("cutomerNam33","zhangsan"+i); mao.put("cutomerNam34","zhangsan"+i); mao.put("cutomerNam35","zhangsan"+i); mao.put("cutomerNam36","zhangsan"+i); mao.put("cutomerNam37","zhangsan"+i); mao.put("cutomerNam38","zhangsan"+i); mao.put("cutomerNam39","zhangsan"+i); mao.put("cutomerNam40","zhangsan"+i); mao.put("cutomerNam41","zhangsan"+i); mao.put("cutomerNam42","zhangsan"+i); mao.put("cutomerNam43","zhangsan"+i); mao.put("cutomerNam44","zhangsan"+i); mao.put("cutomerNam45","zhangsan"+i);*/ list.add(mao); } // 設置表格頭 Object[] head = {"客戶姓名", "證件類型", "證件號碼", "銀行賬號", "理財賬號", "客戶類型", "風險等級", "歸屬狀況", "歸屬機構", "客戶經理", "營銷比例(%)" }; List<Object> headList = Arrays.asList(head); // 設置數據 List<List<Object>> dataList = new ArrayList<List<Object>>(); List<Object> rowList = null; for (int i = 0; i < list.size(); i++) { rowList = new ArrayList<Object>(); Map<String,Object> maovo = list.get(i); rowList.add(maovo.get("cutomerName")); rowList.add(maovo.get("cutomerNam1")); rowList.add(maovo.get("cutomerNam2")); rowList.add(maovo.get("cutomerNam3")); rowList.add(maovo.get("cutomerNam4")); rowList.add(maovo.get("cutomerNam5")); rowList.add(maovo.get("cutomerNam6")); rowList.add(maovo.get("cutomerNam7")); rowList.add(maovo.get("cutomerNam8")); rowList.add(maovo.get("cutomerNam9")); rowList.add(maovo.get("cutomerNam10")); dataList.add(rowList); } // 導出文件路徑 // String downloadFilePath = request.getContextPath(); // 導出文件名稱 String fileName = "客戶列表_"; // 導出CSV文件 File csvFile = CSVUtils.createCSVFile(headList, dataList, fileName); return csvFile; } }