用java阅读excel工作表。包含一些银行单元格的excel表格

用java阅读excel工作表。包含一些银行单元格的excel表格,java,apache-poi,Java,Apache Poi,这是我的excel表格,中间有一些空白单元格。因此,我无法正确阅读这张纸。任何人都能给我一个方法吗?因此,在逐行读取时,列计数会随着中间空白单元格的出现而减少。要与Office文档交互,唯一真正的解决方案是始终使用API,例如,使用poi-3.8 这可以处理空白单元格 Date Emp_Code Emp_Name Cardno Shift_Start IN OUT Shift_End Status Emp_Late Left_Early Hours_Worke

这是我的excel表格,中间有一些空白单元格。因此,我无法正确阅读这张纸。任何人都能给我一个方法吗?因此,在逐行读取时,列计数会随着中间空白单元格的出现而减少。

要与Office文档交互,唯一真正的解决方案是始终使用API,例如,

使用poi-3.8
这可以处理空白单元格

Date    Emp_Code    Emp_Name    Cardno  Shift_Start IN  OUT Shift_End   Status  Emp_Late    Left_Early  Hours_Worked    O T OS
26. Jan. 2011   001 KL Acharya  000001  9:00    9:15    18:34   18:00   P   0.15    0.00    9.19    0:00    0:34
26. Jan. 2011   002 Seemakiran Upadhya  000002  9:00            18:00   A               0:00    
26. Jan. 2011   013 Sumana Ravishankar  000013  9:00            18:00   A               0:00    
26. Jan. 2011   017 Gopalkrishna Prabhau KV 000017  9:00            18:00   A               0:00    
26. Jan. 2011   021 Sarath Modali   000021  20:00   21:02   6:40    6:00    P   1.02    0.00    9.38    0:00    0:40
26. Jan. 2011   023 Siddharth Singh 000023  9:00            18:00   A               0:00    
26. Jan. 2011   034 Meghana K   000034  9:00            18:00   A               0:00    
26. Jan. 2011   036 Rajendra KS 000036  9:00            18:00   A               0:00    
26. Jan. 2011   037 Rajesh K    000037  9:00            18:00   A               0:00    
26. Jan. 2011   039 Mahesh PR   000039  9:00            18:00   A               0:00    
26. Jan. 2011   041 Krishnamoorthy A    000041  9:00            18:00   A               0:00    
26. Jan. 2011   047 Smruti Ranjan Panda 000047  9:00            18:00   A               0:00    
26. Jan. 2011   049 Raghuraman K    000049  9:00    1:12        18:00   MS  0.00            0:00    
26. Jan. 2011   055 Raghavendra HS  000055  9:00            18:00   A               0:00    
26. Jan. 2011   063 Anoop Chandran U    000063  9:00            18:00   A               0:00    
26. Jan. 2011   069 Ramesh Kumar Hegde  000069  9:00            18:00   A               0:00    
26. Jan. 2011   070 Mohan T 000070  9:00            18:00   A               0:00    
26. Jan. 2011   078 Shurabh Chaubey 000078  20:00   9:38    10:49   6:00    A   0.00    0.00    1.11    0:00    
26. Jan. 2011   079 Sourabha Mahopatra  000079  9:00            18:00   A               0:00    
package com.vaadin.addon.tableimport;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.io.Serializable;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.poi.hssf.usermodel.HSSFCell;
导入org.apache.poi.hssf.usermodel.HSSFRow;
导入org.apache.poi.hssf.usermodel.HSSFSheet;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.ss.usermodel.Row;
公共类ExcelImport实现可序列化{
私有静态最终长serialVersionUID=-8404407996727936498L;
受保护的HSSF工作手册;
/**总计行*/
受保护行标题栏、标题栏、总标题栏;
受保护的行层次结构TotalsRow;
受保护的FileInputStream为空;
/**輔助存儲*/
私人名单数据;
私人内部头条新闻;
公共Excel导入(文件、字符串、字符串){
//獲得表頭行數
头线=反射(线);
//System.out.println(“表頭行數 : " + 头巾);
试一试{
is=新文件输入流(文件);
工作簿=新的HSSF工作簿(is);
}捕获(IOE异常){
e、 printStackTrace();
}
HSSFSheet childSheet=工作簿.getSheetAt(0);
//System.out.println(“有物理的行数“+childSheet.getPhysicalNumberOfRows());
//System.out.println(“有行数“+childSheet.getLastRowNum()+”,“+childSheet.getFirstRowNum());
对象o;
数据=新的ArrayList();
for(int aa=headlineum;aa空值
//System.out.println(“”);
o=“”;
打破
案例HSSFCell.CELL\类型\错误://故障
//System.out.println(“”);
o=“”;
打破
违约:
//系统输出打印(“未知类型   ");
o=“”;
打破
}
}否则{
//系统输出打印(“-”);
o=“-”;
}
如果(j==头条新闻){
data.get(j-headlineum).set(k,getBottomStringById(dealString,k));
}
如果(j>头条新闻){
数据集(k,o);
}
}
}
//System.out.println();
}
//System.out.println(“*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=”;
//用于(列表ll:数据){
//for(对象ss:ll){
//System.err.print(字符串.valueOf(ss)+“,”);
//          }
//System.err.println(“*”);
//      }
}
/**獲得表頭行數*/
私有int反射(字符串dealString){
int行=1;
TableHeadDeal thd=新的TableHeadDeal(dealString);
行=thd.rows;
返回行;
}
/**獲得表頭底部字串*/
私有字符串getBottomStringById(字符串dealString,int-id){
String BottomStr=新字符串();
TableHeadDeal thd=新的TableHeadDeal(dealString);
BottomStr=thd.getTableHeadBottomParams().get(id);
返回底部str;
}
公共列表getListDat
 package com.vaadin.addon.tableimport;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
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.Row;

