我正在使用CheerioGS圖書館:
ID →1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0
專案 → 
由于某種原因,最后一列中的某些值沒有被收集,因此其中一些值在作業表中的位置是錯誤的。
例如:如果第一個值沒有被收集,而第二個被收集了,那么第二個將在該列的第 1 行,那就錯了。
如何-在未收集值的行中添加破折號?
uj5u.com熱心網友回復:
let data = [];
let rows = $('tbody > tr');
rows.each((i, row) => {
const newDataRow = [
$(row).find('th > h4 > b').text().trim(),
$(row).find('td > div:nth-child(1)').text().trim(),
$(row).find('td > div:nth-child(2)').contents().last().text().trim(),
$(row).find('td > div:nth-child(3)').contents().last().text().trim(),
$(row).find('td b:nth-child(2)').text().trim(),
];
data.push(newDataRow);
});
// fill empty values
data = data.map(row => row.map(el => el ? el : '-'));
// write values to sheet
const startRow = 1;
const startCol = 1;
const numRows = data.length;
const numCols = data[0].length;
sheet.getRange(startRow, startCol, numRows, numCols).setValues(data);
加載 Cheerio 物件后對部分所做的更改:
- 您需要收集所有資料,然后
setValues在 1 個請求中將其 ( ) 寫回作業表,以減少腳本執行時間并提高性能。 - 您需要
let rows = $('tbody > tr')使用 Cheerio 回圈行 ( ),以便能夠組合每行所需的值,以便它可以在電子表格中顯示為一行。
第二個更改更重要,因為它使您能夠以后按行處理資料,例如排序、過濾等。
uj5u.com熱心網友回復:
不要使用Array.prototype.forEachandRange.setValue一次一個單元格地填充一列,而是構建一個值陣列,然后使用 . 一次添加所有值Range.setValues。
為了做到這一點,不是一次td從所有表格(tbody)中抓取一個單元格(),而是抓取整個表格(tbody)并檢查所需的單元格/內容是否存在,如果不存在則添加一個空字串('')到相應位置正在構建的陣列。
資源
- https://developers.google.com/apps-script/guides/support/best-practices?hl=en
uj5u.com熱心網友回復:
你想迭代那些 tr。這將給出一個二維陣列(未經測驗)
$('tr').get().map(tr => $(tr).find("h4,.col-md-12").get().map(el => $(el).text()))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/431149.html
標籤:javascript 数组 谷歌应用脚本 谷歌表格 切里奥
