Ich möchte eine HTML-Tabelle lesen und Daten in Excel schreiben. Was ist der beste und schnellste Weg, um das zu erreichen? Ich habe eine HTML-Tabelle mit 13529 Zeilen mit 37 Spalten. Was zu lange dauert, um die Daten ~ 1Hr + zu lesen, und ich kann mir nicht vorstellen, wie lange es dauern würde, diese Daten zu schreiben, um zu übertreffen. Nicht sicher, was mache ich hier falsch. Jeder Vorschlag wird geschätzt. Danke im Voraus.HTML-Tabelle lesen und in Excel schreiben - Selenium WebDriver mit POI
Lesen von Daten aus HTML-Tabelle Code:
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;
}
Daten schreiben zu Excel-Blatt:
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();
}
}
Lassen Sie mich wissen, wenn weitere Details erforderlich sind. – Nag
Können Sie einen Link zu der Seite teilen, die die Tabelle oder eine Beispieltabelle enthält, für die Sie codieren? Ein Vorschlag, die Ausgabe schneller zu machen, besteht darin, in CSV (Textdatei) zu schreiben. Sie können dann die CSV-Datei leicht in Excel importieren und es wird Ihnen wahrscheinlich viel Zeit sparen. Die Verwendung eines Schreibpuffers hilft auch, die Dinge schneller zu machen. – JeffC
Wenn Sie in der Lage sind, den genauen Zweck zu erkennen, gibt es viele Möglichkeiten. Wenn es etwas wie ein Dienstprogramm ist, um Ihre allgemeine Arbeit zu reduzieren, können Sie sogar kopieren und einfügen mit Hilfe der Action-Klasse und der Robot-API. –