【问题标题】:How can i resolve the error of nullpointerexception while writing to excel file in selenium在 selenium 中写入 excel 文件时如何解决 nullpointerexception 的错误
【发布时间】:2021-08-07 04:44:03
【问题描述】:

将数据写入 excel 文件时出现 nullpointerexception 错误。我收到此错误无法调用“org.apache.poi.ss.usermodel.Cell.setCellValue(String)”,因为“cell3Update”为空。

cell3update 用于 writeSignup 方法。

下面是给定的代码


public class WriteExcel {
    public void writeLogin(String result) {
        String excelFilePath = System.getProperty("user.dir") + "/resource/TestData.xls";

        try {
            FileInputStream inputStream = new FileInputStream(new File(excelFilePath));
            Workbook workbook = WorkbookFactory.create(inputStream);

            Sheet sheet = workbook.getSheet("Login");
            Cell cell2Update = sheet.getRow(1).getCell(2);
            cell2Update.setCellValue(result);
            inputStream.close();

            FileOutputStream outputStream = new FileOutputStream(
                    System.getProperty("user.dir") + "/resource/TestData.xls");
            workbook.write(outputStream);
            workbook.close();
            outputStream.close();

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
    public void writeSignup(String result) {
        String excelFilePath = System.getProperty("user.dir") + "/resource/TestData.xls";

        try {
            FileInputStream inputStream = new FileInputStream(new File(excelFilePath));
            Workbook workbook = WorkbookFactory.create(inputStream);

            Sheet sheet = workbook.getSheet("Signup");
            Cell cell3Update = sheet.getRow(1).getCell(6);
            cell3Update.setCellValue(result);
            inputStream.close();

            FileOutputStream outputStream = new FileOutputStream(
                    System.getProperty("user.dir") + "/resource/TestData.xls");
            workbook.write(outputStream);
            workbook.close();
            outputStream.close();

        } catch (Exception ex) {
            ex.printStackTrace();
        }
        
    }

}

writelogin 方法运行良好,但 writeSignup 方法出错。我对两者都使用了几乎相同的代码,但仍然有一个工作正常,一个抛出错误。 请帮我解决这个问题。

【问题讨论】:

  • 您需要检查该行或单元格是否为空,并相应地创建一个新行/单元格并将其添加到工作表中,例如Row row = sheet.createRow(1);。请参阅 API 文档,显示未定义的 rowcell 可能会返回 null
  • 但是为什么我的 writelogin 方法工作得很好,如果我使用 createrow 那么它会删除我之前在该行中输入的所有数据。
  • writelogin 没有尝试写入单元格(6)...不过最好检查其中的空值。
  • 问题是索引 6 处的单元格,而不是行,这只是一个示例。
  • 使用 writelogin 方法我也试图在一个空白单元格中写入,它完美地完成了它的工作,同样的情况是这里只有不同的工作表和不同的单元格,我想在特定的单元格中写入数据。 @sorifiend

标签: java selenium selenium-webdriver appium


【解决方案1】:

在这篇文章的评论部分得到了答案。在此处粘贴代码

package Utility;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class WriteExcel extends ReadExcel{
    public void writeLogin(String result) {
        String excelFilePath = System.getProperty("user.dir") + "/resource/TestData.xls";

        try {
            FileInputStream inputStream = new FileInputStream(new File(excelFilePath));
            Workbook workbook = WorkbookFactory.create(inputStream);

            Sheet sheet = workbook.getSheet("Login");
            Cell cell2Update = sheet.getRow(1).getCell(2);
            cell2Update.setCellValue(result);
            inputStream.close();

            FileOutputStream outputStream = new FileOutputStream(
                    System.getProperty("user.dir") + "/resource/TestData.xls");
            workbook.write(outputStream);
            workbook.close();
            outputStream.close();

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
    public void writeSignup(String result) {
        String excelFilePath = System.getProperty("user.dir") + "/resource/TestData.xls";
        try {
            FileInputStream inputStream = new FileInputStream(new File(excelFilePath));
            Workbook workbook = WorkbookFactory.create(inputStream);

            Sheet sheet = workbook.getSheet("Signup");
            Cell cell3Update = sheet.getRow(1).getCell(6);
            if(cell3Update == null)  //Made some changes here
            {
                cell3Update = sheet.getRow(1).createCell(6);
            }
            cell3Update.setCellValue(result);
            
            inputStream.close();

            FileOutputStream outputStream = new FileOutputStream(
                    System.getProperty("user.dir") + "/resource/TestData.xls");
            workbook.write(outputStream);
            workbook.close();
            outputStream.close();

        } catch (Exception ex) {
            ex.printStackTrace();
        }
        
    }

}

希望它也能帮助你。 谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    相关资源
    最近更新 更多