我正在使用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)
请让我知道我哪里出错了,我该怎么办呢。
由于
答案 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);
}