【发布时间】:2020-05-28 01:05:51
【问题描述】:
我有一张工作表,我需要从中获取值并在新工作表中设置,其中一个值要求我在索引 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。我尝试以各种方式更改该列的格式,文本、数字等,但它没有似乎对报告的长度没有任何影响。我假设这就是拆分功能不起作用的原因,但我不确定它为什么会发生?Sheet
【问题讨论】:
-
您能否分享您正在处理的电子表格的副本(不含敏感信息)以及您期望的结果?
-
getValues 返回一个数组数组,因此您需要对其进行索引。外部数组是行,内部数组是列。正如所料,它是从 0 开始的。