当前位置: 首页 > 知识库问答 >
问题:

Google应用程序脚本中的字符串范围

路金鑫
2023-03-14

我有一个工作表,我需要从中获取值并在新工作表中进行设置,其中一个值需要我在索引20,26处对字符串值进行切片。我可以使用.getValue().slice(20,26)和.setValue()实现这一点。但是,在所有行中都设置了相同的数据,这是意料之中的,因为我只获得一个单元格的数据。为了解决这个问题,我尝试了一个for循环,但失败了。

当我尝试.getValues().slice(20,26)时,它返回一个空数组,该数组抛出以下错误:数据中的行数与范围中的行数不匹配。数据为0,但范围为20。

我的代码如下,我欢迎任何指导。

function pj() {
 // Get Active spreadsheet.
   var sheet = SpreadsheetApp.getActiveSpreadsheet();
 //Get last row processed and update
   var startRow =sheet.getSheetByName("Index").getRange("A1").getValue();
   startRow++;
// Get payments sheet.
var paymentSheet = sheet.getSheetByName("Payments");
var clientSheet = sheet.getSheetByName("Client Details");
var lastRow = paymentSheet.getLastRow();
//Inputs
var firstName = paymentSheet.getRange(startRow, 3, (lastRow-startRow+1), 1).getValues();
var lastName= paymentSheet.getRange(startRow, 4, (lastRow-startRow+1), 1).getValues();
var paymentId = paymentSheet.getRange(startRow, 14, (lastRow-startRow+1), 1).getValues().slice(20,26);
}

//Outputs
clientSheet.getRange(2,1,(lastRow-startRow+1),1).setValues(firstName);
clientSheet.getRange(2,8, (lastRow-startRow+1),1).setValues(paymentId);



//Update the last row processed
sheet.getSheetByName('Index').getRange("A1").setValue(lastRow);
}  

请查看我正在使用的工作表的图像,因为您将看到N列包含一个支付ID,它包含我需要提取的客户的唯一标识符,以便将此数据上载到Salesforce。问题似乎在于Logger.log在字符串穿过数组时正确地报告了字符串,但将长度报告为1。我尝试过以各种方式改变该列的格式,文本、数字等,但似乎对报告的长度没有任何影响。我假设这就是split函数不起作用的原因,但我不确定为什么会发生?Sheet

共有1个答案

岳正浩
2023-03-14

我猜了很多,但它应该看起来像这样:

function pj() {
  var ss=SpreadsheetApp.getActive();
  var isht=ss.getSheetByName("Index");
  var startRow=isht.getRange("A1").getValue()+1;
  var psht=ss.getSheetByName("Payments");
  var csht=ss.getSheetByName("Client Details");
  var lastRow=psht.getLastRow();
  var prg=psht.getRange(startRow,1,psht.getLastRow()-startRow+1,14);
  var pvals=prg.getValues();
  pvals.forEach(function(r,i){
    csht.getRange(i+2,1).setValue(r[2]);
    csht.getRange(i+2,2).setValue(r[3]);
    csht.getRange(i+2,8).setValue(r[13].slice(20,26));
  });
  isht.getRange("A1").setValue(csht.getLastRow());
}
 类似资料:
  • 我有一个谷歌表单,在a列中,我需要用无替换按钮上的文本。该列在几个不同的行中具有需要保持不变的标题。我写了以下脚本: 当我尝试运行脚本时,会出现以下错误:数据中的行数与范围中的行数不匹配。数据有1,但范围有2。 我知道这与具有比其他行更多列的行有关,但不确定如何修复代码。

  • 使用谷歌表格应用程序脚本,是否有可能得到X单元格的单元格范围如下所示: 我不想更改每个单元格的颜色,只想更改那些具有正确条件的单元格。 我知道这样做是可能的: 但是这种方法需要很长时间才能完成for循环,因为有数百个单元需要扫描。我宁愿只对整个范围使用一次getRange(而不是一次只使用一个单元格),然后从该范围使用getRange(它应该生成一个2d数组,对吗?)设置单元格值。我想那会快得多。

  • 我试图用超链接填充单元格到Google Sheets应用程序脚本中的范围,与我在GUI中完成时所期望的结果相同。我设法以"gid=..."的形式创建了工作表的超链接...是一个工作表ID。但是我很难得到在GUI中生成超链接时使用的rangeID,例如。 是否可以在应用程序脚本中创建指向范围的超链接?

  • 我正在开发一个GoogleApps脚本电子表格应用程序,我希望该程序具备的能力之一是根据来自两个不同列的数据自动排序一系列表单响应。所以我想按第16列中的数据排序,然后按第1列排序。我可以使用以下方法手动实现此功能:https://drive.googleblog.com/2010/06/tips-tricks-advanced-sorting-rules-in.html 目前我正在运行函数与第一

  • 我是编程新手,所以请耐心听我说。我正在编写一个脚本,除其他外,在编辑时获取单元格值,然后在其他各种范围内的一系列单元格下划线。给定的单元格上有验证,因此用户只能从下拉框的一系列选项中进行选择。 据我所知,验证函数工作正常,但是当我通过选择一个下拉框选项来编辑指定的单元格时,什么都不会发生。我需要调用函数吗?我已经阅读了api的参考资料,并在stackoverflow和网络上搜索了帮助,但是我被卡住

  • 我有一个相当大的问题。如果我使用for循环和range(r,c.).getValue()读取列单元格(与使用range(r,c,m,1).getValues()读取列单元格相同),则不会读取值。我错了!。我正在读取单元格值,这些值有些是其他表格中的参考值,有些是if、舍入和加减计算值。 正如你可能在图中看到的,我在一些列上有一个固定的测试值(数字2, 3, 4, 5)这些总是读得很好。 在源代码中