Javascript 如何将每个工作表的列设置为纯文本格式?
我已经通读了这篇文章>> 我正在创建一个新的线程,因为这个线程已经有几年的历史了,我不想从几年前恢复一些东西 守则:Javascript 如何将每个工作表的列设置为纯文本格式?,javascript,optimization,google-apps-script,google-sheets,Javascript,Optimization,Google Apps Script,Google Sheets,我已经通读了这篇文章>> 我正在创建一个新的线程,因为这个线程已经有几年的历史了,我不想从几年前恢复一些东西 守则: function A1format() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var mainsheet = ss.getSheetByName("Sheet1"); var G = mainsheet.getRange("C15:BH3000").getGridId(); var illa = mainshe
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更改为纯文本。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("@");
}
}
}
函数setPlainTextDefault(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheets=ss.getSheets();
var sheetsToProcess=[0,2,4,7];//保存要处理的图纸索引的数组
对于(变量i=0;i
要使以上内容适用于每个工作表,请注释掉或删除if(sheetsToProcess.indexOf(i)){
和相应的}
值得注意的是,如果您正在寻找帮助以找到改进代码的“最佳”方法,您可以尝试。这就是我需要的代码:
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("@");
}
}
函数setPlainText(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheets=ss.getSheets();
对于(变量i=0;i
它将:
以x张纸(无论大小)遍历文档
然后,对于每个迭代,为文档中的每个工作表的每个列A和B设置纯文本格式
谢谢你的指点,先生,我已经用你的示例代码回答了下面我自己的问题。