public class ExcelImport implements Serializable {

    private static final long serialVersionUID = -8404407996727936498L;

    protected HSSFWorkbook workbook;

    /** The totals row. */
    protected Row titleRow, headerRow, totalsRow;
    protected Row hierarchicalTotalsRow;

    protected FileInputStream is = null;

    /**輔助存儲*/
    private List<List<Object>> data;
    private int headLineNum;

    public ExcelImport(File file, String dealString) {
        //獲得表頭行數
        headLineNum = reflex(dealString);
        //System.out.println("表頭行數 : " + headLineNum);

        try {
            is = new FileInputStream(file);
            workbook = new HSSFWorkbook(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        HSSFSheet childSheet = workbook.getSheetAt(0);
        //System.out.println("有Physical行数" + childSheet.getPhysicalNumberOfRows());
        //System.out.println("有行数" + childSheet.getLastRowNum() + " , " +childSheet.getFirstRowNum());
        Object o;

        data = new ArrayList<List<Object>>();
        for (int aa = headLineNum; aa < childSheet.getPhysicalNumberOfRows(); aa++) {
            data.add(new ArrayList<Object>());
            for (int bb = 0; bb < childSheet.getRow(aa).getLastCellNum(); bb++) {
                data.get(aa-headLineNum).add(new String());
            }
        }

        for (int j = 0; j < childSheet.getPhysicalNumberOfRows(); j++) {
            HSSFRow row = childSheet.getRow(j);
            //System.out.println("有Physical列数" + row.getPhysicalNumberOfCells());
            //System.out.println("有列数" + row.getLastCellNum());


            if (null != row) {
                for (int k = 0; k < row.getLastCellNum(); k++) {
                    HSSFCell cell = row.getCell(k);

                    if (null != cell) {
                        switch (cell.getCellType()) {
                        case HSSFCell.CELL_TYPE_NUMERIC: // 数字
                            //System.out.print(cell.getNumericCellValue() + "   ");
                            //o = String.valueOf(cell.getNumericCellValue());
                            o = cell.getNumericCellValue();
                            break;
                        case HSSFCell.CELL_TYPE_STRING: // 字符串
                            //System.out.print(cell.getStringCellValue() + "   ");
                            //o = String.valueOf(cell.getStringCellValue());
                            o =cell.getStringCellValue();
                            break;
                        case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
                            //System.out.println(cell.getBooleanCellValue() + "   ");
                            //o = String.valueOf(cell.getBooleanCellValue());
                            o =cell.getBooleanCellValue();
                            break;
                        case HSSFCell.CELL_TYPE_FORMULA: // 公式
                            //System.out.print(cell.getCellFormula() + "   ");
                            //o = String.valueOf(cell.getCellFormula());
                            o =cell.getCellFormula();
                            break;
                        case HSSFCell.CELL_TYPE_BLANK: // 空值 -->Null Value
                            //System.out.println(" ");
                            o = " ";
                            break;
                        case HSSFCell.CELL_TYPE_ERROR: // 故障
                            //System.out.println(" ");
                            o = " ";
                            break;
                        default:
                            //System.out.print("未知类型   ");
                            o = " ";
                            break;
                        }
                    } else {
                        //System.out.print("-   ");
                        o = "-   ";
                    }
                    if(j == headLineNum) {
                        data.get(j-headLineNum).set(k, getBottomStringById(dealString,k));
                    }
                    if(j >  headLineNum) {
                        data.get(j-headLineNum).set(k, o);
                    }

                }
            }
            //System.out.println();
        }

//      System.out.println("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=");
//      for (List<Object> ll : data) {
//          for (Object ss : ll) {
//              System.err.print(String.valueOf(ss) + " , ");
//          }
//          System.err.println("*");
//      }
    }

    /**獲得表頭行數*/
    private int reflex(String dealString) {
        int rows = 1;
        TableHeadDeal thd = new TableHeadDeal(dealString);
        rows = thd.rows;
        return rows;
    }

    /**獲得表頭底部字串*/
    private String getBottomStringById(String dealString, int id) {
        String BottomStr = new String();
        TableHeadDeal thd = new TableHeadDeal(dealString);
        BottomStr = thd.getTableHeadBottomParams().get(id);
        return BottomStr;
    }

    public List<List<Object>> getListDate() {
        return data;
    }

}