を使用して、私はHTMLのテーブルを読み込み、Excelにデータを書きたいです。 これを達成する最善の方法は何ですか? 私は、3729の行と13529の行を含むHTMLテーブルを持っています。これは、データを読み取るには時間がかかりすぎる〜1Hr +であり、このデータを書き込むためにどれくらいの時間がかかるか想像できません。 ここで何が間違っているのか分かりません。 ご迷惑をおかけして申し訳ございません。前もって感謝します。 Excelシートに読むHTMLテーブルやExcelへの書き込み - セレンwebdriverをするPOI
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;
}
書き込みデータ:HTML表コードから
データの読み取り
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();
}
}
さらなる詳細が必要な場合はお知らせください。 – Nag
テーブルを含むページへのリンクや、コーディングしているもののようなサンプルテーブルを共有できますか?出力を高速化するための1つの提案は、CSV(テキストファイル)に書き込むことです。その後、CSVをExcelに簡単にインポートすることができ、おそらく多くの時間を節約できます。書き込みバッファを使用すると、処理が高速化するのに役立ちます。 – JeffC
あなたがそれを行う正確な目的を伝えることができるなら、多くの選択肢があります。あなたの一般的な仕事を減らすためのユーティリティのようなものなら、あなたはアクションクラスとロボットAPIを使ってコピー&ペーストすることさえできます。 –