• 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);//2018
        }
        public static String getYearTwoByStr(String year){
            return year.substring(2,4);//18
        }
        public static String getMonthByStr(String year){
            return year.substring(5,7);//01
        }
        public static int getYearAndMonth(String year){
            return Integer.parseInt(year.substring(0,4)+year.substring(5,7));//201801
        }
        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 + "月";
        }
    
    }
  • 相关阅读:
    Unix环境编程常用头文件
    《APUE》读书笔记—第十章信号(上)
    Unix网络编程API
    管道和FIFO
    《APUE》读书笔记—第九章进程关系
    开通博客园
    《APUE》读书笔记—第五章标准I/O库
    《APUE》读书笔记—第十章信号(中)
    《APUE》读书笔记—第三章文件I/O
    《APUE》读书笔记—第七章进程环境
  • 原文地址:https://www.cnblogs.com/suhfj-825/p/10024257.html
Copyright © 2020-2023  润新知