想问大家怎么样用POI读取指定目录的表格,表格打开默认第一的读取我已经实现,比如一个xls文件有N个目录,而每个目录下都有表格,那么我怎么想读取我指定的表格呢,知道的告诉我下,谢谢了

解决方案 »

  1.   

    根据不同的名称创建不同的sheet
      

  2.   

    package com.aiflow.TestJreeChart;import java.io.FileInputStream;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    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.hssf.util.Region;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;public class poi { public void readExcel(String filePath) {
    try {
    POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filePath));
    // 创建工作簿
    HSSFWorkbook workBook = new HSSFWorkbook(fs); /**
     * 
     * 获得Excel中工作表个数
     * 
     */
    System.out.println("工作表个数 :" + workBook.getNumberOfSheets());
    for (int i = 0; i < workBook.getNumberOfSheets(); i++) {
    // 创建工作表
    HSSFSheet sheet = workBook.getSheetAt(i);
    int rows = sheet.getPhysicalNumberOfRows(); // 获得行数
    if (rows > 0) {
    sheet.getMargin(HSSFSheet.TopMargin);
    for (int r = 0; r < rows; r++) { // 行循环
    HSSFRow row = sheet.getRow(r);
    if (row != null) {
    int cells = row.getLastCellNum();// 获得列数
    for (short c = 0; c < cells; c++) { // 列循环
    HSSFCell cell = row.getCell(c);
    if (cell != null) {
    String value = getValue(cell);
    System.out.println("第" + r + "行 " + "第" + c
    + "列:" + value);
    }
    }
    }
    }
    }
    // 查询合并的单元格
    for (i = 0; i < sheet.getNumMergedRegions(); i++) {
    System.out.println("第" + i + "个合并单元格");
    Region region = sheet.getMergedRegionAt(i);
    int row = region.getRowTo() - region.getRowFrom() + 1;
    int col = region.getColumnTo() - region.getColumnFrom() + 1;
    System.out.println("起始行:" + region.getRowFrom());
    System.out.println("起始列:" + region.getRowTo());
    System.out.println("所占行:" + row);
    System.out.println("所占列:" + col);
    }
    }
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    } public String getValue(HSSFCell cell) {
    String value = "";
    switch (cell.getCellType()) {
    case HSSFCell.CELL_TYPE_NUMERIC: // 数值型
    if (HSSFDateUtil.isCellDateFormatted(cell)) {
    // 如果是date类型则 ,获取该cell的date值
    value = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();
    } else {// 纯数字
    value = String.valueOf(cell.getNumericCellValue());
    }
    break; /* 此行表示单元格的内容为string类型 */
    case HSSFCell.CELL_TYPE_STRING: // 字符串型
    value = cell.getStringCellValue();
    break;
    case HSSFCell.CELL_TYPE_FORMULA:// 公式型
    // 读公式计算值
    value = String.valueOf(cell.getNumericCellValue());
    if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
    value = cell.getStringCellValue().toString();
    }
    cell.getCellFormula();
    break;
    case HSSFCell.CELL_TYPE_BOOLEAN:// 布尔
    value = " " + cell.getBooleanCellValue();
    break; /* 此行表示该单元格值为空 */
    case HSSFCell.CELL_TYPE_BLANK: // 空值
    value = "";
    break;
    case HSSFCell.CELL_TYPE_ERROR: // 故障
    value = "";
    break;
       default:
    value = cell.getStringCellValue().toString();
    }
    return value;
    } public static void main(String args[]) {
    poi im = new poi();
    im.readExcel("e:/zxb.xls");
    }
    }
    这是我的代码,怎么让我可以读取任意的sheet中的表格