【问题标题】:Fetching value from webtable and write in excel sheet one by one of each row in a loop从 webtable 中获取值并在循环中逐行写入 excel 表
【发布时间】:2015-07-25 23:19:51
【问题描述】:

1) 我正在尝试从应用程序的 webtable 中读取值并将其一一写入到 Excel 工作表中。

2) webtable 的每一行中有 4 个值需要写入 excel 工作表,但每一行中有一些图像我使用下面的代码忽略了 bu。

text.length()>2
.

3) webtable 中将有 200-300 行需要读取并写入 Excel 工作表。

这是我尝试过的代码。但我不知道如何将它一一写入excel表的每一行。请在这方面帮助我。

        //get the table
		WebElement statusTable = browser.findElement(By.id("projectstatus"));
		
		//Get all the rows in the table
		List<WebElement> allRows = statusTable.findElements(By.tagName("tr"));
		
		//Get the size(row no) of allRows
		int rowSize = allRows.size();
		System.out.println(rowSize);
	
		
		for (WebElement row : allRows) {
			
			//Get all cell values in each row
			List<WebElement> allCells = row.findElements(By.tagName("td"));
			//System.out.println(allCells.size());
			
			if(allCells.size() > 1){
				for (WebElement cell : allCells) {
					
					
					String text = cell.getText();
					if(text.length()>2){
						
				  String value = cell.getText();
						
					}					
				}
			}
			

  // locate the test xl file				
  File file = new File("e:\\Testing_emi.xls");				
  // create input stream				
  FileInputStream fis = new FileInputStream(file);				
  // create workbook				
  HSSFWorkbook wb = new HSSFWorkbook(fis);				
  // get sheet				
  HSSFSheet sheet1 = wb.getSheet("Sheet1");				
  // get rows				
  
  
  			
   
   HSSFRow row = sheet1.getRow(1);				
   
   
					
  HSSFCell cellEx = row.getCell(0);				
   if (cellEx == null) {				
    cellEx = row.createCell(0);				
   }				
   cellEx.setCellValue(value);

【问题讨论】:

  • 首先,您尝试将值写入电子表格的所有代码都应该在您的 for 循环中。
  • 在将 excel 编写代码移入 for 循环之后,您能否进一步解释一下接下来应该做什么。因为每行(4 个单元格)内必须写入四 (4) 个值的 Excel 表。

标签: java excel selenium selenium-webdriver


【解决方案1】:
//get the table
    WebElement statusTable = browser.findElement(By.id("projectstatus"));

    //Get all the rows in the table
    List<WebElement> allRows = statusTable.findElements(By.tagName("tr"));

    //Get the size(row no) of allRows
    int rowSize = allRows.size();
    System.out.println(rowSize);


    // locate the test xls file             
  File file = new File("e:\\Testing_emi.xls");              
  // create input stream                
  FileInputStream fis = new FileInputStream(file);              
  // create workbook                
  HSSFWorkbook wb = new HSSFWorkbook(fis);              
  // get sheet              
  HSSFSheet sheet1 = wb.getSheet("Sheet1");             
  // get rows               


   HSSFRow row;             

    for (int i=0; i<rowSize; i++) 
    {
        WebElement webRow = allRows.get(i);
        //Get all cell values in each row
        List<WebElement> allCells = webRow.findElements(By.tagName("td"));
        //System.out.println(allCells.size());

        if(allCells.size() > 1)
        {
            HSSFRow excelRow = sheet1.createRow(i);

            for (int j=0; j<allCells.size(); j++) 
            {
                WebElement webCell = allCells.get(j);
                String text = webCell.getText();
                if(text.length()>2)
                {
                    Cell excelCell = excelRow.createCell();
                    excelCell.setValue(webCell.getText());
                }                   
            }
        }
    }

  sheet1.close();

【讨论】:

  • Thankyou @Shail :) 它的工作原理,我能够在每行中打印 4 个值,但它是在随机单元格中写入的,而不是按 1、2、3 和 4 个单元格的顺序。
  • 我用过这个代码 Cell excelCell = excelRow.createCell(j); excelCell.setcellValue(webCell.getText());请告诉我如何按顺序打印 1,2,3 n 4 个单元格中的值
【解决方案2】:

从应用程序的Web Table中读取值,并将其逐个写入Excel工作表。Web Table每行有5个值,需要写入Excel工作表。下面是工作代码。

System.setProperty("webdriver.chrome.driver","C:\\Users\\Documents\\Selenium jars\\chromedriver_win32\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("https://cosmocode.io/automation-practice-webtable/");
        WebElement table = driver.findElement(By.xpath("//*[@id='countries']/tbody"));
        List<WebElement> rows = table.findElements(By.tagName("tr"));
        int rowcount = rows.size();
        FileOutputStream fis = new FileOutputStream(new File("C:\\Users\\Documents\\Selenium\\output.xlsx"));
        XSSFWorkbook wb = new XSSFWorkbook();
        XSSFSheet sh = wb.createSheet("First Sheet");
        for (int row = 0; row < rowcount; row++) {
            List<WebElement> columns_inrow = rows.get(row).findElements(By.tagName("td"));
            int columns_count = columns_inrow.size();
            System.out.println("Number of cells in Row " + row + " are " + columns_count);
            Row ro = sh.createRow(row);
            for (int column = 0; column < columns_count; column++) {

                String celltext = columns_inrow.get(column).getText();
                System.out.println(
                        "Cell Value of row number " + row + " and column number " + column + " Is " + celltext);
                ro.createCell(column).setCellValue(celltext);
            }
            System.out.println("===========================");

        }
        wb.write(fis);
        wb.close();

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多