zoukankan      html  css  js  c++  java
  • java poi处理excel多sheet并实现排序

    需求:有一个数据字典全量汇总表,其中第一个sheet为目录,包括编号和表名,第二个以后为表的明细。其中sheet名就是表名但无序,sheet内字段序号无序有空行

    现在要求将其中101,104,107,111表中的格式列和字段名称以及表名取出,生成批量语句,要求按给的编号有序输出,字段出要有序并排除窄。

    输出结果如下:

    insert into t_export(export_id,owner,table_name,col_name,format) values(101,'T_A','scott','id','20180308001');
    insert into t_export(export_id,owner,table_name,col_name,format) values(101,'T_A','scott','sal','2000');
    insert into t_export(export_id,owner,table_name,col_name,format) values(101,'T_A','scott','20','张三');
    insert into t_export(export_id,owner,table_name,col_name,format) values(101,'T_A','scott','remark','hello');
    insert into t_export(export_id,owner,table_name,col_name,format) values(101,'T_A','scott','birthday','40479');
    insert into t_export(export_id,owner,table_name,col_name,format) values(101,'T_A','scott','age','20');
    .
    .
    .
    至111


    excel如下:

    下载poi包poi-3.17.jar并引入eclipse的java工程,仅需要RowInfo.java,ShowExcel.java

    RowInfo.java:

    package pu;
    
    public class RowInfo implements Comparable<RowInfo>{//实现字段排序
        
        private int rownumb;
        private int expId;
        private String tableName;
        private String columnName;
        private String formatInfo;
        public RowInfo(int rownumb,int expId, String tableName, String columnName,String formatInfo) {
            super();
            this.rownumb=rownumb;
            this.expId = expId;
            this.tableName = tableName;
            this.columnName=columnName;
            this.formatInfo = formatInfo;
        }
        @Override
        public String toString(){
            return "insert into t_export(export_id,owner,table_name,col_name,format) values('"
                    +this.expId+"','SCOTT','"
                    +this.tableName+"','"
                    +this.columnName+"','"
                    +this.formatInfo+"');";
        }
        @Override
        public int compareTo(RowInfo row) {//重写排序方法
            // TODO Auto-generated method stub
            return this.rownumb - row.rownumb;
        }
    
        public int getExpId() {
            return expId;
        }
        public void setExpId(int expId) {
            this.expId = expId;
        }
        public String getTableName() {
            return tableName;
        }
        public void setTableName(String tableName) {
            this.tableName = tableName;
        }
        public String getFormatInfo() {
            return formatInfo;
        }
        public void setFormatInfo(String formatInfo) {
            this.formatInfo = formatInfo;
        }
        public int getRownumb() {
            return rownumb;
        }
        public void setRownumb(int rownumb) {
            this.rownumb = rownumb;
        }
        public String getColumnName() {
            return columnName;
        }
        public void setColumnName(String columnName) {
            this.columnName = columnName;
        }
    
    }

     ShowExcel.java

    package pu;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.PrintStream;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.TreeMap;
    
    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.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    
    public class ShowExcel {
        public static  void showExcelSheet(Map<Integer,ArrayList> map) throws Exception {//处理方法
            HashMap     hashmap     =     new     HashMap();
         //放入需求的表名 hashmap.put(
    "T_A","101"); hashmap.put("T_D","104"); hashmap.put("T_G","107");
            hashmap.put("T_K","111"); HSSFWorkbook workbook=new HSSFWorkbook(new FileInputStream(new File("E:\data\Dictionary.xls"))); HSSFSheet sheet=null; FileOutputStream fs = new FileOutputStream(new File("E:\output\temp.txt"),false);//每次都覆盖 PrintStream p = new PrintStream(fs); p.println("sheet amount==="+workbook.getNumberOfSheets()); for (int i = 0; i < workbook.getNumberOfSheets(); i++) {//获取每个Sheet表 sheet=workbook.getSheetAt(i); ArrayList<RowInfo> list_rows = new ArrayList<>();//每个sheet需new一个list if (hashmap.containsKey(sheet.getSheetName())) { p.println("reading the sheet "+sheet.getSheetName()); for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++) {//获取每行 HSSFRow row=sheet.getRow(j); if(row==null){//跳过空行 System.out.println("wowowo"); continue; } System.out.print("row amount=="+sheet.getPhysicalNumberOfRows()+" and now row"+j+" "); // p.print("table_name_"+sheet.getSheetName() +" "); if(j>2 && row.getCell(1)!=null){//此处跳过sheet中的前三行 p.print("table_name_"+sheet.getSheetName()+" row=="+j +"== "); p.print(hashmap.get(sheet.getSheetName()).toString() +" "); p.print(sheet.getSheetName() +" "); p.print(row.getCell(1).toString().toUpperCase()+" "); p.print(row.getCell(5)+" "); p.println();
                //装载每行的序号,字段名称,格式 list_rows.add(
    new RowInfo((int)row.getCell(0).getNumericCellValue(),Integer.parseInt(hashmap.get(sheet.getSheetName()).toString()),sheet.getSheetName().toString(),row.getCell(1).toString().toUpperCase().trim(),row.getCell(5).toString())); } for (int k = 0; k < row.getPhysicalNumberOfCells(); k++) {//获取每个单元格 if(row.getCell(k)!=null){ System.out.print(row.getCell(k)+" "); //p.print(row.getCell(k)+" "); }else System.out.print("row.getCell(k) is nullnull"+" "); } // p.println(" row over"); System.out.println("---Sheet表"+i+"处理完毕---"); } p.println("---Sheet表"+i+"处理完毕---"); // 排序 Collections.sort(list_rows);          
            //读完一张装入一张 map.put(Integer.parseInt(hashmap.get(sheet.getSheetName()).toString()), list_rows); } } p.close(); }
    public static void main(String[] args) throws Exception{ FileOutputStream f = new FileOutputStream(new File("E:\output\result.txt"),false); PrintStream rs = new PrintStream(f); try{ Map<Integer,ArrayList> map=new HashMap<>(); showExcelSheet(map); Map<Integer,ArrayList> treemap=new TreeMap<>();//实现结果表对象按export_id排序 treemap.putAll(map); for(int k:treemap.keySet()){ System.out.println(k); } for(ArrayList<RowInfo> tab :treemap.values()){ for(RowInfo row:tab){ rs.println(row.toString()); } } }catch(Exception e){e.printStackTrace();} } }
  • 相关阅读:
    c++,为什么要引入虚拟继承
    Linux分页机制之分页机制的演变--Linux内存管理(七)
    调度器增强
    Linux分页机制之概述--Linux内存管理(六)
    Linux内存描述之高端内存--Linux内存管理(五)
    Linux内存描述之内存页面page--Linux内存管理(四)
    Linux内存描述之内存区域zone--Linux内存管理(三)
    Linux内存描述之内存节点node--Linux内存管理(二)
    linux内核调试技巧之一 dump_stack【转】
    Linux内存描述之概述--Linux内存管理(一)
  • 原文地址:https://www.cnblogs.com/pu20065226/p/8529574.html
Copyright © 2011-2022 走看看