精华内容
下载资源
问答
  • 直接可以用的项目。数据量大,导出多个excel然后压缩成zip文件。。。
  • excel多文件压缩导出问题 目前只导出了一 但打开压缩包是这些东西 这是什么原因 ``` public void exportTransactionExcel(HttpServletResponse res,Long id)throws Exception{ OutputStream out = res....
  • POI导出多个Excel文件,生成压缩文件

    千次阅读 2018-01-15 10:51:38
    当需要导出的sheet数超过255个时,比较好的办法是将多个Excel文件压缩成.zip文件导出 步骤:1 将需要导出的表封装到listBean中   2 将list中表每隔255个sheet导出到一个Excel文件   3 将Excel文件生成压缩...

    众所周知,每个Excel文件最多可以存储255个sheet。当需要导出的sheet数超过255个时,比较好的办法是将多个Excel文件压缩成.zip文件再导出

    步骤:1 将需要导出的表封装到listBean中 

              2 将list中表每隔255个sheet导出到一个Excel文件  

              3 将Excel文件生成压缩文件导出

    package com.mobile.main;
    
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.List;
    
    import javax.ws.rs.Consumes;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    import javax.ws.rs.QueryParam;
    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.core.Response;
    import javax.ws.rs.core.Response.ResponseBuilder;
    
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    public class ExportTable {
    
    	public String exportTable() {
    		//得到所有需要导出的表信息,一个表放在一个sheet中
    		List<ExportTableBean> exportTableBean = getTableBeanService.getAllTable();
    		//导出文件路径(这里也可以写成固定路径"D:/tmp")
    		String filePath = System.getProperty("catalina.base") + File.separator + "tmp";
    		//创建此路径
    		makeDirs(filePath);
    		//得到此路径下文件
    		File fileDir = new File(filePath);
    		File[] fileDirs = fileDir.listFiles();
    		//删除此目录下文件
    		for (int i = 0; i < fileDirs.length; i++) {
    			File tmp = fileDirs[i];
    			tmp.delete();
    		}
    		//导出Excel文件路径
    		String fullFilePath = "";
    		//导出压缩文件路径
    		String zipFilePath = "";
    		//保存文件名
    		String fileName = "";
    		FileOutputStream os = null;
    		//每个Excel文件中第一个sheet中的表对应list中的开始下标
    		int index = 0;
    		//Excel的个数-1,用来计算list开始下标
    		int count = 0;
    		try {
    			//如果表个数不超过254个,则导出Excel文件,否则导出压缩文件
    			if(null != exportTableBean && exportTableBean.size() > SheetNumber){
    				//计算需要导出的表个数,即sheet个数
    				int size = exportTableBean.size();
    				//用于存放生成的excel文件名称  
    				List<String> fileNames = new ArrayList<String>();
    				//导出压缩文件的全路径
    				zipFilePath = filePath + File.separator + "cwm_" + System.currentTimeMillis() + ".zip";
    				File zip = new File(zipFilePath);
    				while (size - SheetNumber > 0 || size > 0) {
    					fileName = "cwm_" + System.currentTimeMillis() + ".xlsx";
    					//导出excel的全路径
    					fullFilePath = filePath + File.separator + fileName;
    					fileNames.add(fullFilePath);
    					os = new FileOutputStream(fullFilePath);
    					index = count * SheetNumber;
    					//list中表依次导入excel文件
    					XSSFWorkbook wb = createColumnXSSF(exportTableBean,index);
    					// 写文件
    					wb.write(os);
    					count++;
    					size -= SheetNumber;
    				}
    				//将excel文件生成压缩文件
    				File srcfile[] = new File[fileNames.size()];  
    		        for (int j = 0, n1 = fileNames.size(); j < n1; j++) {  
    		            srcfile[j] = new File(fileNames.get(j));  
    		        }  
    		        ZipFiles(srcfile, zip);  
    			}else{
    				fileName = "cwm_" + System.currentTimeMillis() + ".xlsx";
    				zipFilePath = filePath + File.separator + fileName;
    				os = new FileOutputStream(zipFilePath);
    				//list中表依次导入excel文件
    				XSSFWorkbook wb = createColumnXSSF(exportTableBean,0);
    				// 写文件
    				wb.write(os);
    			}
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}finally{
    			// 关闭输出流
    			if(null != os){
    				try {
    					os.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    		}
    		return zipFilePath;
    	}
    	
    	
    	 //压缩文件  
        public void ZipFiles(File[] srcfile, File zipfile) {  
            byte[] buf = new byte[1024];  
            try {  
                ZipOutputStream out = new ZipOutputStream(new FileOutputStream(  
                        zipfile));  
                for (int i = 0; i < srcfile.length; i++) {  
                    FileInputStream in = new FileInputStream(srcfile[i]);  
                    out.putNextEntry(new ZipEntry(srcfile[i].getName()));  
                    int len;  
                    while ((len = in.read(buf)) > 0) {  
                        out.write(buf, 0, len);  
                    }  
                    out.closeEntry();  
                    in.close();  
                }  
                out.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        } 
        
            /**
    	 * 创建目标路径中文件夹
    	 * @param folderName
    	 * @return
    	 */
    	public static boolean makeDirs(String folderName) {
    		if (folderName == null || folderName.isEmpty()) {
    			return false;
    		}
    		File folder = new File(folderName);
    		return (folder.exists() && folder.isDirectory()) ? true : folder.mkdirs();
    	}
    	
    	/**
    	 * 将表信息写入Excel
    	 * @param sheet
    	 * @param metadataList
    	 * @return
    	 */
    	public XSSFWorkbook createColumnXSSF(List<ExportTableBean> exportTableBeanList,int start) {
    		//创建workbook
    		XSSFWorkbook workbook = new XSSFWorkbook();
    		//创建样式
    		XSSFCellStyle cellStyle =workbook.createCellStyle();
    		cellStyle.setWrapText(true);//自动换行
    		XSSFSheet sheet_first = workbook.createSheet("说明");// 第一个表不填
    		// 合并单元格(开始行,结束行,开始列,结束列)
    		sheet_first.addMergedRegion(new CellRangeAddress(0, 2, 0, 4));
    		Cell cell = sheet_first.createRow(0).createCell(0);
    		cell.setCellValue("    一个sheet放一个表的信息,第一个sheet放说明等信息,真正的表信息数据从第二个sheet开始。\n sheet名为表名+'_'+目前表个数");
    		cell.setCellStyle(cellStyle);
    		int sheetCount = 1;
    		String sheetName = "";
    		for(int k = start;k < (start + SheetNumber);k++){
    			//如果list的size小于等于k,就停止
    			if(exportTableBeanList.size() <= k){
    				break;
    			}
    			//list是有序的,从k开始
    			ExportTableBean exportTableBean = exportTableBeanList.get(k);
    			// 给每个元数据表创建一个sheet
    			//为了sheet名不重复,对表名进行截取(Excel中sheet名不得超过31位)
    			sheetName = exportTableBean.getTableName();
    			if(sheetName.length() > 27){
    				sheetName = sheetName.substring(0, 27);
    			}
    			//每个excel文件最多容纳255sheet
    			if(sheetCount > 255){
    				break;
    			}
    			//sheet名为表名_表个数
    			XSSFSheet sheet = workbook.createSheet(sheetName + "_" + (sheetCount++));
    			// 纵向固定值写入
    			
    			sheet.autoSizeColumn(1, true);
    			//index记录当前行数
    			int index = 0;
    			// 把表版本写入
    			sheet.createRow(index++).createCell(1).setCellValue(exportTableBean.getVersion());
    			// 把表名写到Excel表中
    			sheet.createRow(index++).createCell(1).setCellValue(exportTableBean.getTableName());
    			// 把表中文名称写入
    			sheet.createRow(index++).createCell(1).setCellValue(exportTableBean.getChineseName());
    			
    			int rowNum = sheet.getLastRowNum();
    			// 合并单元格
    			int coloumNum = sheet.getRow(sheet.getLastRowNum()).getPhysicalNumberOfCells();
    			if(coloumNum >= 1){
    				for (int i = 0; i <= (rowNum + 1); i++) {
    					sheet.addMergedRegion(new CellRangeAddress(i,i, 1, coloumNum - 1));
    				}
    			}
    			sheet.setDefaultColumnWidth(10);
    			//cellStyle.setWrapText(true);//自动换行
    		}
    		return workbook;
    	}
    	
    	  @GET
    	  @Path("/{userId}/table/export")
    	  @Produces(MediaType.APPLICATION_JSON)
    	  @Consumes(MediaType.APPLICATION_JSON)
    	  public Response exportMetadata(@PathParam("userId") int userId,@QueryParam("ids") String ids) throws Exception {
    	    ResponseBuilder responseBuilder = null;
    	    String filePathDetail = exportService.exportTable();
    	    try {
    	      File file = new File(filePathDetail);
    	      //System.out.println(filePathDetail);
    	      String filename = file.getName();
    	      InputStream inputStream = new BufferedInputStream(new FileInputStream(filePathDetail));
    
    	      responseBuilder = Response.ok(inputStream);
    
    	      responseBuilder.header("Content-Disposition",
    	          "attachment;filename=" + new String(filename.getBytes("utf-8"), "ISO-8859-1"));
    	      responseBuilder.header("Content-Type", "text/plain");
    	    } catch (Exception e) {
    	      OperLog.logOperation(logger, userId, request, "exportTable", filePathDetail,
    	          "export table", "failed");
    	      e.printStackTrace();
    	    }
    	    return responseBuilder.build();
    	  }
    }
    



    展开全文
  • POI导出多个Excel,每个Excel中有多个sheet /** * 工具类 * * @param workbook * @param sheetNum 第几个sheet * @param sheetTitle sheet的名称 * @param headers 表头 * @param hea...

    POI导出Excel,每个Excel中有多个sheet
    通过Zip导出多个Excel的压缩文件。

    假如项目部署到服务器上,就无法直接下载到本地桌面,需要先下载到服务器的某个文件夹,再使用response通过浏览器下载到客户端的桌面。
    假如需要同时下载多个Excel,response请求只满足一次下载一个文件,这是需要先将多个Excel文件下载到同一个文件夹下,再将此文件夹压缩,之后下载压缩文件。

    根据别人方法总结的,在此记录一下。

    参考别人的:java将不同模块数据导出到多个excel并压缩下载

    
    private ExportToExcelByPOI exportToExcelByPOI{
    
    private final static Logger logger = LoggerFactory.getLogger(BasyybqkckController.class);
    
    /**
         * 工具类
         *
         * @param workbook
         * @param sheetNum   第几个sheet
         * @param sheetTitle sheet的名称
         * @param headers    表头,可生成复杂的表头
         * @param fieldName  表头对饮的字段名
         * @param list       数据
         * @param type       用来分辨不同页面的导出
         * @throws Exception
         */
        public void exportExcelPoiTool(SXSSFWorkbook workbook, int sheetNum, String sheetTitle, String[][] headers, String[] fieldName,
                                       List<HashMap<String, Object>> list, String type) throws Exception {
            //设计表头
            int mergerNum = 0; //合并数
            //表头占几行,正文内容从表头之下开始
            int headersLen = headers.length;
            // 第一步,创建一个webbook,对应一个Excel以xsl为扩展名文件
            //SXSSFSheet sheet = (SXSSFSheet) workbook.createSheet();
            Sheet sheet = workbook.createSheet(sheetTitle);
            workbook.setSheetName(sheetNum, sheetTitle);
            // 冻结最左边的两列、冻结最上面的一行
            // 即:滚动横向滚动条时,左边的第一、二列固定不动;滚动纵向滚动条时,上面的第一,二,三行固定不动。
            //sheet.createFreezePane(2, 3);
    
    
            //设置列宽度大小
            // sheet.setDefaultColumnWidth((short) 30);
            //第二步, 生成表格第一行的样式和字体
            // 设置并获取到需要的样式
            XSSFCellStyle xssfCellStyleHeader = getAndSetXSSFCellStyleHeader(workbook);
            XSSFCellStyle xssfCellStyleOne = getAndSetXSSFCellStyleOne(workbook);
            XSSFCellStyle xssfCellStyleTwo = getAndSetXSSFCellStyleTwo(workbook);
    
            // 产生表格标题行
            // 循环创建header单元格(根据实际情况灵活创建即可)
            //给单元格设置值
            for (int i = 0; i < headers.length; i++) {
                //XSSFRow row = sheet.createRow(i);
                Row row = sheet.createRow(i);
                row.setHeight((short) 700);
                for (int j = 0; j < headers[i].length; j++) {
                    //XSSFCell cell = row.createCell(j);
                    Cell cell = row.createCell(j);
                    cell.setCellStyle(xssfCellStyleHeader);
                    cell.setCellValue(headers[i][j]);
                }
            }
            Map<Integer, List<Integer>> jumpMap = new HashMap<Integer, List<Integer>>(); // 合并行时要跳过的行列
            //合并列
            for (int i = 0; i < headers[headers.length - 1].length; i++) {
                if ("".equals(headers[headers.length - 1][i])) {
                    for (int j = headers.length - 2; j >= 0; j--) {
                        if (!"".equals(headers[j][i])) {
                            sheet.addMergedRegion(new CellRangeAddress(j, headers.length - 1, i, i)); // 合并单元格
                            break;
                        } else {
                            if (jumpMap.containsKey(j)) {
                                List<Integer> jumpList = jumpMap.get(j);
                                jumpList.add(i);
                                jumpMap.put(j, jumpList);
                            } else {
                                List<Integer> jumpList = new ArrayList<Integer>();
                                jumpList.add(i);
                                jumpMap.put(j, jumpList);
                            }
                        }
                    }
                }
            }
            //合并行
            for (int i = 0; i < headers.length - 1; i++) {
                for (int j = 0; j < headers[i].length; j++) {
                    List<Integer> jumpList = jumpMap.get(i);
                    if (jumpList == null || (jumpList != null && !jumpList.contains(j))) {
                        if ("".equals(headers[i][j])) {
                            mergerNum++;
                            if (mergerNum != 0 && j == (headers[i].length - 1)) {
                                sheet.addMergedRegion(new CellRangeAddress(i, i, j - mergerNum, j)); // 合并单元格
                                mergerNum = 0;
                            }
                        } else {
                            if (mergerNum != 0) {
                                sheet.addMergedRegion(new CellRangeAddress(i, i, j - mergerNum - 1, j - 1)); // 合并单元格
                                mergerNum = 0;
                            }
                        }
                    }
                }
            }
            // 第三步:遍历集合数据,产生数据行,开始插入数据
            // 遍历创建行,导出数据
            if (list.size() > 0) {
                for (int rownum = 0; rownum < list.size(); rownum++) {
                    // 从第四行开始有数据,前三行是表头
                    Row row = sheet.createRow(rownum + headersLen);
                    // 循环创建单元格
                    for (int cellnum = 0; cellnum < fieldName.length; cellnum++) {
                        Cell cell = row.createCell(cellnum);
                        // 根据行数,设置该行内的单元格样式
                        cell.setCellStyle(xssfCellStyleOne);
                        if (fieldName[cellnum].equals("xh")) {
                            cell.setCellValue(rownum + 1);//序号
                        } else {
                            cell.setCellValue(list.get(rownum).get(fieldName[cellnum]) + "");
                        }
                    }
                }
            }
     //设置内容的sheet
     setSheet(sheet);
     // 即:滚动横向滚动条时,左边的第一、二列固定不动;滚动纵向滚动条时,上面的第一,二,三行固定不动。
     sheet.createFreezePane(2, 3);
     //sheet.createFreezePane(2, headersLen);
    
     /**
         * 导出到本机桌面
         *
         * @param list,要导出的数据,一条数据对应一个sheet。 一条数据中包含多条要导出的数据,格式如下:
         *                                   List<List<Map<String,Object>>> list
         * @param headers                    表头,表头有一行的,两行的,三行的
         * @param fieldName                  表头对应的字段名称
         * @param fileName                   文件名
         * @param sheetTile                  sheet名称,一个sheetTitle对应list中的一条数据
         * @param type                       用来分辨不同的导出:
         * @return
         */
        public int exportToExcelByPoi_pc(List list, String[][] headers, String[] fieldName,
                                      String fileName, String[] sheetTile, String type) {
            //获取桌面路径,用于下载文件
            FileSystemView fsv = FileSystemView.getFileSystemView();
            File com = fsv.getHomeDirectory();
            // 导出的excel,全文件名
            //final String excelExportDestfilepath = com + "/" + map.get("fileName");
            final String excelExportDestfilepath = com + "/" + "/" + fileName + ".xlsx";
    
            ExportToExcelByPOI excelExport = null;
            // 用于导出多个sheet
            excelExport = new ExportToExcelByPOI();
            FileOutputStream fos = null;
            SXSSFWorkbook sxssfWorkbook = null;
            try {
                /// -> 从数据库中查询出要进行excel导出的数据
                long startTime0 = System.currentTimeMillis();
                long endTime0 = System.currentTimeMillis();
                logger.info("查询数据总耗时:{} 毫秒; list数量为 {}", endTime0 - startTime0, list.size());
                /// -> excel到处逻辑
                long startTime = System.currentTimeMillis();
                // 获取SXSSFWorkbook实例
                sxssfWorkbook = new SXSSFWorkbook();
                // sheet名称
                //Sheet sheet = sxssfWorkbook.createSheet(fileName);
                // 创建第一行,作为header表头;从第二行开始
                int ts = sheetTile.length;
                for (int i = 0; i < sheetTile.length; i++) {
                    excelExport.exportExcelPoiTool(sxssfWorkbook, i, sheetTile[i], headers, fieldName, (List<HashMap<String, Object>>) list.get(i), type);
                }
                //在后面设置sheet
                //setSheet(sheet);
                fos = new FileOutputStream(excelExportDestfilepath);
                sxssfWorkbook.write(fos);
                long endTime = System.currentTimeMillis();
                logger.info("数据全部导出至excel总耗时:{} 毫秒!", endTime - startTime, list.size());
            } catch (Exception e) {
                logger.error("发生异常咯!", e);
            } finally {
                try {
                    if (sxssfWorkbook != null)
                        // dispose of temporary files backing this workbook on disk -> 处
                        //     理SXSSFWorkbook导出excel时,产生的临时文件
                        sxssfWorkbook.dispose();
                    if (fos != null)
                        fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
            return 1;
        }
    
                与导出到本机桌面不同的是的地方就是多了一个文件下载,
                1、先将文件下载到服务器的桌面,
                2、然后再将服务器上的文件通过浏览器下载到客户端,
                3、最后删除服务器上的文件
    /**
         * 服务器导出到本机
         *
         * @param list,要导出的数据,一条数据对应一个sheet。 一条数据中包含多条要导出的数据,格式如下:
         *                                   List<List<Map<String,Object>>> list
         * @param headers                    表头,表头有一行的,两行的,三行的
         * @param fieldName                  表头对应的字段名称
         * @param fileName                   文件名
         * @param sheetTile                  sheet名称,一个sheetTitle对应list中的一条数据
         * @param type                       用来分辨不同的导出:
         * @param response
         * @return
         */
        public void exportToExcelByPoi(List list, String[][] headers, String[] fieldName,
                        String fileName, String[] sheetTile, String type, HttpServletResponse response) {
            //获取桌面路径,用于下载文件
            FileSystemView fsv = FileSystemView.getFileSystemView();
            File com = fsv.getHomeDirectory();
            // 导出的excel,全文件名
            //final String excelExportDestfilepath = filePath + fileName + ".xlsx";
            final String excelExportDestfilepath = com + "/" + "/" + fileName + ".xlsx";
    
            ExportToExcelByPOI excelExport = null;
            // 用于导出多个sheet
            excelExport = new ExportToExcelByPOI();
            FileOutputStream fos = null;
            SXSSFWorkbook sxssfWorkbook = null;
            try {
                /// -> 从数据库中查询出要进行excel导出的数据
                long startTime0 = System.currentTimeMillis();
                long endTime0 = System.currentTimeMillis();
                logger.info("查询数据总耗时:{} 毫秒; list数量为 {}", endTime0 - startTime0, list.size());
                /// -> excel到处逻辑
                long startTime = System.currentTimeMillis();
                // 获取SXSSFWorkbook实例
                sxssfWorkbook = new SXSSFWorkbook();
                // sheet名称
                //Sheet sheet = sxssfWorkbook.createSheet(fileName);
                //导出
                for (int i = 0; i < sheetTile.length; i++) {
                    excelExport.exportExcelPoiTool(sxssfWorkbook, i, sheetTile[i], headers, fieldName, (List<HashMap<String, Object>>) list.get(i), type);
                }
                //在后面设置sheet
                //setSheet(sheet);
                fos = new FileOutputStream(excelExportDestfilepath);
                sxssfWorkbook.write(fos);
    
    			// 以下是与导出到本机桌面不同的地方
                // 文件下载
                String excelName = fileName + ".xlsx";
                InputStream inputStream = null;
                ServletOutputStream outServletOutputStream = null;
                // 输出文档路径及名称
                File outFile = new File(excelExportDestfilepath);
    
                inputStream = new FileInputStream(excelExportDestfilepath);
                response.setCharacterEncoding("utf-8");
                response.setContentType("application/msexcel");
                //response.addHeader("Content-Disposition", "attachment;filename=我" + "你" + ".xlsx");
                //response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
                //防止文件名中文乱码
                response.setHeader("Content-Disposition", "attachment;filename=" +
                        new String(excelName.getBytes("GBK"), "ISO8859-1"));
                outServletOutputStream = response.getOutputStream();
                byte[] buffer = new byte[512];
                int bytesToRead = -1;
                while ((bytesToRead = inputStream.read(buffer)) != -1) {
                    outServletOutputStream.write(buffer, 0, bytesToRead);
                }
                // 流关闭后
                inputStream.close();
                //删除服务器上下载的文件
                outFile.delete();
    
                long endTime = System.currentTimeMillis();
                logger.info("数据全部导出至excel总耗时:{} 毫秒!", endTime - startTime, list.size());
            } catch (Exception e) {
                logger.error("发生异常咯!", e);
            } finally {
                try {
                    if (sxssfWorkbook != null)
                        // dispose of temporary files backing this workbook on disk -> 处
                        //     理SXSSFWorkbook导出excel时,产生的临时文件
                        sxssfWorkbook.dispose();
                    if (fos != null)
                        fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
    
        }
    
    调用exportToExcelByPoi方法,进行导出
    
    	@Autowired
        private ExportToExcelByPOI exportToExcelByPOI;
    
        @RequestMapping(value = "/exportToExcelByPoi", method = RequestMethod.GET)
    	@ResponseBody
    	public void exportPoi(@RequestParam Map<String, Object> map, HttpServletRequest request, HttpServletResponse response) {
    	    //生成复杂的表头
    		String[][] propertyDes = {{"序号","疾病", "例数", "", "", "死亡率", "", "", "药占比", "", "", "材料占比",
    				"", "", "药品和材料占比", "", "", "平均住院日", "", "", "平均住院费用", "", ""},
    
    				{"","", "本期值", "上期值", "", "本期值", "上期值", "", "本期值", "上期值", "", "本期值", "上期值",
    						"", "本期值", "上期值", "", "本期值", "上期值", "", "本期值", "上期值", ""},
    
    				{"","", "", "值", "±%", "", "值", "±%", "", "值", "±%", "", "值", "±%", "", "值", "±%",
    						"", "值", "±%", "", "值", "±%"}};
    		// 表头对应的字段名称
    		String[] fieldName = {"xh","name", "ls", "lsPrev", "lsRadio",
    				"swl", "swlPrev", "swlRadio", "yzb", "yzbPrev", "yzbRadio",
    				"clzb", "clzbPrev", "clzbRadio", "ypyclzb", "ypyclzbPrev", "ypyclzbRadio",
    				"pjzyr", "pjzyrPrev", "pjzyrRadio", "pjzyfy", "pjzyfyPrev","pjzyfyRadio"};
    		// 查询要导出的数据
    		List<HashMap<String, Object>> list = service.getData(map);
    		//将数据转换成要导出的格式,这里根据情况而定
    		List<HashMap<String, Object>> listData = conversionListData(list);
    		// sheet的名称,要导出多个sheet的话,就会对应多个
    		String[] sheetTile={fileName};
            List listExcel=new ArrayList();
            // 一个sheetTitle,对应一个listData,多个SheetTitle,对应多个ListData。这里是一个sheetTitle对应一个ListData。
    		listExcel.add(listData);
    
    		//多个的话如下:
     		String[] sheetTile = {"济南市", "青岛市", "淄博市", "枣庄市", "东营市", "烟台市", "潍坊市", "济宁市", "泰安市",
                    "威海市", "日照市", "临沂市", "德州市", "聊城市", "滨州市", "菏泽市"};
     		for (int i = 0; i < sheetTile.length; i++) {
                    List param = new ArrayList();
                    // 分别查询16个地级市的数据
                    List<HashMap<String, Object>> list = service.getData(map);
                    //将数据转换为导出的格式
                    List<HashMap<String, Object>> listData = conversionListData(list);
                    // 把数据放到数组中,数组中放的是16个地级市的数据
                    listExcel.add(listData );
            }
    		exportToExcelByPOI.exportToExcelByPoi(listExcel,propertyDes,fieldName,fileName,sheetTile,response);
    	}
    

    以下代码:将多个Excel压缩成一个文件进行导出

     /**
         * 服务器导出多个Excel的Zip文件到客户端
         *
         *
         * @param list,要导出的数据,一条数据对应一个sheet。 一条数据中包含多条要导出的数据,格式如下:
         *                                   List<List<Map<String,Object>>> list
         * @param headers                    表头,表头有一行的,两行的,三行的
         * @param fieldName                  表头对应的字段名称
         * @param fileName                   文件名
         * @param sheetTile                  sheet名称,一个sheetTitle对应list中的一条数据
         * @param type                       用来分辨不同的导出:
         * @param response
         * @return
         */
        public void exportToExcelByPoi_zip(List list, String[][] headers, String[] fieldName,
                                          String[] fileName, String[] sheetTile, String type,
                                           HttpServletResponse response, HttpServletRequest request) {
            // 生成的excel表格路径
            final List<String> fileNameList = new ArrayList<String>();
            // list中包括多个excel的信息
            for (int i = 0; i < list.size(); i++) {
                List ListQuarter = (List) list.get(i);
                // 将数据导入到excel表格中,并将生成的表格路径添加到fileNameList中
                ExportExcelZipUtils.toExcelForZip(ListQuarter,headers,fieldName,fileName[i],sheetTile,type,response,request,fileNameList);
            }
            // 将生成的多个excel表格路径压缩成zip格式文件,并返回生成的临时zip文件路径
            final String zipFilePath = ExportExcelZipUtils.toZipFiles(request, fileNameList, "批量导出excel文件.zip");
            // zip文件创建成功
            if (!StringUtils.isEmpty(zipFilePath)) {
                try {
                    // 设置response头
                    ExportExcelZipUtils.setResponseHeader(response, "批量导出excel文件.zip");
                    // 下载
                    ExportExcelZipUtils.downloadZip(response.getOutputStream(), zipFilePath);
                } catch (final IOException e) {
                    logger.info("get outputStream from response failed");
                }
            }
        }
    
    public class ExportExcelZipUtils {
        private final static org.slf4j.Logger logger = LoggerFactory.getLogger(ExportToExcelByPOI.class);
        /**
         * 设置excel压缩文件导出时的请求头
         * @param response
         * @param fileName:多个excel的压缩文件名
         */
        public static void setResponseHeader(final HttpServletResponse response, final String fileName) {
    
            logger.info("begin to set response header");
            try {
                response.reset();
                response.setContentType("application/octet-stream");
                response.setCharacterEncoding("UTF-8");
                response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
                response.addHeader("Pargam", "no-cache");
                response.addHeader("Cache-Control", "no-cache");
                logger.info("set response header successfully");
    
            } catch (final Exception e) {
                logger.error("set response header failed", e);
            }
        }
    
        /**
         * 生成excel文件
         * @param list
         * @param headers
         * @param fieldName
         * @param fileName
         * @param sheetTile
         * @param type
         * @param response
         * @param request
         * @param fileNameList
         */
        public static void toExcelForZip(List list, String[][] headers, String[] fieldName,
                                         String fileName, String[] sheetTile, String type,
                                         HttpServletResponse response, HttpServletRequest request,
                                         List<String> fileNameList) {
            final File dirFile = new File(request.getRealPath(File.separator + "excel") + File.separator);
            if (!dirFile.exists()) {
                dirFile.mkdirs();
            }
            final String file = request.getRealPath(File.separator + "excel") + File.separator + fileName + ".xlsx";
    
            //获取桌面路径,用于下载文件
            FileSystemView fsv = FileSystemView.getFileSystemView();
            File com = fsv.getHomeDirectory();
            // 导出的excel,全文件名
            final String excelExportDestfilepath = com + "/" + "/" + fileName + ".xlsx";
    
            ExportToExcelByPOI excelExport = null;
            // 用于导出多个sheet
            excelExport = new ExportToExcelByPOI();
    
            FileOutputStream fos = null;
            SXSSFWorkbook sxssfWorkbook = null;
            try {
                fos = new FileOutputStream(file);//为压缩文件做准备
    
                /// -> 从数据库中查询出要进行excel导出的数据
                long startTime0 = System.currentTimeMillis();
                long endTime0 = System.currentTimeMillis();
                logger.info("查询数据总耗时:{} 毫秒; list数量为 {}", endTime0 - startTime0, list.size());
                /// -> excel到处逻辑
                long startTime = System.currentTimeMillis();
                // 获取SXSSFWorkbook实例
                sxssfWorkbook = new SXSSFWorkbook();
                // sheet名称
                //Sheet sheet = sxssfWorkbook.createSheet(fileName);
                //导出
                for (int i = 0; i < sheetTile.length; i++) {
                    excelExport.exportExcelPoiTool(sxssfWorkbook, i, sheetTile[i], headers, fieldName, (List<HashMap<String, Object>>) list.get(i), type);
                }
                //在后面设置sheet
                //setSheet(sheet);
                //在这里不能写这一行,写上这一行后,导出的文件会有问题。
                //fos = new FileOutputStream(excelExportDestfilepath);
                sxssfWorkbook.write(fos);
                fos.flush();//为压缩文件做准备
                fileNameList.add(file);//为压缩文件做准备
                long endTime = System.currentTimeMillis();
                logger.info("数据全部导出至excel总耗时:{} 毫秒!", endTime - startTime, list.size());
            } catch (Exception e) {
                logger.error("发生异常咯!", e);
            } finally {
                try {
                    if (sxssfWorkbook != null)
                        // dispose of temporary files backing this workbook on disk -> 处
                        //     理SXSSFWorkbook导出excel时,产生的临时文件
                        sxssfWorkbook.dispose();
                    if (fos != null)
                        fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
    
        }
        public static String toZipFiles(final HttpServletRequest request, final List<String> fileNameList,
                                        final String zipFileName) {
    
            String zipFilePath = request.getRealPath(File.separator + "excel") + File.separator + zipFileName;
            logger.info("begin to create zip file");
    
            final File[] files = new File[fileNameList.size()];
            for (int i = 0; i < fileNameList.size(); i++) {
                files[i] = new File(fileNameList.get(i));
            }
            // 压缩文件
            final File zipFile = new File(zipFilePath);
            // 将excel文件压缩成zip文件
            final byte[] buf = new byte[1024];
            ZipOutputStream zipOut = null;
            FileInputStream fis = null;
            try {
                zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
                for (int i = 0; i < files.length; i++) {
                    fis = new FileInputStream(files[i]);
                    zipOut.putNextEntry(new ZipEntry(files[i].getName()));
                    int len = 0;
                    while ((len = fis.read(buf)) > 0) {
                        zipOut.write(buf, 0, len);
                    }
                    zipOut.closeEntry();
                    fis.close();
                }
            } catch (final Exception e) {
                zipFilePath = null;
                logger.error("failed to create zip file");
            } finally {
                if (zipOut != null) {
                    try {
                        zipOut.close();
                    } catch (final IOException e) {
                        logger.error("failed to close ZipOutputStream");
                    }
                }
                if (fis != null) {
                    try {
                        fis.close();
                    } catch (final IOException e) {
                        logger.error("failed to close FileInputStream");
                    }
                }
            }
            return zipFilePath;
        }
    
        public static void downloadZip(final OutputStream out, final String zipFilePath) {
    
            logger.info("begin to download zip file from " + zipFilePath);
            FileInputStream inStream = null;
            try {
                inStream = new FileInputStream(zipFilePath);
                final byte[] buf = new byte[4096];
                int readLength;
                while (((readLength = inStream.read(buf)) != -1)) {
                    out.write(buf, 0, readLength);
                }
                out.flush();
            } catch (final Exception e) {
                logger.error("download zip excel failed");
            } finally {
                try {
                    inStream.close();
                } catch (final IOException e) {
                    logger.error("failed to close FileInputStream");
                }
                try {
                    out.close();
                } catch (final IOException e) {
                    logger.error("failed to close OutputStream");
                }
            }
        }
    }
    
    

    调用exportToExcelByPoi_zip方法
    1、listQuarterExcel的格式:List<List<HashMap<String, Object>>
    2、headers:表头
    3、field:表头对应的字段名
    4、fileName:文件名
    5、sheetTitle:sheet名称
    6、type:用来区分不同的页面的导出

    exportToExcelByPOI.exportToExcelByPoi_zip(listQuarterExcel,headers,field,fileName,sheetTile,type,response,request);
    
    展开全文
  • excel导出为lua文件

    2018-07-16 10:51:07
    周末想在家弄一个excel导出为lua文件的lua脚本,于是开始动手查资料。网上是python实现,而lua实现的代码示例几乎没有,而最后我也是没能用lua实现一示例,只好借用其他码友的Python示例了。整个过程分为两...

    周末想在家弄一个excel导出为lua文件的lua脚本,于是开始动手查资料。网上多是python实现,而lua实现的代码示例几乎没有,而最后我也是没能用lua实现一个示例,只好借用其他码友的Python示例了。

    整个过程分为两个步骤:一是遍历指定的文件夹,将下属的所有excel文件找出来;二是读excel文件,并写到lua文件中。

    网上很多例子是lfs+luacom实现,win下安装这两个扩展包挺方便,我家里是台mac,问题就出在mac装luacom非常不方便这里了(至少我没能解决额)。首先是用luarocks下载安装lfs,这个是lua的文件处理扩展包,能方便实现步骤一,步骤二需要用到luacom读excel,安装时提示没有指定样式,上网一查才知道luacom只能在win下使用luarocks安装,其他平台的话,要自己下载编译,恕我看到编译就头大,转而放弃lua实现。

    过程中还遇到另一个有趣的问题,升级lua时提示我luarocks在我的电脑上存在两个相互冲突的版本,需要我自己选择其中一个版本使用。mac的环境路径和win有些不同:win下非系统软件,都会在环境路径下增加一个具体的执行路径,而mac的路径是几个bin文件夹,里面堆放一堆执行文件或执行文件的快捷方式。去到luarocks所在的usr/local/bin文件中,将想用的版本改名为luarocks即可,例如我看到有个luarocks 1.x和luarocks 2.x,于是将luarocks 2.x改名为luarocks即可在终端上使用。

    展开全文
  • Excel导出Sheet文件

    2013-06-26 14:42:50
    将一个Excel当中的多个sheet分别导出成单独的excel文件
  • 需要导出多个excel文件并压缩为一个文件,最后返回给前端 解决思路: 将每个业务数据导出一个excel文件,然后通过ZipOutputStream写入一个zip文件就可以了 代码层面: Controller入口:传入必要的业务参数,以及...

    业务场景:

    需要导出多个excel文件并压缩为一个文件,最后返回给前端

    解决思路:

    将每个业务数据导出一个excel文件,然后通过ZipOutputStream写入一个zip文件就可以了

    代码层面:

    Controller入口:传入必要的业务参数,以及response

     @PostMapping("/v1/analysis/mediasubsidy/export")
        public void export(@RequestBody MediaSubsidyMonthRequest mediaSubsidyMonthRequest,HttpServletResponse response) throws Exception {
            if (mediaSubsidyMonthRequest.getSort() == null) {
                mediaSubsidyMonthRequest.setSort(1);
            }
            if (mediaSubsidyMonthRequest.getPage() == null) {
                mediaSubsidyMonthRequest.setPage(1);
            }
            if (mediaSubsidyMonthRequest.getSize() == null) {
                mediaSubsidyMonthRequest.setSize(10000);
            }
            //获取压缩列表
            ExportMoreFileEntity exportMoreFileEntity = exportOperate.getMediaSubsidyHSSFWorkbooks(mediaSubsidyMonthRequest);
            List<String> fileNames = exportMoreFileEntity.getFileNames();
            List<HSSFWorkbook> hssfWorkbookList = exportMoreFileEntity.getHssfWorkbookList();
    
            ZipOutputStream outputStream =null;
            try {
                String downloadFileName = URLEncoder.encode("SelfMediaReport.zip", "UTF-8");
                response.setHeader("content-type", "application/octet-stream");
                response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
                response.setContentType("application/x-execl");
                response.setHeader("Content-Disposition",
                        "attachment;filename=" + new String((downloadFileName).getBytes(), "UTF-8"));
                // 读取文件
                outputStream= new ZipOutputStream(response.getOutputStream());
                List<ByteArrayOutputStream> workList = ExportAndZipUtil.workBook2Stream( hssfWorkbookList);
                for (int i = 0; i < fileNames.size(); i++) {
                    outputStream.putNextEntry(new ZipEntry(fileNames.get(i)));
                    byte[] buf = workList.get(i).toByteArray();
                    outputStream.write(buf,0,buf.length);
                }
            }finally {
                if(outputStream!=null){
                    outputStream.close();
                }
            }
        }

     ExportAndZipUtil 将HSSFWorkbook转成字节流

    package com.mongcent.statistics.analysis.web.util;
    
    import cn.hutool.core.io.IoUtil;
    import cn.hutool.core.util.ZipUtil;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.*;
    import org.springframework.stereotype.Service;
    
    import java.io.*;
    
    import java.text.SimpleDateFormat;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    /**
     * @author: hezishan
     * @date: 2021/1/22.
     * @desc:
     **/
    public class ExportAndZipUtil {
    
    
        /**
         * 把传入的工作簿文件转成输入流
         *
         * @param workbooks 工作簿文件
         * @return 文件流list
         */
        public static List<ByteArrayOutputStream> workBook2Stream(List<HSSFWorkbook>  workbooks) throws IOException {
            List<ByteArrayOutputStream> list = new LinkedList<ByteArrayOutputStream>();
            for (Workbook obj : workbooks) {
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                obj.write(os);
                list.add(os);
                obj.close();
            }
            return list;
        }
    
        /**
         * 压缩文件
         *
         * @param xworkWorks 生成的07工作簿
         * @param fileNames 被压缩的文件名称
         * @return File 生成的压缩包文件
         *
         * @throws IOException
         *
         */
        public static File zipFile(List<HSSFWorkbook> xworkWorks, String[] fileNames) throws Exception {
            // 写入输入流
            List<ByteArrayOutputStream> workList = workBook2Stream( xworkWorks);
            InputStream[] is = new InputStream[workList.size()];
            int step = 0;
            for (ByteArrayOutputStream bs : workList) {
                byte[] content = bs.toByteArray();
                ByteArrayInputStream bt = new ByteArrayInputStream(content);
                is[step] = bt;
                step++;
            }
            // 创建临时文件tempFile
            String rootPath = ExportAndZipUtil.class.getClassLoader().getResource("").getPath();
            File zipFile = new File(rootPath+"/tempFile.zip");
            if (!zipFile.exists()) {
                zipFile.createNewFile();
            }
            zipFile = ZipUtil.zip(zipFile, fileNames, is);
            // 关闭流
            for (ByteArrayOutputStream steam : workList) {
                IoUtil.close(steam);
            }
            for (InputStream steam : is) {
                IoUtil.close(steam);
            }
            return zipFile;
        }
    
    
    }
    

    MediaSubsidyMonthExportOperate 主要是将业务数据转成多个excel文件,进行合并操作而已 

    package com.mongcent.statistics.analysis.operate;
    
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.mongcent.core.commons.ui.ExcelUtil.ExcelUtil;
    import com.mongcent.statistics.analysis.entity.ExportMoreFileEntity;
    import com.mongcent.statistics.analysis.entity.MediaSubsidyDetailMonth;
    import com.mongcent.statistics.analysis.entity.MediaSubsidyMonthRequest;
    import com.mongcent.statistics.analysis.entity.MediaSubsidyMonthResponse;
    import com.mongcent.statistics.analysis.service.MediaSubsidyMonthRecordServiceImpl;
    import org.apache.commons.lang3.StringUtils;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.text.SimpleDateFormat;
    import java.util.*;
    import java.util.stream.Collectors;
    
    /**
     * @author: hezishan
     * @date: 2021/1/22.
     * @desc:
     **/
    @Service
    public class MediaSubsidyMonthExportOperate {
    
        @Autowired
        MediaSubsidyMonthRecordServiceImpl mediaSubsidyMonthRecordService;
    
        public ExportMoreFileEntity getMediaSubsidyHSSFWorkbooks(MediaSubsidyMonthRequest mediaSubsidyMonthRequest) {
            List<HSSFWorkbook> hssfWorkbookList = new ArrayList<>();
            List<String> fileNames = new ArrayList<>();
            getMediaSubsidy(mediaSubsidyMonthRequest, hssfWorkbookList, fileNames);
            return ExportMoreFileEntity.builder().hssfWorkbookList(hssfWorkbookList).fileNames(fileNames).build();
        }
    
    
        /**
         * 生产总表 + 详情表
         *
         * @param mediaSubsidyMonthRequest
         * @param hssfWorkbookList
         * @param fileNames
         */
        private void getMediaSubsidy(MediaSubsidyMonthRequest mediaSubsidyMonthRequest, List<HSSFWorkbook> hssfWorkbookList, List<String> fileNames) {
            Page<MediaSubsidyMonthResponse> mediaSubsidyMonthResponsePage = mediaSubsidyMonthRecordService.getMediaSubsidyMonthPage(mediaSubsidyMonthRequest);
            if (mediaSubsidyMonthResponsePage != null) {
                List<MediaSubsidyMonthResponse> mediaSubsidyMonthResponses = mediaSubsidyMonthRecordService
                        .getMediaSubsidyMonth(mediaSubsidyMonthResponsePage,mediaSubsidyMonthRequest.getDt());
                getMediaSubsidySummary(mediaSubsidyMonthResponses, hssfWorkbookList, fileNames);
                getMediaSubsidyDetail(mediaSubsidyMonthResponses, hssfWorkbookList, fileNames);
            }
            return;
        }
    
    
        /**
         * 总表
         *
         * @param mediaSubsidyMonthResponses
         * @param hssfWorkbookList
         * @param fileNames
         */
        private void getMediaSubsidySummary(List<MediaSubsidyMonthResponse> mediaSubsidyMonthResponses, List<HSSFWorkbook> hssfWorkbookList,
                                            List<String> fileNames) {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss");
            String title = simpleDateFormat.format(new Date()) + "summary.xls";
            if (mediaSubsidyMonthResponses != null && mediaSubsidyMonthResponses.size() > 0) {
                Map<String, String> headers = new LinkedHashMap<>();
                headers.put("number", "number");
                headers.put("dt", "Billing Month");
                headers.put("nickName", "Username");
                headers.put("memberId", "User ID");
                headers.put("memberType", "User type");
                headers.put("graphicAmount", "Number of New Articles");
                headers.put("atlasAmount", "Number of New Albums");
                headers.put("videoAmount", "Number of New Videos");
                headers.put("smallvideoAmount", "Add Vlog");
                headers.put("amount", "Monthly Total Revenue");
                headers.put("status", "Audit Status");
                List<Map<String, Object>> dataSet = new ArrayList<Map<String, Object>>();
                int number = 1;
                for (MediaSubsidyMonthResponse subsidy : mediaSubsidyMonthResponses) {
                    Map<String, Object> map = new HashMap<>();
                    map.put("number", number);
                    map.put("dt", subsidy.getDt());
                    map.put("nickName", subsidy.getNickName());
                    map.put("memberId", subsidy.getMemberId());
                    map.put("memberType", getMemberType(subsidy.getIsFlag()));
                    map.put("graphicAmount", subsidy.getGraphicAmount());
                    map.put("atlasAmount", subsidy.getAtlasAmount());
                    map.put("videoAmount", subsidy.getVideoAmount());
                    map.put("smallvideoAmount", subsidy.getSmallvideoAmount());
                    map.put("amount", subsidy.getAmount());
                    map.put("status", getStatus(subsidy.getStatus()));
                    number++;
                    dataSet.add(map);
                }
                HSSFWorkbook hssfWorkbook = ExcelUtil.exportExcelwithTitle(title, headers, dataSet, "yyyyMMdd-HHmmss");
                fileNames.add(title);
                hssfWorkbookList.add(hssfWorkbook);
            }
        }
    
    
        /**
         * 每个自媒体每个月份导出一份excel
         *
         * @param mediaSubsidyMonthResponses
         * @param hssfWorkbookList
         * @param fileNames
         */
        private void getMediaSubsidyDetail(List<MediaSubsidyMonthResponse> mediaSubsidyMonthResponses, List<HSSFWorkbook> hssfWorkbookList,
                                           List<String> fileNames) {
            if (mediaSubsidyMonthResponses != null && mediaSubsidyMonthResponses.size() > 0) {
                for (MediaSubsidyMonthResponse monthResponse : mediaSubsidyMonthResponses) {
                    Long memberId = monthResponse.getMemberId();
                    String dt = monthResponse.getDt();
                    String nickName = monthResponse.getNickName();
                    List<MediaSubsidyDetailMonth> detailMonths = mediaSubsidyMonthRecordService.getMediaDetailMonth(memberId, dt);
                    if (detailMonths != null && detailMonths.size() > 0) {
                        String dtStr=dt.replace("-","");
                        String title = nickName +"_"+ dtStr + "detail.xls";
                        Map<String, String> headers = new LinkedHashMap<>();
                        headers.put("incomeType", "Income Type");
                        headers.put("newsType", "Information Type");
                        headers.put("income", "Income Amount");
                        headers.put("flowType", "Traffic Type");
                        headers.put("upLimit", "Upper limit");
                        headers.put("ruleDate", "Validate Period ");
                        headers.put("totalQuantity", "Data");
                        headers.put("amount", "Income");
                        List<Map<String, Object>> dataSet = new ArrayList<Map<String, Object>>();
                        for (MediaSubsidyDetailMonth detailMonth : detailMonths) {
                            Map<String, Object> map = new HashMap<>();
                            map.put("incomeType", getIncomeType(detailMonth.getIncomeType()));
                            map.put("newsType", getNewsType(detailMonth.getNewsType()));
                            map.put("income",  detailMonth.getIncome() + " dollars per 10,000 traffic");
                            map.put("flowType", getFlowType(detailMonth.getFlowType()));
                            map.put("upLimit",  detailMonth.getUpLimit() + " dollars per article");
                            map.put("ruleDate", detailMonth.getRuleDate());
                            map.put("totalQuantity", detailMonth.getTotalQuantity());
                            map.put("amount", "$" + detailMonth.getAmount());
                            dataSet.add(map);
                        }
                        HSSFWorkbook hssfWorkbook = ExcelUtil.exportExcelwithTitle(title, headers, dataSet, "yyyyMMdd-HHmmss");
                        fileNames.add(title);
                        hssfWorkbookList.add(hssfWorkbook);
                    }
                }
            }
        }
    
    
        private String getMemberType(Integer isFlag) {
            //0非自媒体,1普通自媒体,2大V
            String memberType = "-";
            if(isFlag!=null) {
                switch (isFlag) {
                    case 0:
                        memberType = "No self media users";
                    case 1:
                        memberType = "General self media users";
                    case 2:
                        memberType = " Big V self media users";
                }
            }
            return memberType;
        }
    
    
        private String getStatus(Integer status) {
            //0:未审核,1:通过审核,2:已发钱,3:驳回审核;4:不通过
            String statusType = "-";
            if(status!=null) {
                switch (status) {
                    case 0:
                        statusType = "Pending audit";
                    case 1:
                        statusType = "Passed Audit";
                    case 2:
                        statusType = "Has been issued";
                    case 3:
                        statusType = "Has been rejected";
                    case 4:
                        statusType = "Failed";
                }
            }
            return statusType;
        }
    
        private String getIncomeType(Integer incomeType) {
            //收益类型,1:原创资讯被阅读,2:原创资讯被播放; 3:原创资讯被点赞;4:非原创资讯被阅读,5:非原创资讯被播放;6:非原创资讯被点赞;7:发表评论; 8:邀请好友
            String incomeTypeStr = "";
            if(incomeType!=null) {
                switch (incomeType) {
                    case 1:
                        incomeTypeStr = "Original information is read";
                    case 2:
                        incomeTypeStr = "Original information is broadcast";
                    case 3:
                        incomeTypeStr = "Original information is liked";
                    case 4:
                        incomeTypeStr = "Non-original information is read";
                    case 5:
                        incomeTypeStr = "Non-original information is broadcast";
                    case 6:
                        incomeTypeStr = "Non-original information is liked";
                    case 7:
                        incomeTypeStr = "Post a comment";
                    case 8:
                        incomeTypeStr = "Invite friends";
                }
            }
            return incomeTypeStr;
        }
    
        private String getFlowType(Integer flowType) {
            //流量类型,1:全部流量,2:真实流量;3:有效流量
            String flowTypeStr = "-";
            if(flowType!=null) {
                switch (flowType) {
                    case 1:
                        flowTypeStr = "All Traffic(Real Traffic+Valid Traffic)";
                    case 2:
                        flowTypeStr = "Real Traffic";
                    case 3:
                        flowTypeStr = "Valid Traffic";
                }
            }
            return flowTypeStr;
        }
    
        private String getNewsType(String newsType) {
            //多分类,使用,隔开;资讯类型,1-图文,2-图集,3-视频,8-小视频
            if(!StringUtils.isEmpty(newsType)) {
                newsType=newsType.replace("1","Articles")
                        .replace("2","Albums")
                        .replace("3","Videos")
                        .replace("8","Vlog");
            }
            return newsType;
        }
    
    }
    

     

    展开全文
  • SAP OLE excel导出多个sheet页

    千次阅读 2020-10-21 16:00:18
    效果图 第一sheet页: 第二sheet页: *整体思路: *先打开excel,整理好数据 *1.拷贝模板,复制sheet页 PERFORM frm_add_excel_sheet . ...* 获取下载文件路径 PERFORM f_frm_download_excel_modu
  • jsp页面可以批量上传多个excel...并将信息展现在jsp页面表格里,勾选多个数据,可以导出excel文件。很方便,很实用!(每一行数据,就相当于表格里的某张表的一条信息,后期只要改下表结构,数据库,实体类,即可!)
  • 将MySQL数据库中的多个导出Excel文件,并在一个Excel文件中以多个sheet的形式存储下来。 1、建立Excel文件,并获取数据表数据: private static void process(String[] sqls) { Connection conn = ...
  • public void doExport(OutputStream out) throws JspException { try { out = toExcel(out); ... HSSFWorkbook wb = new HSSFWorkbook();//下面注释为单个sheet,就是只有一个excel文件及...
  • 生成XML的方式有很:如果你是程序员,那么你可以通过变成快速生成你想要的XML格式;如果你是其他用户,你可能会使用记事本等文本编辑工具来手动写XML。这些都不是问题,但是数据量很大的时候,如果你不是程序猿会...
  • 之前系统里做的导出都是千篇一律的所有文件导在一个excel里,有现成的工具,现成的逻辑。 突然有那么一天,一切都不再现成了,我得把数据们导出为压缩包,一人一个Excel谁也不干涉谁。研究和参考了一下网上大神们的...
  • php 导出多个excel并输出压缩文件

    千次阅读 2018-11-07 16:20:39
    //进行多个文件压缩 $zip = new ZipArchive(); $filename = "各省用户数据.zip"; $zip->open($filename, ZipArchive::CREATE); //打开压缩包 foreach ($fileNameArr as $file) { //$zip->addFile($file, ...
  • 需求:用户在前台页面点击批量导出单据,实现下载对应批量单据excel文件压缩包功能 实现思路:先利用java poi工具类包中的Workbook类生成填充excel对象,然后用Workbook中的write方法将excel对象写入到输入流...
  • Java使用poi导出excel文件包含多个sheet

    千次阅读 2019-01-08 10:08:18
    最近一次小需求要求对一个页面的两个报表通过点击一个导出按钮导出到一个excel中,当然,是要求在一个excel中建立多个sheet来保存两个报表的数据,否则全部放置在一个报表中就没有意义了,记录一下,以免下次使用CV...
  • 导出下载单个Excel也许简单,但是有的时候也会用到下载多个excel并且打包成zip文件的情况,最近遇到了,现在简单整理一下! 1、ftl文件 导出 class="table table-striped table-hover" data-sort...
  • SQL Server表中数据按条件批量导出多个Excel文件是本文我们主要要介绍的内容,在一次SQL Server数据库的操作中,需要将某个有数十万行数据的表按类别导出为xls文件,每个类别一个xls。将数据表中的数据导出并保存...
  • Excel 导出 为 Lua 配置文件 工具 当前 工具 是 集成在 unity 编辑器 下 可将 Excel 表 的 每 sheet 表 转为 单独 lua 配置 文件的工具! 特点:操作 简单!读取 方便! 具体 细节 就不说了!可以 直接 看代码!...
  • 背景:产品设计一个批量导出的功能,需要将生成的多个excel打成压缩包导出。 解决方案:因为我们之前项目的单个Excel导出都是用的easyexcel所以我这边还是希望用这个工具去生成excel,然后zip流导出。 探索过程...
  • 非API,是使用Excel计算为XML模式的模版导出,可以在XML文件里做你想要的格式!里面有两程序,一是源码一是使用列子 源码:Foxconn 使用列子:webExcelTest 使用Excel模板导出对经常要导出Excel非常有用!关于...
  • /// DevExpress控件通用导出Excel,支持多个控件同时导出在同一个Sheet表或者分不同工作薄 /// eg:ExportToXlsx("test",true,"控件",gridControl1,gridControl2); /// 将gridControl1和gridControl2的数据一同导出...
  • vue 导出多个sheet表的excel文件

    千次阅读 2019-12-05 11:28:58
    1. <el-button @click="_export" ...导出</el-button> 2.methods里的方法 _export() { //需要导出的JSON数据 const data = { '基本信息': this.baseData(), '历史信息 ': this.history1(), }; ...
  • 最近的项目有一个导出汇总数据的要求,考虑到用户软件的差异,所以要分别导出xls以及xlsx并且打包提供下载,所以有了这博客,代码如下。 实现思路: 获取需要导出的数据; 生成对应的xls、xlsx文件流; 生成...
  • 最近在搞table2Excel导出文件,请问: 1.是否支持多个table导出到同一个excel的同一个sheet中呢?怎么做呢? 2.导出的文件类型可以根据自己需要更改吗? 3.每一个tr或者td的背景色不同,导出的文件是否显示一样呢...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,811
精华内容 1,124
关键字:

excel导出多个文件