【问题标题】:Exception: The number of columns in the data does not match the number of columns in the range. - Issue例外:数据中的列数与范围内的列数不匹配。 - 问题
【发布时间】:2022-10-17 18:30:09
【问题描述】:
    function pricing() {
      convert_txt_gsheets();
      lastrow2();
    }
    
    function convert_txt_gsheets() {
      var source = SpreadsheetApp.openById('ID1').getSheetByName('Daily Report');
      var targetrange = source.getRange(2, 1, source.getLastRow(), source.getLastColumn());
      targetrange.clear();
    
      var file = DriveApp.getFileById('ID2');
      var body = file.getBlob().getDataAsString().split(/\r/);
      var result = body.map(split(/|/))
        // vvv
        .map(row => row.map(cell => cell.replaceAll(`"`, ``)));
      SpreadsheetApp.getActive().getSheetByName('Daily Report').getRange(1, 1, result.length, result[0].length).setValues(result);
      return;
    }



function lastrow2() {
var source = SpreadsheetApp.openById('ID1').getSheetByName('Daily Report');
var target = SpreadsheetApp.openById('ID1').getSheetByName('Permanent Record');
var target = target.getRange(target.getLastRow()+1, 1, source.getLastRow(), source.getLastColumn());
var rangeValues = source.getRange(2, 1, source.getLastRow(), source.getLastColumn()).getValues();
target.setValues(rangeValues); 
}

我可以就上述代码寻求帮助吗? Lastrows2 功能正常工作。但是,Convert_txt_gsheets 抛出异常“异常:数据中的列数与范围中的列数不匹配。数据有 1,但范围有 9。convert_txt_gsheets”这会终止整个事情,并永远停止 lastrow2引人入胜。

这是从 txt 中提取的示例数据。

COLUMN0 COLUMN1 COLUMN2 COLUMN3 COLUMN4 COLUMN5 COLUMN6 COLUMN7 COLUMN8
"Rocketship" "5.99" "5.39" "5.39" "" "5.39" "5.39" "7.5.2022" "william"

编辑我修改了示例和原始代码。当前收到的错误是

ReferenceError:未定义拆分

【问题讨论】:

  • 您好,您的代码中有一些不正确的语法:cell.replaceAll(", ``)。你能澄清一下你有什么确切的代码吗?如果我改用cell.replaceAll('"', "`"),我不会收到任何错误(在获取您提供的文本并将包含该文本的文本文件上传到云端硬盘之后),但我不确定您到底想做什么。
  • @lamblichus我的错,我已经复制了旧代码。你提到的问题我已经解决了。如果您不介意再看一遍,我已经编辑了 OP。为了澄清脚本应该从驱动器中的 txt 中提取数据,将其放入电子表格中的一张表中,然后复制提取的数据并将其添加到第二张表中。因此,在首先清洁纸张后,它会将其移至纸张 1。然后将其复制到工作表 2,将其添加到最后一行,创建一个存档。个别功能工作得有些好。 convert_txt_gsheets 仍然会出错,但它可以工作。
  • 我可以成功执行,没有错误,所以我不知道这里发生了什么。我的猜测是从txt 文件中提取的文本与您引用的内容不完全相同。考虑提供minimal reproducible example
  • @lamblichus 这是一个很好的说明,我意识到我们的数据略有损坏并且使用了逗号。我将分隔符更改为“|” COLUMN0|COLUMN1|COLUMN2|COLUMN3|COLUMN4|COLUMN5|COLUMN6|COLUMN7|COLUMN8 "Rocketship"|"5.99"|"5.39"|"5.39"|""|"5.39"|"5.39"|"7.5.2022"|"william" ^新示例。我还用新的代码和示例更新了 OP。但是,现在我收到以下“ReferenceError:未定义拆分”您能帮我正确重新定义它吗?分裂让我很困惑。
  • var result = body.map(split(/|/)) 更改为var result = body.map(r => r.split(/|/))。这能解决您的问题吗?

标签: google-apps-script google-sheets


【解决方案1】:

你几乎很好,问题就在这里:

  var result = body.map(r => r.split(/,/))
    // vvv
    .map(row => row.map(cell => cell.replaceAll(", ``)));

这是我所做并测试的功能:

function cleantext() {

  var text = `COLUMN0,COLUMN1,COLUMN2,COLUMN3,COLUMN4,COLUMN5,COLUMN6,COLUMN7,COLUMN8
"Rocketship","5.99","5.39","5.39","","5.39","5.39","7.5.2022","william"
"WobblyHouse","3.99","3.49","3.49","","3.49","3.49","7.5.2022","billiam"`;

  var cleaned = text.split('
').map(line => line.split(',').map(cell => cell.replace(/["]/g, "")));

  Logger.log(cleaned);
}

// [[COLUMN0, COLUMN1, COLUMN2, COLUMN3, COLUMN4, COLUMN5, COLUMN6, COLUMN7, COLUMN8], 
// [Rocketship, 5.99, 5.39, 5.39, , 5.39, 5.39, 7.5.2022, william], 
// [WobblyHouse, 3.99, 3.49, 3.49, , 3.49, 3.49, 7.5.2022, billiam]]

【讨论】:

  • 可悲的是,这个问题恰好是另一回事。你能看看编辑过的OP吗?
  • @Daniel 在新问题中提出后续问题。发布答案后请勿更改问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 2020-08-07
相关资源
最近更新 更多