java - 对创建工作表感到困惑

标签 java apache-poi

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

我有一个文本文件,其中包含一组关键字,如下所示。

MainOne
MainTwo

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

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

主类

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();
    }

Excel基础类

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: The workbook already contains a sheet named 'Insurance' at org.apache.poi.hssf.usermodel.HSSFWorkbook.createSheet(HSSFWorkbook.java:877) at BasicExcel.createACell(BasicExcel.java:22) at EmailTestWithScanner.readEmails(EmailTestWithScanner.java:115) at EmailTestWithScanner.main(EmailTestWithScanner.java:137) java.lang.IllegalArgumentException: The workbook already contains a sheet named 'MMS' at org.apache.poi.hssf.usermodel.HSSFWorkbook.createSheet(HSSFWorkbook.java:877) at BasicExcel.createACell(BasicExcel.java:22) at EmailTestWithScanner.readEmails(EmailTestWithScanner.java:115) at EmailTestWithScanner.main(EmailTestWithScanner.java:137)

请让我知道哪里出了问题以及如何解决。

谢谢

最佳答案

您应该首先使用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);
}

关于java - 对创建工作表感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42527031/

相关文章:

java - Apache POI : content in excel file gets corrupted

java - 使用 XSSFColor 设置 RGB 颜色

java - 无法使用 apache poi 更改 ms-word 文件(XWPF)的方向

java - 使用 for 循环 (Java)

Javadoc 不为继承的方法生成注释

java - 当对 ArrayList 使用 .get() 时,该类无法将返回的元素识别为所需的对象

java - org.infinispan.jmx.JmxDomainConflictException : Domain already registered org. infinispan 异常?

java - JList 所选项目到字符串 - 奇怪的结果 : Donnees. Marques@3d5bac58

java - Excel 警告 : File is in different format than specified by the file extension

java - Apache Poi : Getting scientific notated double value in place of Numeric value