当前位置: 首页 > 知识库问答 >
问题:

Selenium Java-将hashmap值写入excel

笪建章
2023-03-14
    public void readData() throws Exception {
    String filePath = System.getProperty("user.dir") + "\\Test Data";
    String fileName = "editSubscriptions.xls";
    String sheetName = "datapool";

    File file = new File(filePath + "\\" + fileName);
    FileInputStream fis = new FileInputStream(file);
    Workbook workbook = null;

    String fileExtName = fileName.substring(fileName.indexOf("."));

    if (fileExtName.equals(".xlsx")) {
        workbook = new XSSFWorkbook(fis);
    } else if (fileExtName.equals(".xls")) {
        workbook = new HSSFWorkbook(fis);
    }
    Sheet sheet = workbook.getSheet(sheetName);
    int rowCount = sheet.getLastRowNum() - sheet.getFirstRowNum();
    HashMap<String, String> hm = new HashMap<String, String>();
    for (int i = 1; i < rowCount + 1; i++) {
        Row row = sheet.getRow(i);
        for (int j = 1; j < row.getLastCellNum(); j++) {
            System.out.println(row.getCell(j).getStringCellValue());
            driver.findElement(By.linkText("Login")).click();
            WebDriverWait wait = new WebDriverWait(driver, 10);
            wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("username")));
            driver.findElement(By.id("username")).sendKeys(row.getCell(0).toString());
            driver.findElement(By.id("password")).sendKeys(row.getCell(1).toString());
            driver.findElement(By.name("submit")).click();
            Thread.sleep(10000);
            try {
                driver.findElement(By.linkText("Logout")).click();
                WebDriverWait wait1 = new WebDriverWait(driver, 10);
                wait1.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Login")));
                hm.put(row.getCell(0).toString(), "Pass");
            } catch (Exception ex) {
                hm.put(row.getCell(0).toString(), "Fail");
                driver.get("http://www.openclinica.com");
            }
        }
    }
    Set<String> keys = hm.keySet();
    for (String key: keys){
        System.out.println("Value of "+key+" is: "+hm.get(key));

        String filePath1 = System.getProperty("user.dir") + "\\Test Data";
        String fileName1 = "editSubscriptions1.xls";
        String sheetName1 = "datapool";

        File file1 = new File(filePath1 + "\\" + fileName1);
        FileInputStream fis1 = new FileInputStream(file1);
        Workbook workbook1 = null;

        String fileExtName1 = fileName1.substring(fileName1.indexOf("."));

        if (fileExtName1.equals(".xlsx")) {
            workbook1 = new XSSFWorkbook(fis1);
        } else if (fileExtName1.equals(".xls")) {
            workbook1 = new HSSFWorkbook(fis1);
        } 
        Sheet sheet1 = workbook1.getSheet(sheetName1);
        int rowCount1 = sheet1.getLastRowNum() - sheet1.getFirstRowNum();

        for (int i=1; i < rowCount1; i++){
            Cell cell = sheet1.getRow(i).createCell(2);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            cell.setCellValue(hm.put(key, hm.get(key)));
        }
    }
}

请帮我解决这个问题。

提前谢谢你。

共有1个答案

郎玮
2023-03-14
int rowCount1 = sheet1.getLastRowNum() - sheet1.getFirstRowNum();

    for (int i=1; i < rowCount1; i++){
        Cell cell = sheet1.getRow(i).createCell(2);
        cell.setCellType(Cell.CELL_TYPE_STRING);
        cell.setCellValue(hm.put(key, hm.get(key)));
    }

根据文档,您的循环应该从索引0开始。

看起来您从未进入循环,因为您从索引1开始,但如果从空工作表开始,您的行计数初始值为0。

编辑:在评论之后,我会选择这样的解决方案(未经测试!)

 Set<String> keys = hm.keySet();
String filePath1 = System.getProperty("user.dir") + "\\Test Data";
    String fileName1 = "editSubscriptions1.xls";
    String sheetName1 = "datapool";

    File file1 = new File(filePath1 + "\\" + fileName1);
    FileInputStream fis1 = new FileInputStream(file1);
    Workbook workbook1 = null;

    String fileExtName1 = fileName1.substring(fileName1.indexOf("."));

    if (fileExtName1.equals(".xlsx")) {
        workbook1 = new XSSFWorkbook(fis1);
    } else if (fileExtName1.equals(".xls")) {
        workbook1 = new HSSFWorkbook(fis1);
    } 
    Sheet sheet1 = workbook1.getSheet(sheetName1);
    int rowCount1 = sheet1.getLastRowNum() - sheet1.getFirstRowNum(); //set rowNumber to the last already set one
for (String key: keys){ //for every key write the name in column 1 and the result in column 2
    rowcount1++; //start at the next free row

    Cell cell1 = sheet1.createRow(rowCount1).createCell(1);
        Cell cell2 = sheet1.getRow(rowCount1).createCell(2);
        cell1.setCellType(Cell.CELL_TYPE_STRING);
        cell2.setCellType(Cell.CELL_TYPE_STRING);
        cell1.setCellValue(key));
        cell2.setCellValue(hm.get(key)));
    }
}
 类似资料:
  • 我是Java新手。我一直在从事一个使用Maven和Java1.7的项目。在我的项目中,我有一个HashMap。我想将这个HashMap输出到JSON。目前推荐的方法是什么? 当我在谷歌上搜索时,我有很多选择(比如杰克逊)。然而,我不确定我应该用什么。另外,我想使用一个可以通过Maven访问的图书馆。 非常感谢。

  • 我想将类型的Hashmap转换为POJO。我目前正在使用jackson进行转换,但是,由于请求是API请求,用户可能会提供比所需更多的字段。例如,hashmap可以是: 虽然波乔很简单 使用ObjectMapper时。convertValue,除非hashmap与pojo之间存在一对一的映射,否则将抛出IllegalArguemetException。我想做的是,如果有字段,那么映射字段。否则将其

  • 问题内容: 我正在寻找仅使用JSTL设置HashMap的键值对。这可能吗? 我知道如何检索键值对,但是还没有找到设置它们的方法。 任何帮助,将不胜感激。 使用JSTL检索HashMap键/值对的示例: 问题答案: 您可以使用。

  • 问题内容: 我当前正在从文本文件中读取200万行,如上一个问题中所述 。Java读取200万行文本文件的最快方法 现在,我将这些信息存储到HashMap中,并希望通过TreeMap对其进行排序,因为我想使用ceilingkey。以下方法正确吗? 问题答案: HashMap hashMap = new HashMap (); TreeMap treeMap = new TreeMap (); tre

  • 我有一个hashmap,我正试图将其插入MongoDB(3.6版)。我知道insertMany()方法——它只获取文档列表。我无法创建列表,因为我的数据中有重复项,我想消除它们。这就是我创建hashmap的原因。有没有办法将hashmap插入Mongodb?我找到了一个链接https://www.mkyong.com/mongodb/java-mongodb-insert-a-document/这

  • 我有一点问题试图传入一个文件读取我的程序和排序一致。我不习惯处理文件,我没有办法实现这一点。 ///////////类读取文件///////////////////////////////////////////////////////////////////// 导入java.io.*;公共类InFileReader{ private BufferedReader inputStream=空;