zoukankan      html  css  js  c++  java
  • 周报导入导出(excel)

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    import org.apache.poi.ss.usermodel.BorderStyle;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    
    
    /**
     * 
    * @ClassName: ExcelWriteForWeeklyPaper 
    * @Description: 周报导出 
    * @author yabo.liu 
    * @date 2019年8月23日 下午2:08:57 
    *
     */
    public class ExcelWriteForWeeklyPaper {
        public static void main(String[] args) {
            //读取excel路径
            String excelPath = "E:\excel\new-weekly-list.xlsx";
            System.out.println("excel路径为:"+excelPath);
            //读取excel数据
            JSONArray jsonArray = getExcelData1(excelPath);
            //往excel里写数据,key需要跟sheet页的key相同,值为需要写的数据
            writeWeeklyPaper(jsonArray);
        }
        
        public static JSONArray getExcelData1(String excelPath){
            JSONArray jsonArray = new JSONArray();
            try {
                File excel = new File(excelPath);
                if (excel.isFile() && excel.exists()) {   //判断文件是否存在
                    String[] split = excel.getName().split("\.");  //.是特殊字符,需要转义!!!!!
                    Workbook wb;
                    //根据文件后缀(xls/xlsx)进行判断
                    if ( "xls".equals(split[1])){
                        FileInputStream fis = new FileInputStream(excel);   //文件流对象
                        wb = new HSSFWorkbook(fis);
                    }else if ("xlsx".equals(split[1])){
                        wb = new XSSFWorkbook(excel);
                    }else {
                        System.out.println("文件类型错误!");
                        return null;
                    }
                    //开始解析
                    Sheet sheet = wb.getSheetAt(0);//读取sheet 0
                    int firstRowIndex = sheet.getFirstRowNum()+1;//第一行是列名,所以不读
                    int lastRowIndex = sheet.getLastRowNum();
                    for(int rIndex = firstRowIndex; rIndex <= lastRowIndex; rIndex++) {//遍历行
                        JSONObject jsonObject = new JSONObject(); 
                        Row row = sheet.getRow(rIndex);
                        if (row != null) {
                            int firstCellIndex = row.getFirstCellNum();
                            int lastCellIndex = row.getLastCellNum();
                            for (int cIndex = firstCellIndex; cIndex < lastCellIndex; cIndex++) {//遍历列
                                Cell cell = row.getCell(cIndex);
                                if (cell != null) {
                                    if (cIndex == 0) {
                                        jsonObject.put("idNo",cell.toString());
                                    }else if (cIndex == 1){
                                        jsonObject.put("taskName",cell.toString());
                                    }else if (cIndex == 2) {
                                        jsonObject.put("taskStatus",cell.toString());
                                    }else if (cIndex == 3) {
                                        jsonObject.put("taskProgress",cell.toString());
                                    }else if (cIndex == 4) {
                                        jsonObject.put("lastTaskStatus",cell.toString());
                                    }else if (cIndex == 5) {
                                        jsonObject.put("lastTaskProgress",cell.toString());
                                    }else if (cIndex == 6) {
                                        jsonObject.put("head",cell.toString());
                                    }
                                }
                            }
                        }
                        jsonArray.add(jsonObject);
                    }
                } else {
                    System.out.println("找不到指定的文件");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return jsonArray;
        }
        
        /**
         * 周报导出信息
         */
        @SuppressWarnings("unchecked")
        public static void writeWeeklyPaper(JSONArray jsonArray){
            HSSFWorkbook wb=null;
            OutputStream fileOut=null;
            try {
                //导出模板路径地址
                FileInputStream templateFileInput = new FileInputStream("E:\excel\weeklyPaperExportModel.xls");            
                POIFSFileSystem fs = new POIFSFileSystem(templateFileInput);  
                wb = new  HSSFWorkbook(fs);  
                
                HSSFCellStyle cellStyle = wb.createCellStyle();
                cellStyle.setBorderBottom(BorderStyle.THIN);
                cellStyle.setBorderLeft(BorderStyle.THIN);
                cellStyle.setBorderRight(BorderStyle.THIN);
                cellStyle.setBorderTop(BorderStyle.THIN);
                //从第12行开始写入
                int i = 11;
                for(int a = 0; a < jsonArray.size(); a++){
                    JSONObject jsonObject = (JSONObject) jsonArray.get(a);
                    if ("已上线".equals(jsonObject.get("taskStatus"))) {
                        writeStringData(wb,""+(i-10), i, str2Num("A"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskName").toString(), i, str2Num("B"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskStatus").toString(), i, str2Num("F"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskProgress").toString(), i, str2Num("G"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskStatus").toString(), i, str2Num("H"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskProgress").toString(), i, str2Num("I"),cellStyle);
                        writeStringData(wb,jsonObject.get("head").toString(), i, str2Num("J"),cellStyle);
                        i++;
                    }
                }
                for(int a = 0; a < jsonArray.size(); a++){
                    JSONObject jsonObject = (JSONObject) jsonArray.get(a);
                    if ("待上线".equals(jsonObject.get("taskStatus"))) {
                        writeStringData(wb,""+(i-10), i, str2Num("A"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskName").toString(), i, str2Num("B"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskStatus").toString(), i, str2Num("F"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskProgress").toString(), i, str2Num("G"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskStatus").toString(), i, str2Num("H"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskProgress").toString(), i, str2Num("I"),cellStyle);
                        writeStringData(wb,jsonObject.get("head").toString(), i, str2Num("J"),cellStyle);
                        i++;
                    }
                }
                for(int a = 0; a < jsonArray.size(); a++){
                    JSONObject jsonObject = (JSONObject) jsonArray.get(a);
                    if ("业务复核".equals(jsonObject.get("taskStatus"))) {
                        writeStringData(wb,""+(i-10), i, str2Num("A"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskName").toString(), i, str2Num("B"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskStatus").toString(), i, str2Num("F"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskProgress").toString(), i, str2Num("G"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskStatus").toString(), i, str2Num("H"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskProgress").toString(), i, str2Num("I"),cellStyle);
                        writeStringData(wb,jsonObject.get("head").toString(), i, str2Num("J"),cellStyle);
                        i++;
                    }
                }
                for(int a = 0; a < jsonArray.size(); a++){
                    JSONObject jsonObject = (JSONObject) jsonArray.get(a);
                    if ("UAT测试".equals(jsonObject.get("taskStatus"))) {
                        writeStringData(wb,""+(i-10), i, str2Num("A"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskName").toString(), i, str2Num("B"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskStatus").toString(), i, str2Num("F"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskProgress").toString(), i, str2Num("G"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskStatus").toString(), i, str2Num("H"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskProgress").toString(), i, str2Num("I"),cellStyle);
                        writeStringData(wb,jsonObject.get("head").toString(), i, str2Num("J"),cellStyle);
                        i++;
                    }
                }
                for(int a = 0; a < jsonArray.size(); a++){
                    JSONObject jsonObject = (JSONObject) jsonArray.get(a);
                    if ("联调".equals(jsonObject.get("taskStatus"))) {
                        writeStringData(wb,""+(i-10), i, str2Num("A"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskName").toString(), i, str2Num("B"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskStatus").toString(), i, str2Num("F"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskProgress").toString(), i, str2Num("G"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskStatus").toString(), i, str2Num("H"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskProgress").toString(), i, str2Num("I"),cellStyle);
                        writeStringData(wb,jsonObject.get("head").toString(), i, str2Num("J"),cellStyle);
                        i++;
                    }
                }
                for(int a = 0; a < jsonArray.size(); a++){
                    JSONObject jsonObject = (JSONObject) jsonArray.get(a);
                    if ("需求确认".equals(jsonObject.get("taskStatus"))) {
                        writeStringData(wb,""+(i-10), i, str2Num("A"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskName").toString(), i, str2Num("B"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskStatus").toString(), i, str2Num("F"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskProgress").toString(), i, str2Num("G"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskStatus").toString(), i, str2Num("H"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskProgress").toString(), i, str2Num("I"),cellStyle);
                        writeStringData(wb,jsonObject.get("head").toString(), i, str2Num("J"),cellStyle);
                        i++;
                    }
                }
                for(int a = 0; a < jsonArray.size(); a++){
                    JSONObject jsonObject = (JSONObject) jsonArray.get(a);
                    if ("需求分析".equals(jsonObject.get("taskStatus"))) {
                        writeStringData(wb,""+(i-10), i, str2Num("A"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskName").toString(), i, str2Num("B"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskStatus").toString(), i, str2Num("F"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskProgress").toString(), i, str2Num("G"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskStatus").toString(), i, str2Num("H"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskProgress").toString(), i, str2Num("I"),cellStyle);
                        writeStringData(wb,jsonObject.get("head").toString(), i, str2Num("J"),cellStyle);
                        i++;
                    }
                }
                for(int a = 0; a < jsonArray.size(); a++){
                    JSONObject jsonObject = (JSONObject) jsonArray.get(a);
                    if (!"需求分析".equals(jsonObject.get("taskStatus"))&&!"需求确认".equals(jsonObject.get("taskStatus"))&&
                            !"开发".equals(jsonObject.get("taskStatus"))&&!"内部测试".equals(jsonObject.get("taskStatus"))&&
                            !"联调".equals(jsonObject.get("taskStatus"))&&!"UAT测试".equals(jsonObject.get("taskStatus"))&&
                            !"业务复核".equals(jsonObject.get("taskStatus"))&&!"待上线".equals(jsonObject.get("taskStatus"))&&
                            !"已上线".equals(jsonObject.get("taskStatus"))) {
                        writeStringData(wb,""+(i-10), i, str2Num("A"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskName").toString(), i, str2Num("B"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskStatus").toString(), i, str2Num("F"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskProgress").toString(), i, str2Num("G"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskStatus").toString(), i, str2Num("H"),cellStyle);
                        writeStringData(wb,jsonObject.get("lastTaskProgress").toString(), i, str2Num("I"),cellStyle);
                        writeStringData(wb,jsonObject.get("head").toString(), i, str2Num("J"),cellStyle);
                        i++;
                    }
                }
                //将开发和内部测试的任务写到模板(下周任务计划从103行开始写入,行数根据模板确定)
                int j = 102;
                for(int a = 0; a < jsonArray.size(); a++){
                    JSONObject jsonObject = (JSONObject) jsonArray.get(a);
                    if ("开发".equals(jsonObject.get("taskStatus"))) {
                        writeStringData(wb,""+(j-101), j, str2Num("A"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskName").toString(), j, str2Num("B"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskStatus").toString(), j, str2Num("F"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskProgress").toString(), j, str2Num("H"),cellStyle);
                        j++;
                    }
                }
                for(int a = 0; a < jsonArray.size(); a++){
                    JSONObject jsonObject = (JSONObject) jsonArray.get(a);
                    if ("内部测试".equals(jsonObject.get("taskStatus"))) {
                        writeStringData(wb,""+(j-101), j, str2Num("A"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskName").toString(), j, str2Num("B"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskStatus").toString(), j, str2Num("F"),cellStyle);
                        writeStringData(wb,jsonObject.get("taskProgress").toString(), j, str2Num("H"),cellStyle);
                        j++;
                    }
                }
                Date date = new Date();
                //将新的excel写入地址
                File file=new File("E:\excel");
                OutputStream stream=null;
                stream = new FileOutputStream(new File(file, new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+".xls"));
                wb.write(stream);
            } catch (FileNotFoundException e) {
                System.out.println("周报导出excel异常");
            } catch (IOException e) {
                System.out.println("周报导出excel异常");
            }finally {
                if(wb!=null){
                    wb = null;
                }
                if(fileOut!=null){
                    try {
                        fileOut.close();
                    } catch (IOException e) {
                        System.out.println("周报导出excel异常");
                    }
                }
            }
        };
        
        /**  
         * 向单元格写入非图片格式信息  
         * @描述:这是一个实体类,提供了相应的接口,用于操作Excel,在任意坐标处写入数据。  
         * @参数:String newContent:你要输入的内容  
         *               int beginRow :行坐标,Excel从 0 算起  
         *               int beginCol   :列坐标,Excel从 0 算起  
         *               style: 单元格样式
         */  
        public static void writeStringData(HSSFWorkbook wb, String newContent, int beginRow, int beginCell,HSSFCellStyle style)  
        {
            HSSFSheet sheet=wb.getSheet("项目周报");
            if(wb.getSheet("项目周报")==null){
                sheet = wb.createSheet("项目周报");
            }
            HSSFRow  row  = sheet.getRow(beginRow);   
            if(null == row ){  
                //如果不做空判断,你必须让你的模板文件画好边框,beginRow和beginCell必须在边框最大值以内  
                //否则会出现空指针异常  
                row = sheet.createRow(beginRow);  
            }  
            HSSFCell   cell   = row.getCell(beginCell);  
            if(null == cell){  
                cell = row.createCell(beginCell);  
            }  
            if(style!=null){
                cell.setCellStyle(style);
            }
            //向单元格中放入值  
            cell.setCellValue(newContent);      
        } 
        /**
         * 将excel列中的A、B、AA、AB等内容转换为0、1等数字
         * @param s
         * @return
         */
        private static int str2Num(String s) {
            int r = 0;
            for (int i = 0; i < s.length(); i++) {
                r = r * 26 + s.charAt(i) - 'A' + 1;
            }
            return r - 1;
        }
    }
  • 相关阅读:
    Failed to connect to remote VM
    在hibernate中实现oracle的主键自增策略
    Eclipse快捷键大全(转载)
    hibernate 中 get、load 的 区别
    Spring2.5的新特性:第一部分
    返回上一页代码实现
    Java与Json的使用方法介绍
    也悼念那个伟大的公司
    MFC/C++检查文件是否存在
    新一代开源VoIP协议栈--OPAL(OpenH323 v2)
  • 原文地址:https://www.cnblogs.com/lyb0103/p/11811854.html
Copyright © 2011-2022 走看看