問題:
感謝@Tanaike 的出色幫助,我能夠修改下面的腳本以從一個源作業表復制所有非空行并將這些行放入目標作業表中。現在我希望能夠從多個源作業表(而不是僅僅從一個源作業表)復制所有非空行,并將這些行放入單個作業表目標中。
更具體地說:我有 20 個源作業表和 1 個我稱為“ Mastersheet ”的單個目標作業表。我想從所有 20 張紙中復制所有非空行并將它們放入 1 張紙中(因此,放入“母版”中)。
問題:
如何從 20 個源作業表中復制所有非空行并將它們放入一張作業表中(因此,放入“母版”)?
非常感謝您的幫助:)
function copyAndAddNewEntries() {
var sourceSheet = SpreadsheetApp.openById('SOURCE_SHEET_ID').getSheetByName('SOURCE_SHEET_NAME');
var sourceSheetrange = sourceSheet.getDataRange();
var [, ...sourceSheetData] = sourceSheetrange.getValues();
sourceSheetData = sourceSheetData.filter(e => e.join("") != "");
var targetSheet = SpreadsheetApp.openById('TARGET_SHEET_ID').getSheetByName('TARGET_SHEET_NAME');
targetSheet.getRange(targetSheet.getLastRow() 1, 1, sourceSheetData.length, sourceSheetData[0].length).setValues(sourceSheetData);
}
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想從一個 Google 電子表格中的 20 個作業表中檢索值。在這種情況下,您希望通過洗掉空行來檢索值。
- 您想將檢索到的值放入另一個電子表格的目標作業表中。
在這種情況下,以下修改后的腳本如何?
修改后的腳本:
function copyAndAddNewEntries() {
var sheetNames = ["Sheet1", "Sheet2",,,]; // Please set the sheet names you want to use.
var sourceSs = SpreadsheetApp.openById('SOURCE_SHEET_ID');
var {values, max} = sourceSs.getSheets().reduce((o, s) => {
if (sheetNames.includes(s.getSheetName())) {
var [, ...v] = s.getDataRange().getValues();
var temp = v.filter(e => e.join("") != "");
if (temp.length > 0) {
o.values = o.values.concat(temp);
var len = temp.length;
o.max = o.max < len ? len : o.max;
}
}
return o;
}, {values: [], max: 0});
values = values.map(r => {
var len = r.length;
return len < max ? r.concat(Array(max - len)) : r;
});
var targetSheet = SpreadsheetApp.openById('TARGET_SHEET_ID').getSheetByName('TARGET_SHEET_NAME');
targetSheet.getRange(targetSheet.getLastRow() 1, 1, values.length, values[0].length).setValues(values);
}
- 在這個修改后的腳本中,值是從一個電子表格中的多個作業表中檢索的。并且,空行被洗掉。并且,調整值的每個元素的陣列長度。并且,這些值被放到目標表中。
參考:
- 獲取表()
- 降低()
- 地圖()
添加:
從您的以下回復中,
只要所有源表都在同一個電子表格中,腳本就可以正常作業。但我希望腳本還包括其他電子表格中的源表。示例:電子表格 A 有作業表 1、2、3 和 4,電子表格 B 有作業表 4、5、6 和 7。應將電子表格 A 和 B 中所有這些作業表中的非空行復制并粘貼到電子表格“主表”。那可能嗎?再次感謝您的幫助:)
下面的示例腳本怎么樣?
修改后的腳本:
function copyAndAddNewEntries() {
// Please set your Spreadsheet IDs and sheet names.
var spreadsheets = [
{ssId: 'SOURCE_SHEET_ID1', sheetNames: ["Sheet1", "Sheet2",,,]},
{ssId: 'SOURCE_SHEET_ID2', sheetNames: ["Sheet1", "Sheet2",,,]},
,,
,
];
var {values, max} = spreadsheets.reduce((o, {ssId, sheetNames}) => {
SpreadsheetApp.openById(ssId).getSheets().forEach(s => {
if (sheetNames.includes(s.getSheetName())) {
var [, ...v] = s.getDataRange().getValues();
var temp = v.filter(e => e.join("") != "");
if (temp.length > 0) {
o.values = o.values.concat(temp);
var len = temp.length;
o.max = o.max < len ? len : o.max;
}
}
});
return o;
}, {values: [], max: 0});
values = values.map(r => {
var len = r.length;
return len < max ? r.concat(Array(max - len)) : r;
});
var targetSheet = SpreadsheetApp.openById('TARGET_SHEET_ID').getSheetByName('TARGET_SHEET_NAME');
targetSheet.getRange(targetSheet.getLastRow() 1, 1, values.length, values[0].length).setValues(values);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/332740.html
標籤:谷歌应用程序脚本
