本文实例为大家分享了java导出百万以上数据的excel文件,供大家参考,具体内容如下
1.传统的导出方式会消耗大量的内存,2003每个sheet页最多65536条数据,2007每个sheet页可以达到100万条数据以上,2007会在生成Workbook时清理数据,所以2007导出量更大;
2.可以导出多个excel文件到某个目录中,然后打包下载;
3.导出excel格式的xml文件,这种方式可以分批导出数据,适用于大批量数据的导出,以下简单介绍这种方式:
代码如下:
package com.epay.utils; /** * 大数据量导出成EXCEL或XML * @author qad * 2017-04-22 */ import java.io.BufferedOutputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class Test { public static void main(String[] args) { StringBuffer sb = new StringBuffer(); try { DataOutputStream rafs = new DataOutputStream( new BufferedOutputStream(new FileOutputStream(new File( "d://test.xls")))); sb.append("<?xml version=\"1.0\" encoding=\"GBK\" ?>"); sb.append("\n"); sb.append("<?mso-application progid=\"Excel.Sheet\"?>"); sb.append("\n"); sb.append("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\""); sb.append("\n"); sb.append(" xmlns:o=\"urn:schemas-microsoft-com:office:office\""); sb.append("\n"); sb.append(" xmlns:x=\"urn:schemas-microsoft-com:office:excel\""); sb.append("\n"); sb.append(" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\""); sb.append("\n"); sb.append(" xmlns:html=\"http://www.w3.org/TR/REC-html40\">"); sb.append("\n"); sb.append("<DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\"> "); sb.append("\n"); sb.append(" <Styles>\n"); sb.append(" <Style ss:ID=\"Default\" ss:Name=\"Normal\">\n"); sb.append(" <Alignment ss:Vertical=\"Center\"/>\n"); sb.append(" <Borders/>\n"); sb.append(" <Font ss:FontName=\"宋体\" x:CharSet=\"134\" ss:Size=\"12\"/>\n"); sb.append(" <Interior/>\n"); sb.append(" <NumberFormat/>\n"); sb.append(" <Protection/>\n"); sb.append(" </Style>\n"); sb.append(" </Styles>\n"); int sheetcount = 0; int recordcount = 65535; int currentRecord = 0; int total = 100000; int col = 20; sb.append("<Worksheet ss:Name=\"Sheet0\">"); sb.append("\n"); sb.append("<Table ss:ExpandedColumnCount=\"" + col + "\" ss:ExpandedRowCount=\"" + total + "\" x:FullColumns=\"1\" x:FullRows=\"1\">"); sb.append("\n"); for (int i = 0; i < total; i++) { if ((currentRecord == recordcount || currentRecord > recordcount || currentRecord == 0) && i != 0) {// 一个sheet写满 currentRecord = 0; rafs.write(sb.toString().getBytes()); sb.setLength(0); sb.append("</Table>"); sb.append("<WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">"); sb.append("\n"); sb.append("<ProtectObjects>False</ProtectObjects>"); sb.append("\n"); sb.append("<ProtectScenarios>False</ProtectScenarios>"); sb.append("\n"); sb.append("</WorksheetOptions>"); sb.append("\n"); sb.append("</Worksheet>"); sb.append("<Worksheet ss:Name=\"Sheet" + i / recordcount + "\">"); sb.append("\n"); sb.append("<Table ss:ExpandedColumnCount=\"" + col + "\" ss:ExpandedRowCount=\"" + recordcount + "\" x:FullColumns=\"1\" x:FullRows=\"1\">"); sb.append("\n"); } sb.append("<Row>"); for (int j = 0; j < col; j++) { System.out.println(i); sb.append("<Cell><Data ss:Type=\"String\">111</Data></Cell>"); sb.append("\n"); } sb.append("</Row>"); if (i % 5000 == 0) { rafs.write(sb.toString().getBytes()); rafs.flush(); sb.setLength(0); } sb.append("\n"); currentRecord++; } rafs.write(sb.toString().getBytes()); sb.setLength(0); sb.append("</Table>"); sb.append("<WorksheetOptions xmlns=\"urn:schemas-microsoft-com:office:excel\">"); sb.append("\n"); sb.append("<ProtectObjects>False</ProtectObjects>"); sb.append("\n"); sb.append("<ProtectScenarios>False</ProtectScenarios>"); sb.append("\n"); sb.append("</WorksheetOptions>"); sb.append("\n"); sb.append("</Worksheet>"); sb.append("</Workbook>"); sb.append("\n"); rafs.write(sb.toString().getBytes()); rafs.flush(); rafs.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
导出xml文件之后直接修改后缀名为.xlsx就可以直接打开,弊端:无法导出.xls格式的excel文件.以上只是一种简单想法,留待以后具体实现.
扩展:既然可以使用xml文件导出excel,那么导出csv文件之后也可以直接改后缀名为.xls,目前只是一种想法,尚未证实可行性.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
通过官方提供的插件我们可以将图表中数据导出为常见的 Excel 数据文件(.csv 和 .xls),下面是一个实例: 使用方法 额外引入插件即可,我们提供的版本已经解决了中文乱码问题,详见 社区帖子 <!-- 基本的文件 --> <script src="http://code.highcharts.com.cn/highcharts/highcharts.js"></script> <scrip
本文向大家介绍Java中excel表数据的批量导入方法,包括了Java中excel表数据的批量导入方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Java中excel表数据的批量导入,供大家参考,具体内容如下 首先看下工具类: 再看下from.jsp页面 主界面jsp 页面点击的效果是,点击导入会跳入from.jsp页面 再看controller层 service层 以上就是本文
本文向大家介绍java使用POI批量导入excel数据的方法,包括了java使用POI批量导入excel数据的方法的使用技巧和注意事项,需要的朋友参考一下 一、定义 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 二、所需jar包: 三、简单的一个读取excel的demo 1、读取文件方法 2、测
本文向大家介绍layui 上传文件_批量导入数据UI的方法,包括了layui 上传文件_批量导入数据UI的方法的使用技巧和注意事项,需要的朋友参考一下 使用layui的文件上传组件,可以方便的弹出文件上传界面。 效果如下: 点击【批量导入】按钮调用js脚本importData(config)就可以实现数据上传到服务器。 脚本: 以上这篇layui 上传文件_批量导入数据UI的方法就是小编分享给大家
本文向大家介绍C#导出数据到Excel文件的方法,包括了C#导出数据到Excel文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#导出数据到Excel文件的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。
问题内容: 情况 我正在寻找一种方法来批量调整大小约为1500万个不同文件类型的图像,以适应特定的边框分辨率(在这种情况下,图像不能大于1024 * 1024),而不会扭曲图像,因此保留正确的宽高比。所有文件当前都位于我具有sudo访问权限的Linux服务器上,因此,如果我需要安装任何东西,我很好。 我尝试过的事情 在尝试使用Windows下的某些工具(Adobe Photoshop和其他工具)后