Google apps script 如果存在文本,则设置相邻单元格的公式

Google apps script 如果存在文本,则设置相邻单元格的公式,google-apps-script,google-sheets,google-forms,Google Apps Script,Google Sheets,Google Forms,我正在使用谷歌表单,它也通过短信接受答案。我正试图找到一种方法,使用GoogleApps脚本以逗号作为分隔符分割文本消息的正文 我遇到的问题是覆盖表单而不是文本消息提交的信息 我当前的脚本是: 函数splitCells(){ var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; var colC=sheet.getRange(“C2:C”).getValues(); var colD=sheet.getRange(“D

我正在使用谷歌表单,它也通过短信接受答案。我正试图找到一种方法,使用GoogleApps脚本以逗号作为分隔符分割文本消息的正文

我遇到的问题是覆盖表单而不是文本消息提交的信息

我当前的脚本是:

函数splitCells(){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var colC=sheet.getRange(“C2:C”).getValues();
var colD=sheet.getRange(“D2:D”).getFormulas();
//Logger.log(colC);
for(colC中的var i){
if(typeof(colC[i][0])=='string'){
colD='=if(istext(C2:C),split(C2:C,“,”,true));
}否则{
冷='D2:D';
}
}
表.getRange(“D2:D”).setFormula(冷);
}
该函数工作正常,将C列(SMS正文)的内容按预期拆分为D、E和F。但是,由于未满足
else
条件,它正在覆盖D列中的数据(这些地方的colC为空)

如何让脚本在不替换单元格内容的情况下移动空白单元格

解释起来有点混乱,所以你可以去看看。当您打开自定义菜单时,应该安装一个自定义菜单,您可以从那里(或从编辑器)运行脚本


谢谢你的帮助。

这里有几个简单的错误

  • 电子表格单元格可以包含值或公式,但不能同时包含两者

  • 如果使用
    setFormula/s()
    ,则单元格中的任何值都将被公式结果替换,即使公式为空

    由于希望混合使用值和公式,因此应仅在符合条件的特定单元格中设置公式:

    //如果我们收到短信响应,请设置一个公式来解析它
    sheet.getRange(2+i,4).setValue('=if(istext(C2:C),split(C2:C,,,,true),))
    
  • 标准测试是不够的。空白单元格仍然是字符串类型,但它是空白字符串。因此,对于表单条目和SMS条目,该值均为true:

    if(typeof(colC[i][0])=='string'){。。。
    
    更有效的测试检查非空白响应:

    if(colC[i][0]!=''{。。。
    
    更好的方法是确保C列中的值满足所需的格式要求

  • 您正在使用
    for..in
    循环遍历数组,该循环用于遍历对象属性。这是可行的,但循环值
    i
    将是字符串,这在进行数学运算时可能会导致问题。最好养成在数值索引上循环的习惯。()

  • 完整列范围表达式
    C2:C
    非常优雅,但是最终得到的数组包含电子表格中的所有行,在您的示例中超过1000行。由于我们将循环所有行,因此最好限制该范围:

    var colC=sheet.getRange(2,3,sheet.getLastRow()).getValues();//C2:C,仅非空行
    
针对这些问题进行调整后,我们有:

函数splitCells2(){
var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
var colC=sheet.getRange(2,3,sheet.getLastRow()).getValues();//C2:C,仅非空行
//Logger.log(colC);
for(var i=0;i
感谢您提供如此详细的答案。我边走边自学,您指出的许多错误都是我在其他项目中所做的事情,因此能够改进我正在做的其他事情很好。我真的很感激。我也这么认为,我很高兴能提供帮助。(在这个问题上已经有两个“最爱”,因此引起了人们的共鸣。)我很想了解更多关于短信部分的信息,你有没有一篇博文或链接可以提供教育?是的,我有一个草稿。我今天正在分析数据,然后我会用我正在使用的方法将一篇博文链接回这里。肯定是有黑客的,但它是有效的。这是一篇文章。现在没有谷歌语音的API,所以有点混乱,但是这篇文章的第二部分将于今天晚些时候发布(希望如此)。