目標:將來自 90 多個谷歌作業簿的資料(全部具有相同的作業表名稱)堆疊到一個主作業表中以進行報告
資訊:所有作業表都有相同的列數。我有以下腳本,但它運行不正常,我認為問題在于我如何在粘貼到輸出表之前將資料快取/推送到陣列。
我正在嘗試構建一個陣列,然后一次性粘貼它。
我堆疊的表格有 47 列,行數未知。打開床單的部分作業正常。
// Get the data from the worksheets
var indexsheet = SpreadsheetApp.getActive().getSheetByName("Index");
var outputsheet = SpreadsheetApp.getActive().getSheetByName("Output");
var response = SpreadsheetApp.getUi().prompt('Current Cycle', 'Enter Cycle Name Exactly in YY-MMM-Cycle# format', SpreadsheetApp.getUi().ButtonSet.OK_CANCEL)
var CurrentCycleName = response.getResponseText()
// Assign datasets to variables
var indexdata = indexsheet.getDataRange().getValues();
// For each workbook in the index sheet, open it and copy the data to a cache
indexdata.forEach(function(row, r) {
try {
//open Entity specific workbook
var workbookid = indexsheet.getRange(r 1, 7, 1, 1).getValues();
var Entityworkbook = SpreadsheetApp.openById(workbookid)
// Open workhseet
Entitysheet.getSheetByName(CurrentCycleName)
// Add PR Data to cache - stacking for all countrys
var PRDataCache = Entitysheet.getDataRange().push()
} catch {}
})
// Set the all values of the sheet at once
outputsheet.getRange(r 1, 14).setValue('Issue Splitting Data')
Entitysheet.getRange(2, 1, PRDataCache.length || 1, 47).setValues(PRDataCache)
};
這是我們從中獲取作業簿ID以打開每個檔案的索引選項卡
這是輸出檔案,我們正在堆疊來自每個國家的所有資料
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想從“索引”表的“G”列中檢索電子表格 ID。
- 您想使用對話框給出特定的作業表名稱。
- 您想從所有電子表格的規格表中檢索所有值。在這種情況下,您要洗掉標題行。
- 您想將檢索到的值放在“輸出”表上。
在這種情況下,下面的示例腳本怎么樣?
示例腳本:
function myFunction() {
var ss = SpreadsheetApp.getActive();
var indexsheet = ss.getSheetByName("Index");
var outputsheet = ss.getSheetByName("Output");
var response = SpreadsheetApp.getUi().prompt('Current Cycle', 'Enter Cycle Name Exactly in YY-MMM-Cycle# format', SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
var CurrentCycleName = response.getResponseText();
var ids = indexsheet.getRange("G1:G" indexsheet.getLastRow()).getValues();
var values = ids.reduce((ar, [id]) => {
try {
var [, ...values] = SpreadsheetApp.openById(id).getSheetByName(CurrentCycleName).getDataRange().getValues();
ar = [...ar, ...values];
} catch (e) {
console.log(`"${id}" was not found.`);
}
return ar;
}, []);
if (values.length == 0) return;
// If the number of columns is different in all Spreadsheets, please use the following script.
// var maxLen = Math.max(...values.map(r => r.length));
// values = values.map(r => r.length < maxLen ? [...r, ...Array(maxLen - r.length).fill("")] : r);
outputsheet.getRange(outputsheet.getLastRow() 1, 1, values.length, values[1].length).setValues(values);
}
筆記:
- 當電子表格 ID 的數量很大時,處理時間可能會超過 6 分鐘。我很擔心這個。那時,如何分離電子表格 ID?
參考:
- 減少()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/452731.html
