专针对导出excel2007 ,用到poi3.9的jar

package com.cares.ynt.util;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import org.apache.poi.ss.usermodel.CellStyle;

import org.apache.poi.ss.usermodel.Font;

import org.apache.poi.ss.usermodel.IndexedColors;

import org.apache.poi.xssf.streaming.SXSSFCell;

import org.apache.poi.xssf.streaming.SXSSFRow;

import org.apache.poi.xssf.streaming.SXSSFSheet;

import org.apache.poi.xssf.streaming.SXSSFWorkbook;

import org.apache.poi.xssf.usermodel.XSSFCell;

import org.apache.poi.xssf.usermodel.XSSFCellStyle;

import org.apache.poi.xssf.usermodel.XSSFDataFormat;

import org.apache.poi.xssf.usermodel.XSSFFont;

public class ExportData {

private XSSFCellStyle head_Style;

private SXSSFWorkbook workbook;

// 当前sheet

private SXSSFSheet sheet;

private SXSSFRow row = null;// 创建一行

private SXSSFCell cell = null;

private String headers[][];

private int currentRow = 0;

private XSSFCellStyle date_Style ;

private XSSFCellStyle time_Style ;

private XSSFCellStyle string_style;

private SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

/**

* 构造函数初始化参数

* @param out

* @param title

* @param headers

* @param sheeatName

*/

public ExportData(String title,String[][] headers,String sheeatName){

this.headers = headers;

try{

workbook=new SXSSFWorkbook();

this.head_Style=(XSSFCellStyle) this.workbook.createCellStyle();

head_Style.setBorderBottom(XSSFCellStyle.BORDER_THIN);

head_Style.setBorderLeft(XSSFCellStyle.BORDER_THIN);

head_Style.setBorderRight(XSSFCellStyle.BORDER_THIN);

head_Style.setBorderTop(XSSFCellStyle.BORDER_THIN);

head_Style.setFillForegroundColor(IndexedColors.AQUA.getIndex());

head_Style.setFillPattern(CellStyle.SOLID_FOREGROUND);

head_Style.setAlignment(XSSFCellStyle.ALIGN_CENTER);

XSSFFont head_font = (XSSFFont) workbook.createFont();

head_font.setFontName("宋体");// 设置头部字体为宋体

head_font.setBoldweight(Font.BOLDWEIGHT_BOLD); // 粗体

head_font.setFontHeightInPoints((short) 11);

this.head_Style.setFont(head_font);// 单元格样式使用字体

XSSFDataFormat format = (XSSFDataFormat) workbook.createDataFormat();

XSSFFont data_font = (XSSFFont) workbook.createFont();

data_font.setFontName("宋体");// 设置头部字体为宋体

data_font.setFontHeightInPoints((short) 10);

this.date_Style = (XSSFCellStyle) this.workbook.createCellStyle();

date_Style.setBorderBottom(XSSFCellStyle.BORDER_THIN);

date_Style.setBorderLeft(XSSFCellStyle.BORDER_THIN);

date_Style.setBorderRight(XSSFCellStyle.BORDER_THIN);

date_Style.setBorderTop(XSSFCellStyle.BORDER_THIN);

date_Style.setAlignment(XSSFCellStyle.ALIGN_CENTER);

date_Style.setFont(data_font);// 单元格样式使用字体

date_Style.setDataFormat(format.getFormat("yyyy-m-d"));

this.time_Style = (XSSFCellStyle) this.workbook.createCellStyle();

time_Style.setBorderBottom(XSSFCellStyle.BORDER_THIN);

time_Style.setBorderLeft(XSSFCellStyle.BORDER_THIN);

time_Style.setBorderRight(XSSFCellStyle.BORDER_THIN);

time_Style.setBorderTop(XSSFCellStyle.BORDER_THIN);

time_Style.setAlignment(XSSFCellStyle.ALIGN_CENTER);

time_Style.setFont(data_font);// 单元格样式使用字体

time_Style.setDataFormat(format.getFormat("yyyy-m-d h:mm:s"));

this.string_style = (XSSFCellStyle) this.workbook.createCellStyle();

string_style.setBorderBottom(XSSFCellStyle.BORDER_THIN);

string_style.setBorderLeft(XSSFCellStyle.BORDER_THIN);

string_style.setBorderRight(XSSFCellStyle.BORDER_THIN);

string_style.setBorderTop(XSSFCellStyle.BORDER_THIN);

string_style.setAlignment(XSSFCellStyle.ALIGN_CENTER);

string_style.setFont(data_font);// 单元格样式使用字体

createSheet( sheeatName,headers);

}catch(Exception exc)

{

exc.printStackTrace();

}

}

/**

* 创建表头

* @param sheetName

* @param headers

*/

private  void createSheet(String sheetName,String headers[][])  {

sheet = (SXSSFSheet) workbook.createSheet(sheetName);

row = (SXSSFRow) sheet.createRow(currentRow);

for (int i = 0; i < headers.length; i++) {

cell = (SXSSFCell) row.createCell(i);

cell.setCellType(XSSFCell.CELL_TYPE_STRING);

cell.setCellValue(headers[i][0]);

cell.setCellStyle(head_Style);

}

currentRow++;

}

/**

* 导出excel

* @param listRows

* @throws ParseException

*/

public synchronized void PoiWriteExcel_To2007(List listRows,OutputStream out) throws ParseException {

for (int i = 0; i < listRows.size(); i++) {

row = (SXSSFRow) sheet.createRow(currentRow);

ArrayList ListCells = (ArrayList)listRows.get(i);

for (int j = 0; j < ListCells.size(); j++) {

Object obj = ListCells.get(j);

cell = (SXSSFCell) row.createCell(j);

if(obj instanceof Integer){

cell.setCellValue((String)obj);

cell.setCellStyle(string_style);

}else if(obj instanceof Date){

String type = headers[j][1];

if("DATE".equals(type)){

cell.setCellValue((Date)obj);

cell.setCellStyle(date_Style);

}else if("TIME".equals(type)){

cell.setCellValue((Date)obj);

cell.setCellStyle(time_Style);

}else{

if(!"".equals((String)obj))

cell.setCellValue(sdf.format((Date)obj));

cell.setCellValue("");

cell.setCellStyle(string_style);

}

}else{

if(!"".equals((String)obj))

cell.setCellValue((String)obj);

cell.setCellValue("");

cell.setCellStyle(string_style);

}

}

currentRow ++;

}

try {

workbook.write(out);

out.flush();

out.close();

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 测试导出

* @param args

* @throws IOException

* @throws ParseException

*/

public static void main(String[] args) throws IOException, ParseException {

String headers[][] = {{"日期","DATE"},{"标题","TIME"},{"其他",null}} ;

File file = new File("D://test/michael/test.xlsx");

if (file.exists())

file.delete();

file.createNewFile();

ExportData exportData = new ExportData("test", headers, "test");

ArrayList<ArrayList<?>> data = new ArrayList<ArrayList<?>>();

for (int i = 0; i < 200000; i++) {

ArrayList<Date> cellList = new ArrayList<Date>();

for (int j = 0; j < 3; j++) {

cellList.add(new Date());

}

data.add(cellList);

}

OutputStream out = new FileOutputStream(file);

exportData.PoiWriteExcel_To2007(data,out);

}

}

java POI技术之导出数据优化(15万条数据1分多钟)的更多相关文章

  1. Java 线程池 +生产者消费者+MySQL读取300 万条数据

    1.1需求 数据库300 万条用户数据 ,遍历获取所有用户, 各种组合关联, 获取到一个新的json ,存到redis 上. 1.2 难点 数据库比较多, 不可能单线程查询所有的数据到内存. 1.3解 ...

  2. [C#]_[使用微软OpenXmlSDK (OpenXmlReader)读取xlsx表格] 读取大数据量100万条数据Excel文件解决方案

      1.OpenXmlSDK是个很好的类库,可惜只能通过C#调用,C#的童鞋又福气了. 2.服务端程序由于没法安装office,所以这个对asp.net网站来说是最理想的库了.需要.net 4.0版本 ...

  3. 1300多万条数据30G论坛大数据优化实战经验小结

    最近由于某大型网站社区论坛运行效率比较低用户反馈论坛有些卡需要对系统进行优化,论坛性能影响了公司的形象还有网站的流量,当然这也会影响到公司的收入,而且后期还需要长期维护网站的社区论坛服务. 1:并发访 ...

  4. 性能优化:虚拟列表,如何渲染10万条数据的dom,页面同时不卡顿

    列表大概有2万条数据,又不让做成分页,如果页面直接渲染2万条数据,在一些低配电脑上可能会照成页面卡死,基于这个需求,我们来手写一个虚拟列表 思路 列表中固定只显示少量的数据,比如60条 在列表滚动的时 ...

  5. 极限挑战—C#+ODP 100万条数据导入Oracle数据库仅用不到1秒

    链接地址:http://www.cnblogs.com/armyfai/p/4646213.html 要:在这里我们将看到的是C#中利用ODP实现在Oracle数据库中瞬间导入百万级数据,这对快速批量 ...

  6. Mvc+Dapper+存储过程分页10万条数据

    10万条数据采用存储过程分页实现(Mvc+Dapper+存储过程) 有时候大数据量进行查询操作的时候,查询速度很大强度上可以影响用户体验,因此自己简单写了一个demo,简单总结记录一下: 技术:Mvc ...

  7. 插入1000万条数据到mysql数据库表

    转自:https://www.cnblogs.com/fanwencong/p/5765136.html 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入100 ...

  8. EDG夺冠!用Python分析22.3万条数据:粉丝都疯了!

    一.EDG夺冠信息 11月6日,在英雄联盟总决赛中,EDG战队以3:2战胜韩国队,获得2021年英雄联盟全球总决赛冠军,这个比赛在全网各大平台也是备受瞩目: 1.微博热搜第一名,截止2021-11-1 ...

  9. 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来

    我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...

随机推荐

  1. Linux locate 文件搜索

    在学习 兄弟连 linux教学视频 的时候,我将所学的 linux 命令记录在我的博客中,方便自己查阅. 文件处理命令:locate 基础的命令 命令名称:locate 命令的所在路径:/usr/bi ...

  2. TP5实现签到功能

    基于tp5 模型的一个签到功能: 由于存储所有的签到日期数据库会非常庞大,所以签到日期只存储近三个月的. 具体功能: 1.记录最近一次的签到时间 2.每次签到都会添加15积分 3.有连续签到的记录 C ...

  3. JAG Practice Contest for ACM-ICPC Asia Regional 2016B题【BFS】

    题意: 就是公主要逃跑,士兵要抓公主,问你能不能逃跑哇: 思路: 就是终点搞成起点,然后BFS一下就好了,最后枚举一下出口到公主的距离是不是<所有的到士兵的距离: #include <bi ...

  4. 各种移动GPU压缩纹理的使用方法

    本文系原创整理,欢迎转载,请标明链接 http://www.cnblogs.com/luming1979 有问题欢迎加qq群讨论:366239605 介绍了各种移动设备所使用的GPU,以及各个GPU所 ...

  5. python自建模块显示说明与详情

    通常我们自建模块放在/usr/lib/python2.7/site-packages下面,这样可以python就可以进行调用. 但是,自建模块也要有详细的说明情况,例如查help,可以看出来模块的作用 ...

  6. iOS开发 - 多线程实现方案之NSOperation篇

    NSOperation简介 1.实现多线程编程步骤: 配合使用NSOperation和NSOperationQueue实现多线程编程,我们不用考虑线程的生命周期.同步.加锁等问题,如下: 先将需要执行 ...

  7. jsp 预编译

    jspc-maven-plugin <?xml version="1.0" encoding="UTF-8"?> <project xmlns ...

  8. [51Nod1952] 栈

    Description 不支持后端删除的dequeue,每次操作后查询最大值. \(n\leq10^7\).时限1.5s,不用考虑读入/输出复杂度. Solution 首先考虑如果没有后端删除怎么做, ...

  9. 51NOD 1202 子序列个数 DP

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1202&judgeId=225600 这题看起来挺复杂,但是真正的 ...

  10. 利用apache限制IP并发数和下载流量控制

    一,为什么要对IP并发数,下载流量进行控制 说正题之前,先给大家讲个故事,那是在2007年,我进了一家公司,当时我们正在给达芙妮做电子商务网,www.idaphne.com.从三月份开始做的吧,九月份 ...