我正在使用 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/