当用户使用不同的语言时,工作表的名称会发生​​变化

The names of sheets are changed when users use different languages

我使用公式 {'Form Responses 1'! A1: G; 'Form Responses 2'! A2: G; ...} 将所有 sheet 的数据合并为一个 sheet。但是,当用户使用英语以外的语言时,sheet 的名称会发生​​变化,并且相关的公式会损坏。 谁能帮我解决这个问题,先谢谢了。

代码:

 function copy() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var SpssId = ss.getSheetByName('title').getRange('AH6').getValue();
    var destinationSpss = SpreadsheetApp.openById(SpssId);
    for (var i = 1; i < destinationSpss.getNumSheets(); i++) {
    var index = destinationSpss.getSheetByName('index');
    index.getRange(i+1,2,1,4)
    .setFormulas([["='Form Responses "+i+"'!B2","='Form Responses "+i+"'!D2","='Form Responses "+i+"'!C2","='Form Responses "+i+"'!E2"]]);
    }}

感谢您提供代码。看到您目前的情况非常有帮助。

我们可以假设 index 是目标传播 sheet 中唯一不是表单响应 sheet 之一的 sheet 吗?从您的代码来看,我们似乎可以这样假设。

那么我们可以只使用 Spreadsheet.getSheets() to get an array of all the sheets and Sheet.getName() 来获取他们的名字,而不考虑语言:

function copy() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var SpssId = ss.getSheetByName('title').getRange('AH6').getValue();
  var destinationSpss = SpreadsheetApp.openById(SpssId);

  var sheets = destinationSpss.getSheets()  // Get an array of the sheets
  var index = destinationSpss.getSheetByName('index');
  for (var i = 0; i < sheets.length; i++) {
    var sheetName = sheets[i].getName();
    if (sheetName === 'index') break;
    index.getRange(i + 1, 2, 1, 4)
      .setFormulas([[`="${sheetName}"!B2`,`="${sheetName}"!D2`,`="${sheetName}"!C2`,`="${sheetName}"!E2`]])
  }
}

(我正在使用 template literals 来格式化公式字符串,这只是让代码更简洁,但这当然不是必需的。)

你总能假设 index sheet 在索引 0 处吗?我不确定你是否可以,所以我会扩展你的 for 循环以包含 i = 0 并添加检查 if (sheetName === 'index') break; 以中断如果你在 index sheet.

顺便说一句,您会看到我也将 var index = destinationSpss.getSheetByName('index'); 移到了 for 循环之外。应用程序脚本 API 对于某些操作可能会很慢,并且由于您在每次迭代中引用相同的 index sheet,如果您调用此 [=11],您的代码会更快=] sheet 就一次。