POI大数据Excel生成
package com.hd.erpreport.controller; import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.hd.erpreport.utils.ExportDownLoadUtil; @Controller
@RequestMapping("SalesExportHJController/")
public class SalesExportHJController { @RequestMapping("exportSales.do")
public void exportSales(HttpServletRequest req,HttpServletResponse res){
String begin = req.getParameter("begin");//2018-08-01
String end = req.getParameter("end");
// System.out.println("begin = " + begin);
// System.out.println("end = " + end);
//得到两个日期之间总的月数
// int totalMonth = (getYearAndMonth(end)-getYearAndMonth(begin))/100 * 12 + (getYearAndMonth(end)-getYearAndMonth(begin)) % 100 ;
int beginYear = getYearFourI(begin);//开始的年
int endYear = getYearFourI(end);//结束的年
int beginMonth = getMonthI(begin);
int endMonth = getMonthI(end); String[] titles = { "销售订单号", "订单日期", "订单项次", "销售物料号", "品名", "规格型号",
"关联品号", "销售数量", "交货日", "采购/生产单号", "采购单项次","工作中心", "物料号",
"物料品名", "规格型号", "件号", "采购/生产数量", "已领料数量", "已完成数量", "计划开始日期",
"实际开始日期", "计划完成日期","实际完成日期", "延期开始天数", "延期完成天数", "状态",
"库存数量", "序列号" };
String[] resultTitles = { "DDH","DDRQ","DDXC","XSWLH","XSWLPM","XSWLGG","XSWLJH","XSSL","JHR","CGGDDH","CGXC","GZZX",
"WLH","WLPM","GGXH","JH","CGSCSL","YWCSL","JHKSRQ","JHWCRQ","SJKSRQ","SJWCRQ","YQKSTS","YQWCTS",
"YLLSL","ZT","KCSL","XLHHZ"};
// 连接数据库
Connection conn = null;
PreparedStatement ps = null;
ResultSet result = null;
FileOutputStream fout = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");// 加载驱动,不同的数据库不同
conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.2:1521:topprod", "hdzsq", "hdzsq");// 建立连接
conn.setAutoCommit(false);// 禁止自动提交,设置回滚点 // 1、生成一个包含相应月数的工作簿
String sheetName;
// int month = getMonthI();
SXSSFWorkbook wb = new SXSSFWorkbook (1024);// 创建工作簿
for (int k = beginYear; k <= endYear; k++) {
while(true){
//如果不到12
if (k >= endYear && beginMonth > endMonth) {
break;
}
sheetName = getSheetName(k,beginMonth);// 2018年1月-2018年11月
Sheet sheet = wb.createSheet(sheetName);// 创建mouth个sheet并返回
// sheet写对应的内容
Row row = sheet.createRow(0);// 创建第一行
for (int j = 0; j < 28; j++) {
row.createCell(j).setCellValue(titles[j]);
}
String sql_sel = "select * from ddzt_v where ddh like 'SOD1-HD" + k%100 + StringUtils.leftPad(beginMonth+"", 2,"0") + "%'";
ps = conn.prepareStatement(sql_sel);
result = ps.executeQuery();
int l = 1;
while (result.next()) {
// 把得到的数据写到Excel中
row = sheet.createRow(l++);
for (int j = 0; j < 28; j++) {
row.createCell(j).setCellValue(result.getString(resultTitles[j]));
}
}
//如果处理的月份是12月,跳出当前循环,外层从1开始循环,否则月份加1
if (beginMonth % 12 == 0) {
beginMonth = 1;
break;
} beginMonth++ ;
}
} /*for (int i = 1; i <= month; i++) {
sheetName = getSheetName(i);// 2018年1月-2018年11月
Sheet sheet = wb.createSheet(sheetName);// 创建mouth个sheet并返回
// sheet写对应的内容
Row row = sheet.createRow(0);// 创建第一行
for (int j = 0; j < 28; j++) {
row.createCell(j).setCellValue(titles[j]);
}
String sql_sel = "select * from ddzt_v where ddh like 'SOD1-HD18" + StringUtils.leftPad(i+"", 2,"0") + "%'";
ps = conn.prepareStatement(sql_sel);
result = ps.executeQuery();
int k = 1;
while (result.next()) {
// 把得到的数据写到Excel中
row = sheet.createRow(k++);
for (int j = 0; j < 28; j++) {
row.createCell(j).setCellValue(result.getString(resultTitles[j]));
}
}
}*/
String fileName = "/销售订单状态导出.xlsx";
String path = new File(req.getSession().getServletContext().getRealPath("/")) + fileName;
// 文件的输出路径
fout = new FileOutputStream(path);
wb.write(fout);
fout.close();
wb.dispose();
//把生成的文件下载下来
File file = new File(req.getSession().getServletContext().getRealPath(fileName));
ExportDownLoadUtil.resDownload(res,file); } catch (Exception e) {
e.printStackTrace();
} }
//year = 2018-01-02
public static String getYearFourByStr(String year){
return year.substring(0,4);//
}
public static String getYearTwoByStr(String year){
return year.substring(2,4);//
}
public static String getMonthByStr(String year){
return year.substring(5,7);//
}
public static int getYearAndMonth(String year){
return Integer.parseInt(year.substring(0,4)+year.substring(5,7));//
}
public static int getYearFourI(String year){
return Integer.parseInt(getYearFourByStr(year));//得到整形的年
}
public static int getMonthI(String year){
return Integer.parseInt(getMonthByStr(year));//得到整形的月
}
public static String getSheetName(int year,int month){
return year + "年" + month + "月";
} }
POI大数据Excel生成的更多相关文章
- [转]POI大数据量Excel解决方案
全文转载自:jinshuaiwang的博客 目前处理Excel的开源javaAPI主要有两种,一是Jxl(Java Excel API),Jxl只支持Excel2003以下的版本.另外一种是Apach ...
- POI 海量数据/大数据文件生成SXSSFWorkbook使用简介
在之前我们知道处理xls的excel用的workbook是HSSFWorkbook,处理xlsx的excel用的是XSSFWorkbook. 上面两个类导出excel的时候数据会驻留在内存中,所以当数 ...
- poi大数据将excel2007导入数据库
package com.jeeframe.cms.updata.service.impl; import java.io.IOException; import java.io.InputStream ...
- 在AcGIS随着大数据的生成DEM
在ArcGIS产生DEM时间.数据来源是经常有的高程点.轮廓线,该高程点.等高线密集,可能有几千万.甚至亿高程点.轮廓线. 如果您使用这些矢量数据生成TIN.不能实现的,由于生成TIN时,支持的最大结 ...
- java利用poi包 为excel生成超链接
转载自:http://www.blogjava.net/leekiang/archive/2008/10/21/235794.html 1,一个需求, 要求报表生成的Excel表格支持超链接.例如 ...
- poi大数据导入解决方法
This one comes up quite a lot, but often the reason isn't what you might initially think. So, the fi ...
- 大数据Excel导出方案
static void Main(string[] args) { Excel.Application app = new Excel.Application(); Excel._Workbook r ...
- POI 生成excel(大数据量) SXSSF
使用POI 的SXSSF (Streaming Usermodel API)生成较大的excel,同时开启压缩 import junit.framework.Assert; import org.ap ...
- POI读写大数据量excel,解决超过几万行而导致内存溢出的问题
1. Excel2003与Excel2007 两个版本的最大行数和列数不同,2003版最大行数是65536行,最大列数是256列,2007版及以后的版本最大行数是1048576行,最大列数是16384 ...
随机推荐
- 【原创 深度学习与TensorFlow 动手实践系列 - 2】第二课:传统神经网络
第二课 传统神经网络 <深度学习>整体结构: 线性回归 -> 神经网络 -> 卷积神经网络(CNN)-> 循环神经网络(RNN)- LSTM 目标分类(人脸识别,物品识别 ...
- 深入 AngularUI Router
翻译:深入 AngularUI Router 原文地址:http://www.ng-newsletter.com/posts/angular-ui-router.html ui-router: htt ...
- MATLAB基础函数命令
1. 常用命令 dir:列出当前目录下的所有文件 clc:清除命令窗 clear all:清除环境(从内存中清除所有变量) who:将内存中的当前变量以简单形式列出 close all: 关闭所有的 ...
- 【转载】最强NLP预训练模型!谷歌BERT横扫11项NLP任务记录
本文介绍了一种新的语言表征模型 BERT--来自 Transformer 的双向编码器表征.与最近的语言表征模型不同,BERT 旨在基于所有层的左.右语境来预训练深度双向表征.BERT 是首个在大批句 ...
- 项目中phpexcel的基本用法
前提:要下载PHPEXCEL库文件 如:phpexcel官方下载 ,本人使用下载 情形一:对于将数据写入EXCEL表中的用法 header("content-type:text/htm ...
- 搭建Airflow数据流调度器
服务器使用的是centos系统,需要安装好pip和setuptools,同时注意更新安装的版本 接下来参考安装好Airflow Airflow 1.8 工作流平台搭建 http://blog.csdn ...
- Webpack+Vue+ES6 前端组件化开发mobile-multi-page应用实战总结和踩坑
本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws 一.写在前面 项目上线有一段时间了,一个基于webpack+vue+ES6的手机端多页面应用 ...
- 使用Apache下poi创建和读取excel文件
一:使用apache下poi创建excel文档 @Test /* * 使用Apache poi创建excel文件 */ public void testCreateExcel() { // 1:创建一 ...
- eclipse.ini 修改默认编码为 UTF-8
eclipse.ini 修改默认编码为 UTF-8 打开您的eclipse安装目录,找到eclipse.ini文件 打开eclipse.ini文件,在最下面加入一行代码:-Dfile.encoding ...
- 【面试题】java面试题整理(有空再贴答案)
面试题+基础 各家的面试题其实都大同小异, 掌握基础和原理,走到哪都不怕. 基础 leetcode上有一些总结,star数非常高了.贴上url https://github.com/CyC2018/C ...