- 浏览: 556040 次
- 性别:
文章分类
- 全部博客 (337)
- WEB前端@HTML (4)
- WEB前端@CSS (5)
- WEB前端@javascript (31)
- WEB前端@DHTML (8)
- WEB前端@jQuery (3)
- WEB前端@Flex4 (19)
- WEB前端@BootStrap3 (21)
- 数据交换@JSON (1)
- 模板标签@JSTL (1)
- 模板标签@Thymeleaf (1)
- 模板标签@XSL-FO (3)
- WEB后台@JavaSE (75)
- WEB后台@JAX-WS (27)
- WEB后台@HttpClient (0)
- WEB后台@SSO (2)
- 框架@Spring3 (3)
- 框架@spring_MVC (8)
- 框架@Hibernate (26)
- 框架@play framework (18)
- 框架@sl4j (4)
- 数据库@ (2)
- 数据库@JDBC (0)
- 服务器@Linux (14)
- 服务器@Tomcat (2)
- 第三方jar@dom4j (1)
- 第三方jar@POI (2)
- 第三方jar@CXF (5)
- 项目管理@Maven (22)
- 项目管理@SVN (1)
- 缓存管理@ehcache (1)
- 系统设计@设计模式 (10)
- 单元测试@JunitTest (1)
- 开发工具 (3)
- BUG收录 (1)
- 学习之路 (6)
- 面试之道 (1)
- 我的项目 (2)
最新评论
-
superich2008:
logback配置文件的改动会导致应用重新加载,多改动几次后就 ...
Chapter 3: Logback configuration -
chenzhihui:
不是可以在log4j中配置以控制台或者文件方式保存日志的?
play记录日志 -
smilease:
很棒,正缺这个,非常感谢
bootstrap3-typeahead 自动补全 -
guangling13345:
[size=x-small][/size]
二级联动菜单 -
jacksondesign:
有,和YAML的格式有关,不知道有没有什么好的YAML格式的验 ...
(四)play之yabe项目【页面】
需求描述:
1.导出数据量约30-50W
2.提供手动即时生成数据和自动生成数据(直接提供下载)
页面
一个“手动导出”按钮,点击后台运行代码生成数据并通过outputstream返回给浏览器。
缺点在于生成数据非常耗时(查询数据库,过滤不合法的数据,汇率转换,查询关联表信息等),最耗时的地方:比如,查询到10W条数据,过滤掉2W条,之后会循环剩下的8W条数据,每次循环都去查询数据库获取某些信息,效率很低。【一次性将数据都查询出来放内存中?分几次查询数据,第一次查询一批,需要时从这批从获取,如果没有再查询一批数据出来,这样能够提高效率呢?】
一个“自动导出”按钮,点击将从数据库中查询出已经由定时任务生成好的数据,直接下载。
涉及到几个知识点:定时任务采用quartZ实现任务的促发。经过数据查询、过滤、计算等操作后,将数据写入Sheet,此时Workbook对象已经算是完成数据填充了。这是将Workbook对象写入到一个流中,再将此流转换为字节数组,再将字节数组转换为字符串,这时就需要注意了,操作字符串难免不涉及编码的问题。最开始没有对字符串进行编码,直接存入数据库,下载的时候直接从数据库中查询出来,转换为流,结果下载的数据使用excel无法打开。最后,通过设置字符串的编码解决了问题。存入数据库时转为UTF-8存入,读取后再使用UTF-8解码,再转为ISO8859-1编码,再转为流,向浏览器输出,这样才解决了excel的读取问题。【为什么不直接存对象呢?由于数据库中某张日志表有一个大文本字段足够存储数据,所以没有使用BLOB来存放大数据,也没有以对象的形式保存Workbook对象。其实在第一次下载后excel无法打开后,就考虑存储对象的方式完成数据存储,但是没成功,取出来的对象和本地对象的sid总是不一致,于是放弃了存对象的实现方式,项目时间紧,只好以最能想到的办法解决问题】
项目中遇到的另一个问题时,项目原来使用的是poi3.1-jar,版本较老了,而且不支持xlsx格式,而当前需求是数据量大,excel必须能容纳足够大的数据,所以引入了poi3.9版本。
这里想说的是,当项目中出现新老jar包的替换时,必须小心!引入poi3.9后发现,虽然能实现大数据的存储(50W),约20M,但是原来的excel导出全部用的poi3.1实现的,由于3.1中某些方法在3.9中根本就没有了,只好回去修改原来的代码,项目中一共10多个导出,改得我痛苦。。。
而且,一旦确定要进行jar包的升级,选择一个既能支持当前需求,又能最大限度兼容老版本的版本是最合适的,不然,将陡然增加工作量!
以下是POI3.9导出的部分代码和quartz的配置
<bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTrigger_07"/> </list> </property> <property name="configLocation" value="classpath:config/quartz.properties"/> </bean> <bean id="cronTrigger_07" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="jobDetail_07"/> <!--每月1号0点开始每隔5分钟触发一次任务--> <property name="cronExpression" value="0 0/5 0 1 * ?"/> </bean> <bean id="jobDetail_07" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="xxxService"/> <property name="targetMethod" value="generateExcelDatas"/> </bean> <bean id="xxxService" class="xxx.xxx.serviceImpl" autowire="byName" lazy-init="true"> </bean>
创建Workbook对象,要导出xlsx格式,需要使用XSSFWorkbook,而数据量大又不想让内存溢出的话,就用Workbook workbook = new SXSSFWorkbook(1000);指定一定大小的缓冲区,当容量慢时,将清除一些对象出去,始终维持一定的内存暂用空间,不会发生溢出。
//**创建工作薄,工作表*//* Workbook workbook = new SXSSFWorkbook(1000); Sheet sheet = createSheet(workbook,businessType);
public Sheet createSheet(Workbook workbook,String businessType) { Sheet sheet = workbook.createSheet(); if("0".equals(businessType) || "1".equals(businessType)){ if("0".equals(businessType)) { workbook.setSheetName(0, "XXX清单"); } else { workbook.setSheetName(0, "YYY清单"); } sheet.setColumnWidth((short) 0, (short) (35.7*50));// sheet.setColumnWidth((short) 1, (short) (35.7*120));// sheet.setColumnWidth((short) 2, (short) (35.7*120));// sheet.setColumnWidth((short) 3, (short) (35.7*120));// sheet.setColumnWidth((short) 4, (short) (35.7*160));// sheet.setColumnWidth((short) 5, (short) (35.7*160));// sheet.setColumnWidth((short) 6, (short) (35.7*180));// sheet.setColumnWidth((short) 7, (short) (35.7*120));// sheet.setColumnWidth((short) 8, (short) (35.7*180));// sheet.setColumnWidth((short) 9, (short) (35.7*90));// sheet.setColumnWidth((short) 10, (short) (35.7*100));// sheet.setColumnWidth((short) 11, (short) (35.7*100));// sheet.setColumnWidth((short) 12, (short) (35.7*100));// } else if("9".equals(businessType)){ workbook.setSheetName(0, "ZZZ清单"); sheet.setColumnWidth((short) 0, (short) (35.7*50));// sheet.setColumnWidth((short) 1, (short) (35.7*280));// sheet.setColumnWidth((short) 2, (short) (35.7*120));// sheet.setColumnWidth((short) 3, (short) (35.7*120));// sheet.setColumnWidth((short) 4, (short) (35.7*100));// sheet.setColumnWidth((short) 5, (short) (35.7*180));// sheet.setColumnWidth((short) 6, (short) (35.7*120));// sheet.setColumnWidth((short) 7, (short) (35.7*180));// sheet.setColumnWidth((short) 8, (short) (35.7*90));// sheet.setColumnWidth((short) 9, (short) (35.7*100));// sheet.setColumnWidth((short) 10, (short) (35.7*100));// sheet.setColumnWidth((short) 11, (short) (35.7*100));// } return sheet; }
表格样式
Map<String,CellStyle> styleMap = getPaymentDatasStyles(workbook); public Map<String, CellStyle> getPaymentDatasStyles(Workbook workbook) { Map<String,CellStyle> styles = new HashMap<String,CellStyle>(); Font fontHead = workbook.createFont(); fontHead.setFontName("宋体"); // 字体 fontHead.setFontHeightInPoints((short)16); //字号 fontHead.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //加粗 Font fontBody = workbook.createFont(); fontBody.setFontName("宋体"); // 字体 fontBody.setFontHeightInPoints((short)10); //字号 Font fontMark = workbook.createFont(); fontMark.setFontName("宋体"); // 字体 fontMark.setFontHeightInPoints((short)12); //字号 /**首行样式*/ CellStyle cellStyleHead = workbook.createCellStyle(); cellStyleHead.setAlignment(CellStyle.ALIGN_CENTER); cellStyleHead.setVerticalAlignment(CellStyle.VERTICAL_CENTER); cellStyleHead.setFont(fontHead); /**第2行样式*/ CellStyle cellStyleUnit = workbook.createCellStyle(); cellStyleUnit.setAlignment(CellStyle.ALIGN_CENTER); cellStyleUnit.setBorderBottom(CellStyle.BORDER_MEDIUM); cellStyleUnit.setFont(fontBody); /**列标题样式*/ CellStyle cellStyleTitle = workbook.createCellStyle(); cellStyleTitle.setBorderBottom(CellStyle.BORDER_THIN); cellStyleTitle.setBorderLeft(CellStyle.BORDER_THIN); cellStyleTitle.setBorderRight(CellStyle.BORDER_THIN); cellStyleTitle.setBorderTop(CellStyle.BORDER_THIN); cellStyleTitle.setAlignment(CellStyle.ALIGN_CENTER); cellStyleTitle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); cellStyleTitle.setFont(fontBody); cellStyleTitle.setWrapText(true); /**正文样式*/ CellStyle cellStyleBody = workbook.createCellStyle(); cellStyleBody.setBorderBottom(CellStyle.BORDER_THIN); cellStyleBody.setBorderLeft(CellStyle.BORDER_THIN); cellStyleBody.setBorderRight(CellStyle.BORDER_THIN); cellStyleBody.setBorderTop(CellStyle.BORDER_THIN); cellStyleBody.setAlignment(CellStyle.ALIGN_CENTER); cellStyleBody.setFont(fontBody); /**正文样式二*/ CellStyle cellStyleBodyDecimal = workbook.createCellStyle(); cellStyleBodyDecimal.setBorderBottom(CellStyle.BORDER_THIN); cellStyleBodyDecimal.setBorderLeft(CellStyle.BORDER_THIN); cellStyleBodyDecimal.setBorderRight(CellStyle.BORDER_THIN); cellStyleBodyDecimal.setBorderTop(CellStyle.BORDER_THIN); cellStyleBodyDecimal.setAlignment(CellStyle.ALIGN_RIGHT); cellStyleBodyDecimal.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00")); cellStyleBodyDecimal.setFont(fontBody); /**正文样式三*/ CellStyle cellStyleBodyInt = workbook.createCellStyle(); cellStyleBodyInt.setBorderBottom(CellStyle.BORDER_THIN); cellStyleBodyInt.setBorderLeft(CellStyle.BORDER_THIN); cellStyleBodyInt.setBorderRight(CellStyle.BORDER_THIN); cellStyleBodyInt.setBorderTop(CellStyle.BORDER_THIN); cellStyleBodyInt.setAlignment(CellStyle.ALIGN_RIGHT); cellStyleBodyInt.setDataFormat(HSSFDataFormat.getBuiltinFormat("0")); cellStyleBodyInt.setFont(fontBody); /**备注*/ CellStyle cellStyleMark = workbook.createCellStyle(); cellStyleMark.setFont(fontMark); styles.put("HEAD", cellStyleHead); styles.put("UNIT", cellStyleUnit); styles.put("TITLE", cellStyleTitle); styles.put("BODY", cellStyleBody); styles.put("BODY_DECIMAL", cellStyleBodyDecimal); styles.put("BODY_INT", cellStyleBodyInt); styles.put("MARK", cellStyleMark); return styles; }
将数据往sheet中写
putDatas2Xlsx(sheet,styleMap,list,type,locations,allExchRate); public void putDatas2Xlsx(Sheet sheet, Map<String, CellStyle> styleMap,List<ScmsDocFeeDetailVo> detailList,String businessType, Map<String,String> locations,Map<String,BigDecimal> allExchRate) throws Exception { final String agentCodeForGD = "aaa"; //**********************列标题***************************//* String headName = ""; String [] headList = null; headName = "XXX清单(03)"; if("0".equals(businessType)){ headList = new String[]{}; }else if("1".equals(businessType)){ headName = "XXX清单(02)"; headList = new String[]{}; } else if("9".equals(businessType)){ headName = "XXX清单(01)"; headList = new String[]{}; } ScmsDocFeeDetailVo vo = null; String risk = ""; String handler1CodeName = ""; Row row = null; Cell cell = null; CellStyle cellStyleHead = styleMap.get("HEAD"); CellStyle cellStyleUnit = styleMap.get("UNIT"); CellStyle cellStyleTitle = styleMap.get("TITLE"); CellStyle cellStyleBody = styleMap.get("BODY"); CellStyle cellStyleBodyDecimal = styleMap.get("BODY_DECIMAL"); CellStyle cellStyleBodyInt = styleMap.get("BODY_INT"); CellStyle cellStyleMark = styleMap.get("MARK"); //创建第一行 标题 int rowNum = 0; row = sheet.createRow(rowNum++);//创建行 cell = row.createCell(0); cell.setCellValue(headName); cell.setCellStyle(cellStyleHead); //合并单元格 if("0".equals(businessType) || "1".equals(businessType)) { sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 8)); } else { sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 6)); } //创建第二行 单位 row = sheet.createRow(rowNum++); row.setHeight((short)400); for(int i=0;i<headList.length;i++){ cell = row.createCell(i); cell.setCellStyle(cellStyleUnit); if(("0".equals(businessType) && i==10) || ("1".equals(businessType) && i==10) ||("9".equals(businessType) && i==9)){ cell.setCellValue("单位:元"); } } if("0".equals(businessType)) { sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 7)); } else if("1".equals(businessType)) { sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 8)); } //第三行 列标题 row = sheet.createRow(rowNum++); for(int i=0;i<headList.length;i++){ cell = row.createCell(i); cell.setCellStyle(cellStyleTitle); cell.setCellValue(headList[i]); } row.setHeightInPoints((short)33);//行高 //** 打印主体信息列表------------------------------------------*//* int detailCount = detailList.size(); for(int i = 0;i<detailCount;i++){ vo = detailList.get(i); if("0".equals(businessType) || "1".equals(businessType)) { handler1CodeName =codeService.translateCode("UserCode", vo.getHandler1Code(), "", ""); vo.setInsuredName(handler1CodeName); vo.setAgentCode(agentCodeForGD); } /**汇率转换*/ if(vo.getCurrency()!=null && !"".equals(vo.getCurrency().trim())) { BigDecimal exchRate = allExchRate.get(vo.getCurrency().trim()); vo.setCostFee(vo.getCostFee().multiply(exchRate).setScale(2, RoundingMode.HALF_UP)); } if(vo.getPaidPremium()==null || vo.getPaidPremium().equals("") || vo.getPaidPremium().compareTo(BigDecimal.ZERO)==0) { vo.setCostRate(BigDecimal.ZERO); } else { vo.setCostRate(vo.getCostFee().divide(vo.getPaidPremium(), 2, RoundingMode.HALF_UP)); } //开始循环生成EXCEL行数据 short colNum = 0;//初始化CELL下标 row = sheet.createRow(rowNum++);//创建行 row.setHeight((short)400); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_NUMERIC); cell.setCellStyle(cellStyleBodyInt); cell.setCellValue((i+1)); //清单 if("0".equals(businessType) || "1".equals(businessType)){ cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); String preComCode = vo.getComCode().substring(0, 4); String addressName = locations.get(preComCode); if(addressName!=null) { cell.setCellValue(addressName); } else { cell.setCellValue(preComCode); } cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); cell.setCellValue(vo.getComCode()); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); handler1CodeName=codeService.translateCode("UserCode", vo.getHandler1Code(), "PUB", ""); cell.setCellValue(handler1CodeName); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); cell.setCellValue(agentCodeForGD); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); cell.setCellValue(vo.getSellerNo()); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); cell.setCellValue(vo.getCertiNo()); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); if(vo.getStartDate()!=null && !vo.getStartDate().equals("")) { cell.setCellValue((new SimpleDateFormat("yyyy-MM-dd")).format(vo.getStartDate())); } else { cell.setCellValue(""); } cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); risk=codeService.translateCode("RiskCode", vo.getRiskCode(), "", ""); cell.setCellValue(risk); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); cell.setCellValue(vo.getRiskCode()); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_NUMERIC); cell.setCellStyle(cellStyleBodyDecimal); cell.setCellValue(vo.getPaidPremium().doubleValue()); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_NUMERIC); cell.setCellStyle(cellStyleBodyDecimal); cell.setCellValue(vo.getCostFee().doubleValue()); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_NUMERIC); cell.setCellStyle(cellStyleBodyDecimal); cell.setCellValue(vo.getCostRate().doubleValue()); }else //手续费清单 if("9".equals(businessType)){ cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); cell.setCellValue(vo.getAgentName()); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); cell.setCellValue(vo.getAgentCode()); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); String preComCode = vo.getComCode().substring(0, 4); String addressName = locations.get(preComCode); if(addressName!=null) { cell.setCellValue(addressName); } else { cell.setCellValue(preComCode); } cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); cell.setCellValue(vo.getComCode()); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); cell.setCellValue(vo.getCertiNo()); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); if(vo.getStartDate()!=null) { cell.setCellValue((new SimpleDateFormat("yyyy-MM-dd")).format(vo.getStartDate())); } else{ cell.setCellValue(""); } cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); //调用服务转换代码为姓名【在循环中每次调用服务进行查询,导致性能下降很多,这里必须进行优化处理。可以一次性查询所有需要转换的数据到内存中!!!】 risk=codeService.translateCode("RiskCode", vo.getRiskCode(), "", ""); cell.setCellValue(risk); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellStyle(cellStyleBody); cell.setCellValue(vo.getRiskCode()); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_NUMERIC); cell.setCellStyle(cellStyleBodyDecimal); cell.setCellValue(vo.getPaidPremium().doubleValue()); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_NUMERIC); cell.setCellStyle(cellStyleBodyDecimal); cell.setCellValue(vo.getCostFee().doubleValue()); cell = row.createCell(colNum++); cell.setCellType(Cell.CELL_TYPE_NUMERIC); cell.setCellStyle(cellStyleBodyDecimal); cell.setCellValue(vo.getCostRate().doubleValue()); } } //备注 row = sheet.createRow(rowNum++);//创建行 row.setHeight((short)400); cell = row.createCell(0); cell.setCellStyle(cellStyleMark); cell.setCellValue("备注:"); //序号 }
保存数据到数据库
OutputStream os = null; ByteArrayOutputStream baos = null; try{ os = new ByteArrayOutputStream(); workbook.write(os); baos = (ByteArrayOutputStream) os; //编码转换-非常必须一定要这样做! String encodeStr = baos.toString("ISO-8859-1"); encodeStr = java.net.URLEncoder.encode(encodeStr, "UTF-8"); //现在可以直接存储encodeStr 字符串到数据库中了! //.......
从数据库中取数据并返回给浏览器下载
public void exportXlsxFromDB()throws Exception { /**基于页面输入信息查询数据*/ String comCode = ServletActionContext.getRequest().getParameter("comCode"); String paymentYear = ServletActionContext.getRequest().getParameter("paymentYear"); String paymentMonth = ServletActionContext.getRequest().getParameter("paymentMonth"); String paymentDate = paymentYear+"-"+paymentMonth; String riskType = ServletActionContext.getRequest().getParameter("risk"); String businessType = ServletActionContext.getRequest().getParameter("businessType"); long start = System.currentTimeMillis(); logger.info("开始导出机构"+comCode+"及其下级"+paymentDate+"月的实收数据,导出险类:"+riskType+",业务类型:"+businessType); //查询数据 Table table = tableService.getExcelDataFromDB(paymentDate, comCode, riskType, businessType); if(table==null) { //数据库无数据 throw new BusinessException(paymentDate+"数据尚未定时生成,请手动生成本次数据。【提示:生成数据时,如果数据量较大,将比较耗时,请耐心等待...】"); } String sheetName = interfaceLog.getResponsetype(); String excelDatas = interfaceLog.getResponsexml(); //还原数据---非常关键&&重要加必须 excelDatas = java.net.URLDecoder.decode(excelDatas, "UTF-8"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); baos.write(excelDatas.getBytes("ISO-8859-1")); //设置返回内容类型 this.getResponse().reset(); this.getResponse().setContentType("application/x-msdownload"); this.getResponse().setHeader("Content-Disposition","attachment; filename="+new String(sheetName.getBytes("gb2312"),"ISO-8859-1")+paymentDate+".xlsx"); OutputStream outStream = null; try{ outStream = this.getResponse().getOutputStream(); baos.writeTo(outStream); outStream.flush(); }catch(Exception e){ log.debug(e.getMessage()); e.printStackTrace(); throw new ScmsBusinessException("导出异常,请联系管理员!",e); }finally{ if(outStream!=null) { outStream.close(); } if(baos!=null) { baos.close(); } } }
相关推荐
首先,要进行大数据Excel导出,你需要安装支持此操作的库。在.NET框架中,最常用的库是EPPlus,这是一个强大的NuGet包,能够高效地读写Excel(.xlsx)文件。安装EPPlus可以通过Visual Studio的NuGet包管理器进行,...
该项目为Python编写的用于大数据中心Excel数据导出方法设计,包含73个文件,涵盖55个xlsx电子表格、5个json数据文件、5个Python源代码文件、4个xml配置文件、1个IntelliJ IDEA项目配置文件、1个Markdown文档、1个...
用2003导出大量数据时会报数据异常,原因是2003...现在2007-2013是可以处理大数据的,但是有时会出现内存溢出的情况,因为数据过多,内存被写满了,所以内存溢出。本案例亲测可以导出280W以上,只要磁盘够大就可以导出
本教程将详细讲解如何使用Java POI库实现大数据导出至Excel,并将其压缩成ZIP文件,以及如何进行前台到后台的调用。 首先,我们需要了解Java POI库的基本用法。POI提供了HSSF和XSSF两个API,分别用于处理老版本的...
本项目“poi多线程大数据导出excel文件”提供了一个解决方案,利用多线程来提高Excel的大数据导出效率。 Apache POI 3.1版本是较早的版本,而项目中使用了更新的4.1版本,这意味着它可能利用了更多优化和新特性。在...
总结来说,优化C#导出大数据到Excel的方法主要包括分批处理、禁用不必要的功能、批量写入、利用模板和使用第三方库等。通过这些方式,可以在保证数据完整性的前提下,显著提升导出效率,满足大数据量的导出需求。
以下是一个简单的示例代码,展示如何使用SXSSFWorkbook导出大数据到Excel: ```java import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.ss.usermodel.*; // 创建SXSSFWorkbook实例,...
在VC++环境中,导出大数据到Excel是一种常见的需求,尤其在数据分析、报表生成等领域。本教程将详细介绍如何使用Microsoft Office的自动化接口(Automation Interface)来实现这一功能,主要涉及的知识点包括VC++...
在Java开发中,处理大数据导出到Excel是一个常见的需求,特别是在数据分析、报表生成以及数据交换等场景。"javaExcel大数据导出"这个话题涉及到的主要知识点包括:Java与Excel的交互、大数据处理策略、性能优化以及...
java导出excel大数据,由于excel本身sheet页存储条数的限制,方案一般有:1、导出多个excel,然后将多个excel压缩为zip包,导出;2、导出可以通过excel打开的文本文件;3、导出csv文件(简单格式的)。 本样例以导出...
jxl实现excel大数据导出,26000条记录,测试导出时间是19s,例子不算复杂,没有excel样式的处理,可以自己扩展哈,有数据库文件,部署即可看到效果!!! 有三个功能:代码构建数据的导出、数据库数据的导出(从配置...
使用 DBGridEh 控件可以快速导出大量数据到 Excel 中,而不需要使用 OLE 自动化来一个一个地将数据写入到 Excel 中。 DBGridEh 控件提供了一个 SaveDBGridEhToExportFile 方法,可以将数据快速导出到 Excel 中。 ...
在Java开发中,Apache POI 是一个非常流行的库,用于读写Microsoft Office格式的文件,尤其是Excel(.xlsx和.xls)文件。当我们需要处理大量数据...正确理解和运用这些技巧,将使我们在处理大数据Excel导出时游刃有余。
使用poi导出excel支持xls、xlsx格式大数据导出java工具类,支持同一个单元格不同文本格式。找了好久,加上自己修改后,调试通过,发布出来分享,(调整student类位置)包含所需jar包,工具类,使用示例
在处理大数据时,直接使用像Apache POI或JXL这样的库来一次性导出所有数据到Excel文件可能会遇到内存溢出问题。这是因为这些库在内存中构建整个工作簿模型,当数据量过大时,所需内存会迅速增加,可能导致Java虚拟机...
支持100万条数据导出,经测试通过。 支持100万条数据导出,经测试通过。 支持100万条数据导出,经测试通过。
POI百万级大数据量EXCEL导出 - 请叫我猿叔叔的博客 - CSDN博客.htm
本篇文章将详细介绍如何使用Apache POI的不同API来实现Excel数据导出,并着重探讨适用于大数据量场景的优化策略。 首先,Apache POI提供了三种主要的接口来操作Excel文件:HSSF(Horrible Spreadsheet Format)用于...
应客户要求,导出数据库中的数据为Excel,只在一个Sheet中,Excel中的内容要与数据库里的内容一致(主要针对日期型数据)。 由于之前接触过POI,对POI的一些特性还是有一定的了解的,因此顺其自然的用POI去解决这...
在Java编程环境中,处理大数据并将其导出到Excel文件是一项常见的任务,特别是在数据分析、报表生成以及数据交换等场景。"javaExcel大数据导出.zip"这个压缩包可能包含了一个或多个示例项目,演示了如何在Java中高效...