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 ...
随机推荐
- RTX参数配置
RTX操作系统的配置工作是通过配置文件RTX_Conf_CM.c实现. 在MDK工程中打开文件RTX_Conf_CM.c,可以看到如下图5.2所示的工程配置向导: 20 Task C ...
- umi中使用scss
在umi中可以直接使用css,但是并不支持scss,我们需要加两个loader, 直接npm安装 node-sass和sass-loader 即可,剩余的事情umi已经帮我们做好了. npm i -- ...
- Vue学习路线
前言:学习Vue已经两个月了,目前前端的框架用得比较多的就是Bootstrap和Vue,而Bootstrap是开发人员用得较多,因为较为简单,上手也快.Vue是目前很火的数据驱动框,17年的时候就开始 ...
- Sublime Text 3 3143 注册码和遇到的PyV8无法下载问题
packagecontrol官网:https://packagecontrol.io/installation sublime安装之后,安装Package Control管理插件. sublime3 ...
- CentOS7安装Go环境
下载go(我的当前目录是/data/work)$wget https://studygolang.com/dl/golang/go1.10.1.linux-amd64.tar.gz$tar -xvf ...
- python中unicode 和 str相互转化
python中的str对象其实就是"8-bit string" ,字节字符串,本质上类似java中的byte[]. 而python中的unicode对象应该才是等同于java中的S ...
- Lucene入门学习
技术原理: 开发环境: lucene包:分词包,核心包,高亮显示(highlight和memory),查询包.(下载请到官网去查看,如若下载其他版本,请看我的上篇文档,在luke里面) 原文文档: 入 ...
- java学习之路--String类方法的应用
消除字符串两端的空格 1.判断字符串第一个位置是否为空格,如果是继续向下判断,直到不是空格位置,末尾也是这样,往前判断,直到不是空格为止. 2.当开始和末尾都不是空格时,获取字符串. public s ...
- vue里的样式添加之行间样式
一:行间样式 :和绑定其他dom的属性一样, v-bind:style= <div v-bind:style={backgroundColor:color}>2</ ...
- CString比较不区分大小写
第一种:都变为大写 或者都变成小写. str1.MakeUpper();str2.MakeUpper();or:str1.MakeLower();str2.MakeLower(); if(str1== ...