【发布时间】:2020-12-13 16:39:44
【问题描述】:
- 我有一张名为表单响应的表单,它从 google 获取输入 表格,然后我创建了带有 C 列名称的表格,即 员工代码并附加表单响应中的所有相应行 到新创建的工作表。
- 现在我有名称为员工代码的工作表(在工作表的 c 列中)。然后我想从这个主工作表(名称为员工代码的工作表)创建辅助工作表,其名称使用附加到员工代码的 E 列值。例如:如果 Emp 代码是 10003825 并且 E 列中的值是 ASR,工作表名称应为 10001515ASR。
- 在 E 列中只有 4 个值 ADC、ASR ACC、RSR。让主工作表(名称为员工代码的工作表)始终保留 ADC 行,而当其他包含 ASR、ACC、RSR 的行出现时,将相应的行附加到新创建的工作表中(即,如果 ASR 行转到 10001515ASR)。
- 我已经展示了我的当前工作表和预期输出
我开发的代码如下图:
function switchSheet(){
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheets = activeSpreadsheet.getSheets();
for (var i = 1; i < sheets.length; i++) {
var p = sheets[i].getSheetName();
sheetCreateChannel(p);
}
}
function sheetCreateChannel(ss){
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = activeSpreadsheet.getSheetByName(ss);
var getNames = sheet1.getDataRange().getValues();
getNames.shift();
var sheets = activeSpreadsheet.getSheets();
var sheetsObj = {};
for (var i = 0; i < sheets.length; i++) {
sheetsObj[sheets[i].getSheetName()] = sheets[i];
for (var i = 0; i < getNames.length; i++) {
var r = getNames[i];
if (r[4].toString()== "ASR"&& !((ss+(r[4])) in sheetsObj)) {
var newSheet = activeSpreadsheet.insertSheet(ss + "ASR");
sheetsObj[ss+"ASR"] = newSheet;
}
else if (r[4].toString()== "ACC"&&!((ss+(r[4])) in sheetsObj)) {
var newSheet = activeSpreadsheet.insertSheet(ss + "ACC");
sheetsObj[ss+"ACC"] = newSheet;
}
else if (r[4].toString()== "RSR"&& !((ss+(r[4])) in sheetsObj)) {
var newSheet = activeSpreadsheet.insertSheet(ss + "RSR");
sheetsObj[ss+"RSR"] = newSheet;
}
else {
break;
}
}
}
var deleteRows = 0;
for (var i = 0; i < getNames.length; i++) {
var r = getNames[i];
if (r[4].toString() != "") {
if ((ss+(r[4])) in sheetsObj) {
var Q =ss+(r[4]);
sheetsObj[Q].appendRow(r);
}
deleteRows = i + 2;
}
}
sheet1.getRange(2, 1, deleteRows - 1, sheet1.getLastColumn()).clearContent();
}
【问题讨论】:
-
我必须为我糟糕的英语水平道歉。我能问一下您当前的剧本问题吗?
-
@Tanaike 我使用 C 列值从我的主工作表创建了一个工作表。现在我想使用使用 C 列创建的工作表作为主工作表创建工作表。我附上了我的工作表的屏幕截图
-
感谢您的回复。不幸的是,从您的回复和更新问题中,我仍然无法理解您当前的问题和目标。我为此道歉。你能给我一点时间了解一下吗?
-
我的英语很好,但我也听不懂这个要求。您声明您希望工作表名称为 EmployeeID + 列 E。好的...有什么问题?您可能会遇到一些重复的工作表名称。如果您能够正确执行您的代码,它会是什么样子?也许分享一个示例文件?
-
@Tanaike 问题是我必须从辅助工作表创建工作表,例如这里的 10001515 工作表来创建工作表 10001515ASR、10001515ACC、10001515RSR 但不是 10001515ADC。然后将所有与 ASR 相关的行附加到 10001515 到 10001515ASR 等等,但对于与 ADC 相关的所有行,让这些行保留在 10001515 中。每当更新主表时,此表也会在代码运行时更新,它不应该创建 10001515ASRASR 就像我每次更新时都会遇到这样的错误
标签: google-apps-script google-sheets google-sheets-api