Java导出数据为EXCEL的两种方式JXL和POI
JXL和POI导出数据方式的比较
POI支持excel2003和2007,而jxl只支持excel2003。
下面为测试代码:
- public class TestCondition {
- /**
- * 生成的记录条数
- */
- public static final int RECORD_COUNT = 21000;
- /**
- * 模板文件
- */
- public static final String TEMPLATE_FILE = "E:/MyKernelPlatformWorkspace/Template/query_order.xls";
- /**
- * JXL生成文件位置
- */
- public static final String JXL_TARGET_FILE_NAME = "E:/MyKernelPlatformWorkspace/Template/target/jxl_order.xls";
- /**
- * POI生成文件位置
- */
- public static final String POI_TARGET_FILE_NAME = "E:/MyKernelPlatformWorkspace/Template/target/poi_order.xls";
- /**
- * JXL临时文件位置
- */
- public static final String JXL_TEMP_DIR = "E:/MyKernelPlatformWorkspace/Template/temp";
- }
然后在此测试条件下编写JXL和POI的测试类,首先是JXL的
- public class JXLExcel {
- /**
- * 起始行
- */
- private static final int start_row = 3;
- private WorkbookSettings settings;
- private File target;
- public JXLExcel() {
- this.settings = new WorkbookSettings();
- //设定JXL在生成excel文件时使用临时文件
- settings.setUseTemporaryFileDuringWrite(true);
- settings.setTemporaryFileDuringWriteDirectory(new File(TestCondition.JXL_TEMP_DIR));
- this.target = new File(TestCondition.JXL_TARGET_FILE_NAME);
- }
- public void execute() throws Exception {
- // 读入模板文件
- Workbook template = Workbook.getWorkbook(new File(TestCondition.TEMPLATE_FILE));
- WritableWorkbook worbook = Workbook.createWorkbook(target, template, settings);
- // 获取第一个sheet
- WritableSheet sheet = worbook.getSheet(0);
- Random random = new Random();
- // 循环写入数据
- for(int i = 0;i < TestCondition.RECORD_COUNT;i++) {
- int row = i + start_row;
- sheet.insertRow(row);
- Label col1 = new Label(0, row, String.valueOf(i + 1));
- Label col2 = new Label(1, row, String.valueOf(random.nextLong()));
- Label col3 = new Label(2, row, String.valueOf(random.nextLong()));
- Label col4 = new Label(3, row, "merchant" + (i +1));
- jxl.write.Number col5 = new Number(4, row, random.nextDouble());
- jxl.write.Number col6 = new Number(5, row, random.nextDouble());
- jxl.write.Number col7 = new Number(6, row, random.nextDouble());
- jxl.write.Number col8 = new Number(7, row, random.nextDouble());
- Label col9 = new Label(8, row, String.valueOf(random.nextLong()));
- Label col10 = new Label(9, row, "PAY");
- Label col11 = new Label(10, row, "POS");
- Label col12 = new Label(11, row, "2010-09-03 12:45:13");
- Label col13 = new Label(12, row, "2010-09-09 12:45:13");
- Label col14 = new Label(13, row, "interface" + (i + 1));
- Label col15 = new Label(14, row, "18701001830");
- Label col16 = new Label(15, row, "ccbc");
- Label col17 = new Label(16, row, String.valueOf(random.nextLong()));
- Label col18 = new Label(17, row, String.valueOf(random.nextLong()));
- jxl.write.Number col19 = new Number(18, row, random.nextDouble());
- jxl.write.Number col20 = new Number(19, row, random.nextDouble());
- Label col21 = new Label(20, row, "payer" + (i + 1));
- Label col22 = new Label(21, row, String.valueOf(random.nextLong()));
- Label col23 = new Label(22, row, "192.168.1.1");
- Label col24 = new Label(23, row, "192.168.1.1");
- sheet.addCell(col1);
- sheet.addCell(col2);
- sheet.addCell(col3);
- sheet.addCell(col4);
- sheet.addCell(col5);
- sheet.addCell(col6);
- sheet.addCell(col7);
- sheet.addCell(col8);
- sheet.addCell(col9);
- sheet.addCell(col10);
- sheet.addCell(col11);
- sheet.addCell(col12);
- sheet.addCell(col13);
- sheet.addCell(col14);
- sheet.addCell(col15);
- sheet.addCell(col16);
- sheet.addCell(col17);
- sheet.addCell(col18);
- sheet.addCell(col19);
- sheet.addCell(col20);
- sheet.addCell(col21);
- sheet.addCell(col22);
- sheet.addCell(col23);
- sheet.addCell(col24);
- }
- worbook.write();
- worbook.close();
- }
- }
执行Main函数
- public class JXLMain {
- /**
- * 描述:
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- long jxlStart = System.currentTimeMillis();
- JXLExcel jxl = new JXLExcel();
- jxl.execute();
- long jxlStop = System.currentTimeMillis();
- System.out.println("jxl takes : " + (jxlStop - jxlStart)/1000 + " seconds.");
- }
然后是POI的
public class POIExcel {
- /**
- * 起始行
- */
- private static final int start_row = 3;
- public void execute() throws Exception {
- // 读入模板文件
- InputStream is = new FileInputStream(TestCondition.TEMPLATE_FILE);
- POIFSFileSystem poifsFileSystem = new POIFSFileSystem(is);
- HSSFWorkbook workbook = new HSSFWorkbook(poifsFileSystem);
- // 获取第一个sheet
- HSSFSheet sheet = workbook.getSheetAt(0);
- Random random = new Random();
- // 将模板的最后两行移动
- sheet.shiftRows(3, 4, TestCondition.RECORD_COUNT);
- OutputStream os = new FileOutputStream(
- TestCondition.POI_TARGET_FILE_NAME);
- // 循环写入数据
- for (int i = 0; i < TestCondition.RECORD_COUNT; i++) {
- int rowNum = i + start_row;
- HSSFRow row = sheet.createRow(rowNum);
- HSSFCell cell1 = row.createCell(0);
- cell1.setCellValue(i + 1);
- HSSFCell cell2 = row.createCell(1);
- cell2.setCellValue(String.valueOf(random.nextLong()));
- HSSFCell cell3 = row.createCell(2);
- cell3.setCellValue(String.valueOf(random.nextLong()));
- HSSFCell cell4 = row.createCell(3);
- cell4.setCellValue("merchant" + (i +1));
- HSSFCell cell5 = row.createCell(4);
- cell5.setCellValue(random.nextDouble());
- HSSFCell cell6 = row.createCell(5);
- cell6.setCellValue(random.nextDouble());
- HSSFCell cell7 = row.createCell(6);
- cell7.setCellValue(random.nextDouble());
- HSSFCell cell8 = row.createCell(7);
- cell8.setCellValue(random.nextDouble());
- HSSFCell cell9 = row.createCell(8);
- cell9.setCellValue(String.valueOf(random.nextLong()));
- HSSFCell cell10 = row.createCell(9);
- cell10.setCellValue("PAY");
- HSSFCell cell11 = row.createCell(10);
- cell11.setCellValue("POS");
- HSSFCell cell12 = row.createCell(11);
- cell12.setCellValue(new Date());
- HSSFCell cell13 = row.createCell(12);
- cell13.setCellValue(new Date());
- HSSFCell cell14 = row.createCell(13);
- cell14.setCellValue("interface" + (i + 1));
- HSSFCell cell15 = row.createCell(14);
- cell15.setCellValue("18701001830");
- HSSFCell cell16 = row.createCell(15);
- cell16.setCellValue("ccbc");
- HSSFCell cell17 = row.createCell(16);
- cell17.setCellValue(String.valueOf(random.nextLong()));
- HSSFCell cell18 = row.createCell(17);
- cell18.setCellValue(String.valueOf(random.nextLong()));
- HSSFCell cell19 = row.createCell(18);
- cell19.setCellValue(random.nextDouble());
- HSSFCell cell20 = row.createCell(19);
- cell20.setCellValue(random.nextDouble());
- HSSFCell cell21 = row.createCell(20);
- cell21.setCellValue("payer" + (i + 1));
- HSSFCell cell22 = row.createCell(21);
- cell22.setCellValue(String.valueOf(random.nextLong()));
- HSSFCell cell23 = row.createCell(22);
- cell23.setCellValue("192.168.1.1");
- HSSFCell cell24 = row.createCell(23);
- cell24.setCellValue("192.168.1.1");
- }
- workbook.write(os);
- os.close();
- }
执行Main函数
- public class POIMain {
- /**
- * 描述:
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- long jxlStart = System.currentTimeMillis();
- POIExcel poi = new POIExcel();
- poi.execute();
- long jxlStop = System.currentTimeMillis();
- System.out.println("poi takes : " + (jxlStop - jxlStart)/1000 + " seconds.");
- }
- }
转:http://tianwenbo.iteye.com/blog/1485654
Java导出数据为EXCEL的两种方式JXL和POI的更多相关文章
- mysql导出数据到excel的两种方式
使用第一种方式如果数据中有换行符的话会自动换行,但使用第二种方式就不会出现这种效果了.两种方式自己选择哈 1:select * from into outfile 'c:/Users/a.xls' t ...
- Java EXCEL导入的两种方式JXL和POI
Excel导入有两个方法:JXL 和POI 1.JXL解析Excel public class JxlReadExcel { /** * JXL解析Excel * @author Da ...
- java分段加载数据,循环和递归两种方式
package org.jimmy.autosearch2019.test; import java.util.ArrayList; public class Test20190328 { priva ...
- Delphi 导出数据至Excel的7种方法【转】
一; delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery): ...
- Delphi 导出数据至Excel的7种方法
一; delphi 快速导出excel uses ComObj,clipbrd; function ToExcel(sfilename:string; ADOQuery:TADOQuery):bool ...
- Java并发--线程间协作的两种方式:wait、notify、notifyAll和Condition
在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界 ...
- 遍历Map集合:java.util.Map.Entry、KeySet两种方式
遍历Map集合的两种方式: 1.用KeySet Map.keySet(),返回一个存放所有key的set集合,通过遍历集合,根据key值取出所有的value值. Map<String,Strin ...
- Android提交数据到服务器的两种方式四种方法
本帖最后由 yanghe123 于 2012-6-7 09:58 编辑 Android应用开发中,会经常要提交数据到服务器和从服务器得到数据,本文主要是给出了利用http协议采用HttpClient方 ...
- python利用mongodb上传图片数据 : GridFS 与 bson两种方式
利用mongodb保存图片通常有两种方法,一种是将图片数据转化为二进制作为字典的键值对进行保存,另一种是利用mongodb提供的GridFS进行保存,两者各有利弊.性能方面的优劣未曾测试,无法进行评价 ...
随机推荐
- ASP.net中网站访问量统计方法代码(在线人数,本月访问,本日访问,访问流量,累计访问)
一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间 (IP_DateTime),些表的信 ...
- 原生js 用正则实现removeclass hasclass getsclass addclass .
function getByClass(oParent,sClass){ if(oParent.getElementsByClassName){ return oParent.getElementsB ...
- 黄聪:WordPress 的 Hook 机制与原理(add_action、add_filter)
稍有接触过 WordPress 主题或插件制作修改的朋友,对 WordPress 的Hook机制应该不陌生,但通常刚接触WordPress Hook 的新手,对其运作原理可能会有点混乱或模糊.本文针对 ...
- SOA_环境安装系列1_Oracle SOA Suite11g安装总括(案例)
2015-01-01 Created By BaoXinjian
- HTML5 Web Storage概述
Web Storage html5新增功能 可以在客户端本地保存数据 之前是使用Cookies在客户端保存注入用户名等简单用户信息,但永久数据存在几个问题 大小:cookies大小被限制在4KB 带宽 ...
- 从源代码制作deb包的两种方法以及修改已有deb包(转载)
From:http://yysfire.github.io/linux/%E4%BB%8E%E6%BA%90%E4%BB%A3%E7%A0%81%E5%88%B6%E4%BD%9Cdeb%E5%8C% ...
- jdk与jre的区别
很多程序员已经干了一段时间java了依然不明白jdk与jre的区别.JDK就是Java Development Kit.简单的说JDK是面向开发人员使用的SDK,它提供了Java的开发环境和运行环境. ...
- 如何设置BIOS使服务器断电后再来电能自动开机
不同的主板及CMOS型号相对应的选项会有所不同,但我想应该不会差太多,一般都在[POWER MANAGEMENT SETUP]和[Integrated Peripherals]这两个选项中.下面介绍两 ...
- 采访ServiceStack的项目领导Demis Bellot——第1部分(转)
ServiceStack是一个开源的.支持.NET与Mono平台的REST Web Services框架.InfoQ有幸与Demis Bellot深入地讨论了这个项目.在这篇两部分报道的第1部分中,我 ...
- [ActionScript&Flex] FlashBuilder编译条件之如何屏蔽调试代码
下面讲一下在FlashBuilder中如何添加编译器参数使我们在发布的时候不编译调试代码: 首先设置编译参数 编译参数设置好后,代码我们可以这样写: public class ConditionalC ...