javascript - 如何将每张纸的列设置为纯文本格式?

标签 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 更改为纯文本,所以我必须手动计算每张工作表的编号,这是一场噩梦,因为我有大量的工作表,我手动计算床单然后将其添加到我当前的代码中将花费太多时间。我知道有一种更好、更有效的方法可以做到这一点,但由于我对 google apps 脚本编写缺乏了解,所以我不知道该怎么做。

不管有多少张纸,您如何对文档中的每张纸执行此操作?我想遍历每一张纸,从 sheet1 到 x 张纸,然后将每一列 A 更改为纯文本。

最佳答案

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)){ 和相应的 }

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

关于javascript - 如何将每张纸的列设置为纯文本格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48190134/

相关文章:

javascript - Bootstrap 下拉菜单不会在 angularjs spa 应用程序中折叠

java - 创建空对象

javascript - 如何获取 Google 幻灯片标题和幻灯片编号的列表 - Google Apps 脚本

javascript - 如何使用更多子选项卡扩展下拉列表?

javascript - 通过ajax提交选择框的值并显示结果不起作用

php - 检索许多相关信息

javascript - 正文中的 POST 请求为 x-www-form-urlencoded

javascript - Google 表格中的 Google Apps 脚本是否有类似悬停的触发器?

javascript - 如何从javascript数组中删除重复的对象?

php - 让 Zend-Framework 运行得更快