【问题标题】:How to keep the date from turning into a String when using a Google Apps Script in Google Sheets?在 Google 表格中使用 Google Apps 脚本时如何防止日期变成字符串?
【发布时间】:2019-10-04 16:59:26
【问题描述】:

我使用了在大型 Google 电子表格中发布的 here 脚本,将字符串替换为数字。

效果很好,但问题是,日期变成了字符串

我认为问题出在方法toString(),但我找不到任何替代方法来使代码工作。

=> 有没有人想办法避免这个问题?

脚本

function runReplaceInSheet(){
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet3");
  //  get the current data range values as an array
  //  Fewer calls to access the sheet -> lower overhead 
  var values = sheet.getDataRange().getValues();  

  // Replace  
  replaceInSheet(values, 'datateam', '42007860');

  
  // Write all updated values to the sheet, at once
  sheet.getDataRange().setValues(values);
}

function replaceInSheet(values, to_replace, replace_with) {
  //loop over the rows in the array
  for(var row in values){
    //use Array.map to execute a replace call on each of the cells in the row.
    var replaced_values = values[row].map(function(original_value) {
      return original_value.toString().replace(to_replace,replace_with);
    });

    //replace the original row values with the replaced values
    values[row] = replaced_values;
  }
}

之前

之后

【问题讨论】:

    标签: javascript google-apps-script google-sheets


    【解决方案1】:
    • 您想替换电子表格的值。
      • 在您的脚本中,您希望将 datateam 替换为 42007860
    • 您希望使用 Google Apps 脚本实现此目的。

    如果我的理解是正确的,那么这个答案呢?请认为这只是几个答案之一。

    模式一:

    在此模式中,使用getDisplayValues() 代替getValues()

    修改后的脚本

    请按如下方式修改您的脚本。本次修改,修改了runReplaceInSheet()的功能。

    function runReplaceInSheet(){
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet3");
      //  get the current data range values as an array
      //  Fewer calls to access the sheet -> lower overhead 
      var values = sheet.getDataRange().getDisplayValues(); // Modified
    
      // Replace  
      replaceInSheet(values, 'datateam', '42007860');
    
    
      // Write all updated values to the sheet, at once
      sheet.getDataRange().setValues(values);
    }
    

    模式 2:

    在此模式中,使用 TextFinder 代替 replaceInSheet()setValues()

    修改后的脚本

    请按如下方式修改您的脚本。本次修改,修改了runReplaceInSheet()的功能。而且,在这个修改中,replaceInSheet 没有被使用。

    function runReplaceInSheet(){
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet3");
      sheet.createTextFinder('datateam').replaceAllWith('42007860'); // Added
    }
    

    参考资料:

    如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

    【讨论】:

    • @AlejandroRod 感谢您的回复。如果您的问题仍未解决,请告诉我。我想修改它。
    【解决方案2】:

    我会检查模板,即您的实际 XLS 文件。 在输入数据之前设置单元格的类型。 我认为这可能是您的问题,而不是您的实际代码。 这是在主页选项卡中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多