java - 无法在 selenium 代码中使用 poi 在 excel 文件中写入输出

标签 java selenium-webdriver

我正在编写一段代码,从 excel 工作表 获取数据并对其运行 selenium 测试,并将输出写入不同的 excel 文件中。但我无法查看输出文件中的输出。我收到错误,因为 excel 在 java 代码后的 .xlsx 消息中发现了不可读的内容

package new_excel_package;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.eclipse.debug.core.model.MemoryByte;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PoiReadExcelFile {
    public static void main(String[] args) {
        try {
            WebDriver driver = new FirefoxDriver();
            FileInputStream fileInputStream = new FileInputStream("D://new.xlsx");
            XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
            XSSFSheet worksheet = workbook.getSheet("check");


            FileOutputStream fileOut = new FileOutputStream("D://test.xlsx",true);
            XSSFWorkbook workbook_out = new XSSFWorkbook();
            XSSFSheet worksheet_out = workbook_out.createSheet("Worksheet");

            MemoryByte ms = new MemoryByte();

            for(int i = 0; i < worksheet.getLastRowNum()+1;i++)
            {
                XSSFRow row = worksheet.getRow(i);
                //System.out.println(row.toString());
                int r = worksheet_out.getLastRowNum();
                XSSFRow row1 = worksheet_out.createRow(r+1);

                XSSFCell cell_user = row.getCell(0);

                String user_names = cell_user.getStringCellValue();
                CharSequence[] user_name = {cell_user.getStringCellValue()};
                System.out.println("fetched username");
                XSSFCell cell_mail = row.getCell(1);

                String e_mails = cell_mail.getStringCellValue();
                CharSequence[] e_mail = {cell_mail.getStringCellValue()};
                System.out.println("fetched email");

                driver.get("file:///D:/SANDEEP/html%20sample.html");
                driver.findElement(By.name("Name")).sendKeys(user_name);
                driver.findElement(By.name("Email")).sendKeys(e_mail);
                driver.findElement(By.name("Submit")).click();

                //String status = "done";
                System.out.println("authenticated for" + user_names);

                /*XSSFCell cell_user_out = row1.createCell(0);
                cell_user_out.setCellValue(user_names.toString());
                XSSFCell cell_mail_out = row1.createCell(1);
                cell_user_out.setCellValue(e_mails.toString());
                XSSFCell cell_stat_out = row1.createCell(2);
                cell_user_out.setCellValue("done");*/

                row1.createCell(0,i).setCellValue(user_names.toString());
                row1.createCell(1,i).setCellValue(e_mails.toString());
                row1.createCell(2,i).setCellValue("done");
                System.out.println("user  updated");

                /*workbook_out.write(fileOut);
                System.out.println("elements updated2");*/
            }
            //workbook.Save("D://test.xlsx",FileFormatType.Excel2007Xlsx);

            workbook.write(fileOut);
            fileOut.flush();
            fileOut.close();
            driver.close(); 
            System.out.println("elements updated");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

最佳答案

我还从 Excel 文档中读取输入,并将输出写入单独的 excel(.xls) 文档中。与您不同的是,我使用了 HSSFWorkbook,它只允许我的输出以 .xls 格式编写,但这不会影响实现。

我看到的显着区别是您在关闭文件之前编写工作簿,如下所示: 工作簿.write(fileOut); fileOut.flush(); fileOut.close();

这就是我的实现方式:

        HSSFWorkbook workbook = new HSSFWorkbook();
        String fileName = "excelDoc\\" +(new SimpleDateFormat("dd-MM-yy--hh-mm-ss").format(Calendar.getInstance().getTime()))+ ".xls"; //relative location of file + Time stamp based file name (.xls)
        System.out.println(fileName);       
        FileOutputStream  file1 = new FileOutputStream (new File(fileName));    
        HSSFSheet spreadSheet = workbook.createSheet("Result Document");
        HSSFRow row = spreadSheet.createRow((short) 0);
        HSSFCell cell;
        //Creating rows and filling them with data 
        cell = row.createCell(0);
        cell.setCellValue(new HSSFRichTextString("Test No"));
        cell = row.createCell(1);
        cell.setCellValue(new HSSFRichTextString("Test Result"));
        //Please see below and compare
        file1.close();  //Closing the file       
        FileOutputStream outFile =new FileOutputStream(new File(fileName));  //Creating new file
        workbook.write(outFile);   //printing the data in the new file
        outFile.close();           //closing the new file
        System.out.println("The Result are now printed in the excel sheet");

关于java - 无法在 selenium 代码中使用 poi 在 excel 文件中写入输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25502169/

相关文章:

java - 交换机的 "unreachable"错误是什么?

java - 递归背包返回错误答案

java - 服务器无法读取全部内容

java - 无法使用机器人类和 Sendkeys 上传文件

angularjs - 错误 : Could not find chromedriver while following angularjs official tutorial

java - 在 VSCODE 的 Ubuntu 中为 JDK 11 设置 JAVA_HOME

java - 如何为数组中的每个对象创建一个数组?

python - 如何从 selenium webdriver 元素中提取链接?

java - Selenium WebDriver Java/JUnit - 获取表元素

python - 是否可以使用 Selenium2Library 关键字查找父元素及其子元素?