0

我正在开发一个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,为什么会这样工作。

我现在确实需要解决这个问题的任何代码,我只想了解逻辑。

4

0 回答 0