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 ...
随机推荐
- 严选 | Elasticsearch史上最全最常用工具清单【转】
1.题记 工欲善其事必先利其器,ELK Stack的学习和实战更是如此,特将工作中用到的“高效”工具分享给大家. 希望能借助“工具”提高开发.运维效率! 2.工具分类概览 2.1 基础类工具 1.He ...
- k8s yaml说明
k8s yaml # yaml格式的pod定义文件完整内容: apiVersion: v1 #必选,版本号,例如v1 kind: Pod #必选,Pod metadata: ...
- linux下启动和关闭tomcat服务的方式
Linux下tomcat服务的启动.关闭与错误跟踪,通常通过以下几种方式启动关闭tomcat服务: 切换到tomcat主目录下的bin目录 启动tomcat服务 生产模式: 方式一:直接启动 ./st ...
- android sdk manager更新地址
参考:http://www.oschina.net/question/1399261_195245 android sdk 用久了,想更新到最新的SDK包: 大连东软信息学院镜像服务器地址:- htt ...
- LVS & NGINX
LVS NGINX
- 基于VS Code创建Spring Boot项目开发REST API(一)
公司从.NET转向Java不仅仅是简单的代码变成Java,趁此机会对原有的架构和代码重构,融入新的概念和技术.目前通过前后端分离,将后端更多的微服务化.从.NET转向Java我们更多的是用Java开发 ...
- 关于4A网络安全管控平台控件加载失败的解决方法
最近电脑重装系统后,到公司登录4A管控平台提示"控件加载失败","无效的参数为:Null","点击资源无任何反映"等等问题 别人的电脑用的好 ...
- 让wampserver2.5.exe支持sql server数据库的方法
将D:\wamp\bin\php\php5.5.12\ext路径下 这两个文件复制到php.ini中 链接数据库方法 <?php $serverName = "."; $co ...
- 验证IP地址的有效性
实力说明 IP地址是网络上每台计算机的标识,在浏览器中输入的网址也是要经过DNS服务器转换为IP地址才能找到服务器. 关键技术 正则表达式
- vue中的图标字体引入
网址:https://icomoon.io/app/#/select: 特点:样式多,免费 操作: 1.相中的,随便点,不要钱,generat fonts然后download,得到一个压缩文件,解压, ...