0

我有一个 Microsoft Flow 将数据发送到 Google 表格。当数据出现在工作表中时,某些单元格有一个隐藏的撇号,这会阻止计算并阻止某些公式。

我有一个脚本,可以用数字格式化单元格,以便我可以运行计算。我无法做的是清除要运行 =NOW() 的单元格中的撇号,以便创建时间戳。

我已经创建了一个脚本,但我不知道如何让这个单元做我想做的事。

function setFormat(){SpreadsheetApp.getActiveSheet().getRange("A2:A").getValue().replace("'=NOW()","=NOW()");SpreadsheetApp.getActiveSheet().getRange("C2:C").setNumberFormat('000');SpreadsheetApp.getActiveSheet().getRange("D2:D").setNumberFormat('000');SpreadsheetApp.getActiveSheet().getRange("E2:E").setNumberFormat('000');SpreadsheetApp.getActiveSheet().getRange("F2:F").setNumberFormat('000');}`

单元格中的格式

4

1 回答 1

1

这个样品怎么样?

  1. 使用getValues(),检索“A2:A”的数据。 https://developers.google.com/apps-script/reference/spreadsheet/range#getvalues

  2. 在 1 处检索到的数据从 转换'=NOW()=NOW()

  3. 使用setFormulas(),将转换后的数据导入“A2:A”。 https://developers.google.com/apps-script/reference/spreadsheet/range#setformulasformulas

  4. setNumberFormat()适用于您的脚本。

示例脚本:

function setFormat(){
  var ss = SpreadsheetApp.getActiveSheet();
  var Data = ss.getRange("A2:A").getValues();
  var replacedData = [[i[0].replace("'=NOW()","=NOW()")] for each (i in Data) if(i[0])];
  ss.getRange(2, 1, replacedData.length, replacedData[0].length).setFormulas(replacedData);

  ss.getRange("C2:C").setNumberFormat('000');
  ss.getRange("D2:D").setNumberFormat('000');
  ss.getRange("E2:E").setNumberFormat('000');
  ss.getRange("F2:F").setNumberFormat('000');
}

如果我误解了你的问题,我很抱歉。

添加了 1:

=NOW()作为公式的类型是对象。所以只有通过比较类型将'=NOW()字符串转换为公式。=NOW()当您添加更多数据时,添加的数据将被转换。

function setFormat(){
  var ss = SpreadsheetApp.getActiveSheet();
  var Data = ss.getRange("A2:A").getValues();
  var replacedData = [typeof(i[0])=="object" ? ["=NOW()"] : [i[0].replace("'=NOW()","=NOW()")] for each (i in Data) if(i[0])];
  ss.getRange(2, 1, replacedData.length, replacedData[0].length).setFormulas(replacedData);

  ss.getRange("C2:C").setNumberFormat('000');
  ss.getRange("D2:D").setNumberFormat('000');
  ss.getRange("E2:E").setNumberFormat('000');
  ss.getRange("F2:F").setNumberFormat('000');
}

添加 2:

此示例在导入新数据时将日期对象作为字符串导入。

function setFormat(){
  var ss = SpreadsheetApp.getActiveSheet();
  var Data = ss.getRange("A2:A").getValues();
  var replacedData = [
      typeof(i[0])=="object"
      ? [i[0]]
      : [i[0].replace("=NOW()", Utilities.formatDate(
        new Date(),
        Session.getScriptTimeZone(),
        'yyyy/M/d HH:mm:ss')
      )
    ]
    for each (i in Data) if(i[0])
  ];
  ss.getRange(2, 1, replacedData.length, replacedData[0].length).setValues(replacedData);

  ss.getRange("C2:C").setNumberFormat('000');
  ss.getRange("D2:D").setNumberFormat('000');
  ss.getRange("E2:E").setNumberFormat('000');
  ss.getRange("F2:F").setNumberFormat('000');
}
于 2017-05-16T08:33:51.573 回答