我正在开发一个java应用程序。这个想法是:创建一个电子表格,打开它,让用户输入数据,然后用户必须按下一个按钮,程序就会读取用户输入的数据。
我有一个创建这个工作簿的方法
private void createExcelSheet (Workbook wb, String path) throws Exception{
try{
wb = new XSSFWorkbook ();
XSSFSheet ws = (XSSFSheet) wb.createSheet("Initial Data");
try{
out = new FileOutputStream (path);
wb.write(out);
Process p = Runtime.getRuntime().exec(
"rundll32 url.dll, FileProtocolHandler " + path);
}
catch (Exception e){
e.printStackTrace();
}
但是,当用户输入数据时,java 无法读取它,因为 NullException b/c 行不存在。
我继续做了一个 for 外观,它创建了一定数量的行,缺点是用户必须输入行数(有时是未知的),但现在让它硬编码:
private void createExcelSheet (Workbook wb, String path) throws Exception{
try{
wb = new XSSFWorkbook ();
XSSFSheet ws = (XSSFSheet) wb.createSheet("Initial Data");
for (int i = 0; i < 5; i++){
Row row = ws.createRow(i);
}
try{
out = new FileOutputStream (path);
wb.write(out);
Process p = Runtime.getRuntime().exec(
"rundll32 url.dll, FileProtocolHandler " + path);
}
catch (Exception e){
e.printStackTrace();
}
所以现在它工作正常,我尝试输入最多 5 行,所以工作正常。但是,后来我尝试输入比实际创建的行更多的行,并且预计会出现某种 OutOfBound 异常,但是所有内容都已读取并且工作正常。所以我尝试了以下方法:
private void createExcelSheet (Workbook wb, String path) throws Exception{
try{
wb = new XSSFWorkbook ();
XSSFSheet ws = (XSSFSheet) wb.createSheet("Initial Data");
Row row = ws.createRow(0);
try{
out = new FileOutputStream (path);
wb.write(out);
Process p = Runtime.getRuntime().exec(
"rundll32 url.dll, FileProtocolHandler " + path);
}
catch (Exception e){
e.printStackTrace();
}
正如您在此处看到的,我只创建了第一行,但不知何故,它创建了工作簿中的所有行。如果我只创建一行并明确指出索引 0,为什么会这样工作。
我现在确实需要解决这个问题的任何代码,我只想了解逻辑。