Java Check 工作簿包含特定电子表格或未使用 Apache POI
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/43645607/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java Check workbook contains a specific spreadsheet or not using Apache POI
提问by Minwu Yu
I'm using apache POI to create a excel file which contains multiple spreadsheet. Firstly, this method should check the workbook is empty or not after check its existence. If empty, create new sheet name "sheet1"; if not, check any sheets named "sheet1" in this workbook. If yes, adding new rows to the sheet; if not, create a sheet name "sheet1". Below is my current code, which I think is not the right method to achieve my goal:
我正在使用 apache POI 创建一个包含多个电子表格的 excel 文件。首先,此方法应在检查工作簿存在后检查工作簿是否为空。如果为空,则创建新的工作表名称“sheet1”;如果没有,请检查此工作簿中名为“sheet1”的任何工作表。如果是,向工作表添加新行;如果没有,请创建一个工作表名称“sheet1”。以下是我当前的代码,我认为这不是实现目标的正确方法:
File file = new File("Main Data.xlsx");
// Retrieve the workbook for the main report
XSSFWorkbook workbook;
// Check file existence
if (file.exists() == false) {
// Create new file if it does not exist
workbook = new XSSFWorkbook();
} else {
try (
// Make current input to exist file
InputStream is = new FileInputStream(file)) {
workbook = new XSSFWorkbook(is);
}
}
XSSFSheet spreadsheet;
// Check if the workbook is empty or not
if (workbook.getNumberOfSheets() != 0) {
for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
if (workbook.getSheetName(i).equals(" Enc " + deviceLabel.getText() + " Info. ")) {
spreadsheet = workbook.getSheet(" Enc " + deviceLabel.getText() + " Info. ");
} else spreadsheet = workbook.createSheet(" Enc " + deviceLabel.getText() + " Info. ");
}
}
else {
// Create new sheet to the workbook if empty
spreadsheet = workbook.createSheet(" Enc " + deviceLabel.getText() + " Info. ");
}
// Error here (variable spreadsheet may not have been initialized
spreadsheet.shiftRows(0, spreadsheet.getLastRowNum(), 23);
Tow problems I am getting.
我遇到了两个问题。
- The for loop is obviously wrong to achieve my goal. Is there any way I can check empty spreadsheet or named spreadsheet exists already in the same time in one if statement?
- for 循环显然是错误的,无法实现我的目标。有什么方法可以在一个 if 语句中同时检查空电子表格或命名电子表格是否存在?
e.g.
例如
if ((workbook.getNumberOfSheets() == 0) && !workbook.getSheet("sheet1").exists()) {
workbook.createSheet("sheet1");
} else workbook.getSheet("sheet1")
- I keep getting error that said spreadsheet is not initialized, but if I delete the for loop, the error will disappear.
- 我不断收到错误说电子表格未初始化,但如果我删除 for 循环,错误就会消失。
回答by Minwu Yu
I figured my problem with following code:
我用以下代码发现了我的问题:
File file = new File("Main Data.xlsx");
// Retrieve the workbook for the main report
XSSFWorkbook workbook;
// Check file existence
if (file.exists() == false) {
// Create new file if it does not exist
workbook = new XSSFWorkbook();
} else {
try (
// Make current input to exist file
InputStream is = new FileInputStream(file)) {
workbook = new XSSFWorkbook(is);
}
}
XSSFSheet spreadsheet = workbook.getSheet("sheet1");
// Check if the workbook is empty or not
if (workbook.getNumberOfSheets() != 0) {
for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
if (workbook.getSheetName(i).equals("sheet1")) {
spreadsheet = workbook.getSheet("sheet1");
} else spreadsheet = workbook.createSheet("sheet1");
}
}
else {
// Create new sheet to the workbook if empty
spreadsheet = workbook.createSheet("sheet1");
}
// Shift rows down if exist
spreadsheet.shiftRows(0, spreadsheet.getLastRowNum(), 23);
回答by Divyaja Kakarla
You can simply check if a sheet is created or not with
您可以简单地检查是否创建了工作表
workbook.getSheetIndex(sheetName)
returns -1 if the sheet is not in the work book or Index if it is present in the workbook.
如果工作表不在工作簿中,则返回 -1;如果工作簿中存在工作表,则返回索引。
回答by TuyenNTA
You have declared workbook as final, it can not be initial for work!
您已将工作簿声明为最终版本,它不能是工作的初始值!