我想使用应用程序脚本将工作表中的零更改为空白

I want to change zeros to blanks in sheets using apps script

我刚开始使用应用程序脚本,我只是想尝试一下。我想将零转换为空白。

这是我设法创建的代码,但它不起作用,我不知道如何修复它。

    function zero() {
      var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
      var selectedRange = ss.getActiveRange()
      var selectedValues = selectedRange.getValues()
      var selectedColumns = selectedRange.getWidth()
      var selectedRows = selectedRange.getHeight()
    
        for(i = 0; i<selectedRows; i++) {
        for(j = 0; j<selectedColumns; j++) {
          if (selectedValues[i][j] = 0) {
            selectedRange.getCell(i + 1, j + 1).setValue(" ")
          }
        }
      }
    }

function onOpen() {
  SpreadsheetApp.getUi()
      .createMenu('Blank')
      .addItem('Change zero to blank', 'zero')
      .addToUi();
}

当我看到你的脚本时,我认为你的 if (selectedValues[i][j] = 0) {} 的 if 语句需要修改。如果单元格值为0的个数,请使用===代替==。所以,当你的脚本修改时,请修改如下。

修改后的脚本:

function zero() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var selectedRange = ss.getActiveRange();
  var selectedValues = selectedRange.getValues();
  var selectedColumns = selectedRange.getWidth();
  var selectedRows = selectedRange.getHeight();
  for (i = 0; i < selectedRows; i++) {
    for (j = 0; j < selectedColumns; j++) {
      if (selectedValues[i][j] === 0) {
        selectedRange.getCell(i + 1, j + 1).setValue(" ");
      }
    }
  }
}
  • 如果想把0的数字改成空白,也可以用selectedRange.getCell(i + 1, j + 1).setValue(null);代替selectedRange.getCell(i + 1, j + 1).setValue(" ");

  • 我觉得在循环中使用setValue的时候,进程开销会很大。根据您的情况,可以使用以下脚本。

      function zero() {
        var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
        var selectedRange = ss.getActiveRange();
        selectedRange.createTextFinder("0").matchEntireCell(true).replaceAllWith(" "); // or .replaceAllWith("");
      }
    

参考文献: