【发布时间】:2021-08-08 16:04:02
【问题描述】:
我收到包含一些随机行的电子表格,每次我需要将行组织在某些组中,并在 2 个组之间添加一个空白行。 我可以通过在一列中定义的标签或标识符号列来识别组,但我还需要获取可识别组正下方的行。
我已经将一些工作代码混合在一起以更改我需要的一些名称,并添加了一个将触发这些功能的菜单,但我什至无法理解如何将这些行分组和移动到我需要的顺序出现了。
有没有人知道我该如何构建它,或者有什么建议?
示例文件:
目的:
在文件中,我模拟了获取工作表的方式,我需要将第二个标识符行及其各自的总数(如下所示)排列在一起。
我添加了我一直在修改的代码,我也会在这里添加:
function onOpen() {
var ss = SpreadsheetApp.getActive();
var items = [
{name: 'Changenames', functionName: 'Changegroupnames'},
null, // Results in a line separator.
{name: 'Organize Rows', functionName: 'movingROWS'}
];
ss.addMenu('Organize', items);
}
function Changegroupnames(){
var sheet = SpreadsheetApp.getActiveSheet()
replaceInSheet(sheet,'GROUP 01 - 04 TOTALS','NRS EAST - CITY 01 HEADQUARTERS'),
replaceInSheet(sheet,'GROUP 03 - 04 TOTALS','NRS EAST - CITY 03 BASE'),
replaceInSheet(sheet,'GROUP 04 - 04 TOTALS','NRS EAST - CITY 04 BASE'),
replaceInSheet(sheet,'GROUP 09 - 04 TOTALS','NRS EAST - CITY 09 BASE'),
replaceInSheet(sheet,'GROUP 10 - 02 TOTALS','NRS WEST - CITY 10 HEADQUARTERS'),
replaceInSheet(sheet,'GROUP 06 - 02 TOTALS','NRS WEST - CITY 06 BASE'),
replaceInSheet(sheet,'GROUP 02 - 01 TOTALS','NRS NORTH - CITY 02 HEADQUARTERS'),
replaceInSheet(sheet,'GROUP 05 - 01 TOTALS','NRS NORTH - CITY 05 BASE'),
replaceInSheet(sheet,'GROUP 07 - 03 TOTALS','NRS SOUTH - CITY 07 HEADQUARTERS'),
replaceInSheet(sheet,'GROUP 07 - 03 TOTALS','NRS SOUTH - CITY 08 BASE')
;
}
function replaceInSheet(sheet, to_replace, replace_with) {
//get the current data range values as an array
var values = sheet.getDataRange().getValues();
//loop over the rows in the array
for(var row in values){
//use Array.map to execute a replace call on each of the cells in the row.
var replaced_values = values[row].map(function(original_value){
return original_value.toString().replace(to_replace,replace_with);
});
//replace the original row values with the replaced values
values[row] = replaced_values;
}
//write the updated values to the sheet
sheet.getDataRange().setValues(values);
}
function movingROWS(){
var sheet = SpreadsheetApp.getActiveSheet()
sheet.getRange("=$C2='City1'").moveTo(sheet.getRange("A502"));
}
编辑
正如@lamblichus 所要求的,我会尽量让它在视觉上更清晰。我无法添加图像,但我会添加指向它们的链接。希望它更容易理解。
因为它在第一张图片中可见,我有一个名为“第二个标识符”的列,后跟一个名为“第一个标识符名称”的列。我需要将工作表中具有相同第二个标识符编号的分组行排序在一起。
图片 01 - https://drive.google.com/file/d/1_LmYFE9jRGPD6VdOnp0cd1kjaCoysS7g/view?usp=sharing
每个单独的组必须一起移动,包括正下方包含该组总数的行。
使工作表看起来像这样:
图片 02 - https://drive.google.com/file/d/1mirRDEZRqmyWCLVrqT3KU5rFeFRLs4ar/view?usp=sharing 图片 03 - https://drive.google.com/file/d/1MzhwWOtf6jFjRkdXdRWbCZkZ5frprUX8/view?usp=sharing
然后,在属于第二个标识符组的最后一组之间添加一个空白行。
我希望我说得更清楚一点。
【问题讨论】:
-
您能否直观地阐明数据的当前结构以及期望的结果是什么?根据您提供的信息,我不清楚。
-
您提供了链接的三张图片中,只有最后一张可以访问。您可以将它们全部公开吗?
-
我很抱歉@lamblichus,只是这样做了。我以为我改变了所有图像。希望您现在可以访问它们
标签: google-apps-script google-sheets