如何为每个工作表将列设置为纯文本格式?

时间:2018-01-10 14:55:59

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

我已阅读此信息>> 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);
 }

此代码应为名为Sheet1

的工作表设置纯文本格式

我已经尝试了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更改为纯文本。

2 个答案:

答案 0 :(得分:1)

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

示例(未经测试)

在下面的代码片段中,数组,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)){以及相应的}

值得注意的是,如果您正在寻求帮助以找到最好的&#34;改进代码的方法,您可以尝试Code Review

答案 1 :(得分:0)

这是我需要的代码:

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列的纯文本格式