对于创建工作表感到困惑

时间:2017-03-01 08:45:36

标签: java apache-poi

我正在使用POI编写java代码,目的是创建工作表并向其中添加数据。标准如下。

我有一个带有一组关键字的文本文件,如下所示。

MainOne
MainTwo

我正在循环播放可用的工作表并根据此关键字创建工作表。

如果没有关键字匹配,我想在工作簿中添加一个名为no keyword的工作表。并且在每次迭代时,检查带有关键字的工作表是否可用,如果是,则使用它,如果不是,则创建工作表。

主要类

public static void main(String[] args) throws Exception {
        FileInputStream fileInputStream = new FileInputStream(new File("KeyWords.txt"));
        Scanner sc = new Scanner(fileInputStream);
        while (sc.hasNextLine()) {
            String line = sc.nextLine();
            BasicExcel.createACell(line);
        }
        sc.close();
    }

BasicExcel Class

public static void createACell(String keyWord) throws IOException {
        FileInputStream input_document = new FileInputStream(new File("C:\\Test\\new.xls"));
        HSSFWorkbook workbook = new HSSFWorkbook(input_document);
        int noOfSheets = workbook.getNumberOfSheets();
        HSSFSheet sheet = null;
        for (int j = 0; j < noOfSheets; j++) {
            if (!workbook.getSheetName(j).equalsIgnoreCase("No KeyWords")) {
               sheet = workbook.createSheet("No KeyWords");
            } else if (!workbook.getSheetName(j).equalsIgnoreCase(keyWord)) {
               sheet = workbook.createSheet(keyWord);
            } else {
               sheet = workbook.getSheet(keyWord);
            }
        }
        input_document.close();
        FileOutputStream out = new FileOutputStream(new File("C:\\Test\\new.xls"));
        try {
            workbook.write(out);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            out.close();
            workbook.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

当我运行此程序时,我收到以下异常。

  

java.lang.IllegalArgumentException:工作簿已经包含一个   名为'保险'的表格   org.apache.poi.hssf.usermodel.HSSFWorkbook.createSheet(HSSFWorkbook.java:877)     在BasicExcel.createACell(BasicExcel.java:22)at   EmailTestWithScanner.readEmails(EmailTestWithScanner.java:115)at   EmailTestWithScanner.main(EmailTestWithScanner.java:137)   java.lang.IllegalArgumentException:工作簿已包含一个   名为'MMS'的表格   org.apache.poi.hssf.usermodel.HSSFWorkbook.createSheet(HSSFWorkbook.java:877)     在BasicExcel.createACell(BasicExcel.java:22)at   EmailTestWithScanner.readEmails(EmailTestWithScanner.java:115)at   EmailTestWithScanner.main(EmailTestWithScanner.java:137)

请让我知道我哪里出错了,我该怎么办呢。

由于

1 个答案:

答案 0 :(得分:1)

如果使用getSheetIndex(String name)已经存在具有相同名称的工作表,则应先检查。

如果它返回-1,则表示它尚不存在,因此您可以安全地调用createSheet(String sheetname),否则您将能够使用getSheetAt(int index)来检索相应的HSSFSheet实例。

以下是显示该想法的伪代码:

int index = workbook.getSheetIndex("No KeyWords");
HSSFSheet sheet;
if (index == -1) {
    // It doesn't exist yet so let's create it
    sheet = workbook.createSheet("No KeyWords");
} else {
    // It already exists so let's get it
    sheet = workbook.getSheetAt(index);
}