google-apps-script - 谷歌表格将多张表格与脚本合并为一张表格
问题描述
我需要将几张纸与脚本组合成一张纸。此外,在组合工作表时,我需要通过将它们的名称检查到两列来将它们分开。例如,包含单词“cat”的工作表应位于左列,包含单词“dog”的工作表应位于右列。目前,我有一个脚本,可以将具有特定单词的所有工作表过滤到一个数组中。我是谷歌表格的新手,任何帮助将不胜感激。
这是我当前的脚本:
function myFunction()
{
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var newSheet = activeSpreadsheet.getSheetByName("AllSheets");
if (newSheet != null) {
activeSpreadsheet.deleteSheet(newSheet);
}
newSheet = activeSpreadsheet.insertSheet();
newSheet.setName("AllSheets");
const ss = SpreadsheetApp.getActiveSpreadsheet();
const allSheets = ss.getSheets();
const allSheets_names=allSheets.map(sheet=>sheet.getSheetName())
const neededSheets= ["Cat", "Dog"];
const filteredListOfSheetsNames = []
neededSheets.forEach(ns =>allSheets_names.forEach( (as,index) =>
{if (as.indexOf(ns)>-1){filteredListOfSheetsNames.push(as)}}))
const filteredListOfSheets = filteredListOfSheetsNames.map(name =>ss.getSheetByName(name))
}
解决方案
最好是创建两个数组 - 用于汇总表的两个不同范围
- 一个你附加“猫床单”,另一个“狗床单”
- 由于您已经正确地找到并排序了您感兴趣的工作表,因此您可以在内部循环中定义一个辅助数组(每种类型的工作表都有一个单独的数组),您可以将来自一种类型的所有工作表的数据附加到该数组中
- 将此数组设置为目标工作表的所需范围(边)
- 了解原始表格的(最大)尺寸以正确划分目标表格的最小/右侧非常重要。
样本:
function myFunction()
{
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var newSheet = activeSpreadsheet.getSheetByName("AllSheets");
if (newSheet != null) {
activeSpreadsheet.deleteSheet(newSheet);
}
newSheet = activeSpreadsheet.insertSheet();
newSheet.setName("AllSheets");
const ss = SpreadsheetApp.getActiveSpreadsheet();
const allSheets = ss.getSheets();
const allSheets_names=allSheets.map(sheet=>sheet.getSheetName())
const neededSheets= ["Cat", "Dog"];
const filteredListOfSheetsNames = [];
neededSheets.forEach(function(ns){
var i = neededSheets.indexOf(ns);
filteredListOfSheetsNames[i]=[];
allSheets_names.forEach( (as,index) => {
if (as.indexOf(ns)>-1){
filteredListOfSheetsNames[i].push(as);
}
}
)
const filteredListOfSheets = filteredListOfSheetsNames[i].map(name =>ss.getSheetByName(name));
var array = [];
filteredListOfSheets.forEach(function(sheet){var values = sheet.getRange(1,1,sheet.getLastRow(),13).getValues(); array.push(values);});
array = [].concat.apply([],array);
if(array.length > 0){
newSheet.getRange(1,i*13+1, array.length, array[0].length).setValues(array);
}
}
)
}
推荐阅读
- reactjs - React - Ant Design Form-Item name props 破坏了 Select 值
- material-ui - 夏令时后 DateUtils 中的问题
- ios - 标记为“allowsDirectInteraction”的视图内的直接交互(当 VoiceOver 处于活动状态时)不起作用
- azure-functions - Azure Function Poison 队列警报
- flutter - 我需要在颤动中用勾号突出显示按钮,并在颤动中淡出其他两个按钮
- google-chrome - 在 Web 应用程序上模拟移动键盘以进行调试
- java - 正则表达式查找除模式之外的所有内容
- laravel - 在 gitlab-ci 配置上使用多个存储库
- python - 如何在 pyspark 中使用 7 天的滚动窗口使用 avg 实现填充 na
- r - R用NA替换第一个n列值