如何使用GAS将单个电子表格单元格中的字符串转换为2D数组



我需要在Google文档中从单个电子表格单元格中的一组值对生成一个表。单元格(A1(中的值的格式如下:

["a1","a2"],["b1","b2"],["c1","c2"]

我试过:

testData = testSheet.getRange(1,1,1, 1).getValues().toString().split(",");
Logger.log(testData)

这给了我:

[["a1","a2"],["b1","b2"],["c1","c2"]]

对我来说,这看起来像一个2D阵列,但当我尝试时:

testDoc.insertTable(testField, testData)

我得到错误:

Exception: The parameters (number,number[]) don't match the method signature for DocumentApp.Body.insertTable.

当我在函数中手动定义数组时:

testData = [["a1","a2"],["b1","b2"],["c1","c2"]]

表已按预期插入。

我可以以不同的方式格式化单元格中的数据,但我需要所有的值对都在一个单元格中。

修改点:

  • 当CCD_;A1";,当小区值由testSheet.getRange(1,1,1, 1).getValues()检索时,它是[["["a1","a2"],["b1","b2"],["c1","c2"]"]]。在这种情况下,["a1","a2"],["b1","b2"],["c1","c2"]是字符串类型。

    • 这可以通过JSON.stringify来确认
  • 由此,当小区值由testSheet.getRange(1, 1, 1, 1).getValues().toString().split(",")检索时,它变为["["a1"",""a2"]","["b1"",""b2"]","["c1"",""c2"]"]。在这种情况下,["a1"",""a2"]["b1"",""b2"]["a1","a2"],["b1","b2"],["c1","c2"]0是字符串值。

    • 我认为这就是你问题的原因
  • 为了将["a1","a2"],["b1","b2"],["c1","c2"]的单元格值用作二维数组,需要对其进行解析

当这些点反映在脚本中时,下面的修改如何?

发件人:

testData = testSheet.getRange(1,1,1, 1).getValues().toString().split(",");

收件人:

testData = JSON.parse(`[${testSheet.getRange(1, 1, 1, 1).getValue()}]`); // In this case, I think that `getDisplayValue()` is used instead of `getValues`.
通过这种修改,["a1","a2"],["b1","b2"],["c1","c2"]的值可以用作[["a1","a2"],["b1","b2"],["c1","c2"]]的二维数组

测试:

const value = '["a1","a2"],["b1","b2"],["c1","c2"]';
const testData = JSON.parse(`[${value}]`);
console.log(testData)
console.log(testData[0][0]) // a1

参考:

  • JSON.parse((

我会试试这个:

var testData = eval('[' + testSheet.getRange('A1').getDisplayValue() + ']');

测试代码:

var s =  '["a1","a2"],["b1","b2"],["c1","c2"]';
var testData = eval('[' + s + ']');
console.log(testData);

最新更新