【问题标题】:How to set column to plain text format for every sheet?如何将每张工作表的列设置为纯文本格式?
【发布时间】:2019-04-07 15:34:22
【问题描述】:

我已经阅读了这篇文章>>set format as plain text

我正在创建一个新线程,因为该线程已经有几年历史了,我不想恢复几年前的内容。

代码:

function A1format() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var mainsheet = ss.getSheetByName("Sheet1");
 var G = mainsheet.getRange("C15:BH3000").getGridId();
 var illa = mainsheet.getRange("A13");

 Logger.log(G);
 illa.copyFormatToRange(G, 16, 3,200, 30);
 }

此代码应该为名为@9​​87654323@的工作表设置纯文本格式

我试过var mainsheet = ss.getSheetByName("Sheet1, Sheet2, Sheet3"); 但这似乎不起作用,我只是收到一条错误消息。

这是我当前拥有的代码,该代码可以工作,但如果发生变化,它既效率低又很难维护:

function setPlainTextDefault() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheets()[0];
  var sheet2 = ss.getSheets()[2];
  var sheet3 = ss.getSheets()[4];
  var sheet4 = ss.getSheets()[7];


  var sheetColumn1 = sheet1.getRange("A1:A");
  var sheetColumn2 = sheet2.getRange("A1:A");
  var sheetColumn3 = sheet3.getRange("A1:A");
  var sheetColumn4 = sheet4.getRange("A1:A");
  sheetColumn1.setNumberFormat("@");  
  sheetColumn2.setNumberFormat("@");
  sheetColumn3.setNumberFormat("@");  
  sheetColumn4.setNumberFormat("@");
}

在这里,我通过使用工作表的索引号将每张工作表中的每一列 A 更改为纯文本,因此我必须手动计算每张工作表的数量,这是一场噩梦,因为我有大量工作表,我手动计算纸张然后将其添加到我当前的代码中将花费太多时间。我知道有更好更有效的方法来做到这一点,但由于我缺乏谷歌应用脚​​本方面的知识,我不知道如何做。

无论存在多少张,您如何为文档中的每张纸执行此操作?我想浏览每张纸,从 sheet1 到 x 张数,然后将每一列 A 更改为纯文本。

【问题讨论】:

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


    【解决方案1】:

    var mainsheet = ss.getSheetByName("Sheet1, Sheet2, Sheet3") 抛出错误,因为没有名为“Sheet1、Sheet2、Sheet3”的工作表。 “没有办法减少对您的代码的电子表格服务的调用,但您可以通过使用一些 JavaScript 功能(如循环和数组处理)使其“看起来更好”。

    示例(未经测试)

    在下面的代码sn-p中,使用数组、a for和indexOf来减少原代码的行数。

    function setPlainTextDefault() {
    
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheets = ss.getSheets();
      var sheetsToProcess = [0,2,4,7]; // Array holding the sheets indexes to process
      for(var i = 0; i < sheets.length; i++){
        /* If i is not in the sheetsToProccess indexOf returns -1 which is parsed as false 
        otherwise the result is parsed as true */
        if(sheetsToProcess.indexOf(i)){ 
         var sheet = ss.getSheets()[i]; 
         var sheetColumn = sheet.getRange("A1:A");
         sheetColumn.setNumberFormat("@");
        }      
      }
    }
    

    要使上述工作适用于每张工作表,请注释掉或删除 if(sheetsToProcess.indexOf(i)){ 和相应的 }

    值得注意的是,如果您正在寻求帮助以找到改进代码的“最佳”方法,您可以尝试Code Review

    【讨论】:

    • 感谢您的指点先生,我已经拿了您的示例代码并在下面回答了我自己的问题。
    【解决方案2】:

    这是我需要的代码:

    function setPlainText() {
    
     var ss = SpreadsheetApp.getActiveSpreadsheet();
     var sheets = ss.getSheets();
    
       for(var i = 0; i < sheets.length; i++) {
    
         //Logger.log(sheets[i].getName());
         var setPlainText = ss.getSheets()[i]; 
         var sheetColumnA = setPlainText.getRange("A1:A");
         sheetColumnA.setNumberFormat("@");
    
         var sheetColumnB = setPlainText.getRange("B1:B");
         sheetColumnB.setNumberFormat("@");
    
       }
    }
    

    它会:

    1. 遍历一个包含 x 个张数的文档,无论大小如何
    2. 然后对于每次迭代,为文档中每张纸的每一列 A 和 B 设置纯文本格式

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多