Je souhaite lire une table html et écrire des données dans Excel. Quel est le meilleur et le moyen le plus rapide d'y parvenir? J'ai un tableau HTML contenant 13529 lignes avec 37 colonnes. Ce qui prend beaucoup trop de temps pour lire les données ~ 1Hr +, et je ne peux pas imaginer combien de temps cela prendrait pour écrire ces données pour exceller. Je ne sais pas ce que je fais mal ici. Toute suggestion est appréciée. Merci d'avance.Lire le tableau HTML et écrire dans Excel - Selenium WebDriver utilisant POI
Lire les données de code Tableau HTML:
private List<WebElement> getData(String object){
System.out.println("Object = ="+OR.getProperty(object));
List<WebElement> tr_collection = driver.findElements(By.xpath(OR.getProperty(object)));
System.out.println("NUMBER OF ROWS IN THIS TABLE = " + tr_collection.size());
int row_num, col_num;
row_num = 1;
for (WebElement trElement : tr_collection) {
List<WebElement> td_collection = trElement.findElements(By.xpath("td")).size() == 0?trElement.findElements(By.xpath("th")):trElement.findElements(By.xpath("td"));
System.out.println("NUMBER OF COLUMNS=" + td_collection.size());
col_num = 1;
for (WebElement tdElement : td_collection) {
System.out.println("row # " + row_num + ", col # " + col_num + ", text | " + tdElement.getText());
col_num++;
}
row_num++;
System.out.println("================================================================================");
}
return tr_collection;
}
écrire des données dans Excel Sheet:
private void writeExcel(List<WebElement> tr_collection,XSSFWorkbook workbook,XSSFSheet spreadsheet,String fileName){
//HSSFRow row;
for (int i=0; i<tr_collection.size(); i++)
{
WebElement webRow = tr_collection.get(i);
//Get all cell values in each row
List<WebElement> allCells = new ArrayList<>();
if(webRow.findElements(By.tagName("th")).size() > 0){
allCells = webRow.findElements(By.tagName("th"));
}else{
allCells = webRow.findElements(By.tagName("td"));
}
//System.out.println(allCells.size());
if(allCells.size() > 1)
{
XSSFRow excelRow = spreadsheet.createRow(i);
for (int j=0; j<allCells.size(); j++)
{
WebElement webCell = allCells.get(j);
String text = webCell.getText();
XSSFCell cell = excelRow.createCell(j);
cell.setCellValue(text);
}
}
}
try {
FileOutputStream fileOut = new FileOutputStream(fileName);
//write this workbook to an Outputstream.
workbook.write(fileOut);
fileOut.flush();
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Faites-moi savoir si d'autres détails sont requis. – Nag
Pouvez-vous partager un lien vers la page qui contient la table ou un exemple de tableau comme ce que vous êtes en train de coder? Une suggestion pour rendre la sortie plus rapide est d'écrire en CSV (fichier texte). Vous pouvez ensuite importer le fichier CSV dans Excel facilement et cela vous fera probablement gagner BEAUCOUP de temps. L'utilisation d'un tampon d'écriture aidera aussi les choses à aller plus vite. – JeffC
Si vous êtes capable de dire le but exact de le faire, il existe de nombreuses options. Si c'est quelque chose comme un utilitaire pour réduire votre travail général, vous pouvez même copier et coller en utilisant la classe d'actions et l'API Robot. –