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 ...
随机推荐
- WordPress <= 4.6 命令执行漏洞(PHPMailer)复现分析
漏洞信息 WordPress 是一种使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站.也可以把 WordPress 当作一个内容管理系统(C ...
- C语言 · 滑动解锁
题目:滑动解锁 滑动解锁是智能手机一项常用的功能.你需要在3x3的点阵上,从任意一个点开始,反复移动到一个尚未经过的"相邻"的点.这些划过的点所组成的有向折线,如果与预设的折线在图 ...
- halcon开发必读
关于HALCON的新手入门问题简答(1) 无论读入什么图像,读入图像显示效果明显和原始图像不一致,哪怕是从相机读入的图像,也是明显颜色差异.什么原因引起? 答:初步诊断是,显示的时候调用的颜色查找表存 ...
- C语言 结构体中的零长度数组
/* C语言零长度数组大小和取值问题 */ #include <stdio.h> #include <stdlib.h> #include <string.h> s ...
- HDFS: The short-circuit local reads feature cannot be used
问题: method:org.apache.hadoop.hdfs.DomainSocketFactory.<init>(DomainSocketFactory.java:69) The ...
- ftrace:跟踪你的内核函数! | Linux 中国
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79161135 ftrace 是一个 L ...
- apache 压力测试ab
1.安装了apache服务器 2.进入命令行 3.模拟并发级别为100,请求数为1000个的api数据请求数量测试
- 外部访问docker容器(docker run -p/-P 指令)
容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P(大写) 或 -p (小写) 参数来指定端口映射. (1)当使用 -P 标记时,Docker 会随机映射一个 49000~4990 ...
- SpringMVC Controller单例和多例
对于SpringMVC Controller单例和多例,下面举了个例子说明下. 第一次:类是多例,一个普通属性和一个静态属性. 结果:普通属性:0.............静态属性:0 普通属性:0. ...
- python rabbitmq的库,rabbitpy代替pika
之前看网上都是清一色pika包的例子,就用的pika包,最大问题是非多线程安全,改为使用rabbitpy.大幅改善了pika多线程需要加锁,和外网推送延迟又不能开多线程导致推送慢的问题. rabbit ...