如何将来自多个 g-sheets 的数据合并为一个?
How can I combine data from multiple g-sheets into one?
这里是 link 的例子:
我想将“第一”、“第二”和“第三”选项卡中的数据合并到“合并”选项卡中,所有选项卡都在同一 Headers(标题、类型、流派)
如果有脚本,请告诉我 - 因为我需要使用它的实际文档有超过 30 个选项卡,公式可能会崩溃。
解释:
以下脚本使用 forEach 遍历 sheet,
不包括 exclude_sheets
数组中提到的那些。
对于每个 sheet,它会将您需要在脚本开头设置的特定范围之间的值存储到 data
数组。
范围从第第6行(start_row
)开始,第列A(start_col=1
) 和 C 列 (end_col = 3
)。结束行被定义为包含内容的最后一行,因此您无需手动设置它并且它在 sheet 之间也可以不同。但是,sheet 之间的起始行和列范围必须相同。
它最终将 data
粘贴到从单元格 A2 开始的测试 sheet (res_sheet = 'Test'
)。
请随意修改以上参数,但请尊重底层逻辑,否则脚本将无法正常运行。
Google Apps 脚本解决方案:
function myFunction() {
const ss = SpreadsheetApp.getActive();
const sheets = ss.getSheets();
const exclude_sheets = ['Combined','Test'];
const res_sheet = 'Test';
const start_row = 6;
const start_col = 1;
const end_col = 3;
const data = []
sheets.forEach(sh=>{
if(!exclude_sheets.includes(sh.getName())){
let temp = sh.getRange(start_row,start_col,sh.getLastRow()-start_row+1,end_col).getValues()
data.push(...temp);
}});
ss.getSheetByName(res_sheet).getRange(2,1,data.length,data[0].length).setValues(data);
}
请确保在使用此解决方案之前已启用 V8 runtime enviroment。
参考文献:
- getSheets()
- getLastRow()
- What does the range method getValues() return and setValues() accept?
- Spread syntax (...)
- forEach()
- includes()
这里是 link 的例子:
我想将“第一”、“第二”和“第三”选项卡中的数据合并到“合并”选项卡中,所有选项卡都在同一 Headers(标题、类型、流派)
如果有脚本,请告诉我 - 因为我需要使用它的实际文档有超过 30 个选项卡,公式可能会崩溃。
解释:
以下脚本使用 forEach 遍历 sheet, 不包括
exclude_sheets
数组中提到的那些。对于每个 sheet,它会将您需要在脚本开头设置的特定范围之间的值存储到
data
数组。范围从第第6行(
start_row
)开始,第列A(start_col=1
) 和 C 列 (end_col = 3
)。结束行被定义为包含内容的最后一行,因此您无需手动设置它并且它在 sheet 之间也可以不同。但是,sheet 之间的起始行和列范围必须相同。它最终将
data
粘贴到从单元格 A2 开始的测试 sheet (res_sheet = 'Test'
)。
请随意修改以上参数,但请尊重底层逻辑,否则脚本将无法正常运行。
Google Apps 脚本解决方案:
function myFunction() {
const ss = SpreadsheetApp.getActive();
const sheets = ss.getSheets();
const exclude_sheets = ['Combined','Test'];
const res_sheet = 'Test';
const start_row = 6;
const start_col = 1;
const end_col = 3;
const data = []
sheets.forEach(sh=>{
if(!exclude_sheets.includes(sh.getName())){
let temp = sh.getRange(start_row,start_col,sh.getLastRow()-start_row+1,end_col).getValues()
data.push(...temp);
}});
ss.getSheetByName(res_sheet).getRange(2,1,data.length,data[0].length).setValues(data);
}
请确保在使用此解决方案之前已启用 V8 runtime enviroment。
参考文献:
- getSheets()
- getLastRow()
- What does the range method getValues() return and setValues() accept?
- Spread syntax (...)
- forEach()
- includes()