Javascript Array.push.setAnyFormatting(';red';)?

Javascript Array.push.setAnyFormatting(';red';)?,javascript,arrays,google-apps-script,google-sheets,Javascript,Arrays,Google Apps Script,Google Sheets,说明: 堆栈溢出用户mhawksey最近编写了我的一些代码,通过这样做,向我介绍了超高效的数组推送。但是使用数组有点困难,因为在使用传统的.getRange/.setValue方法时,我似乎无法使用可以使用的函数 问题: 我需要集成.setFontColor('red')和.setBackgroundColor('white') 代码和图像: 首先,我将发布代码。第二,当前代码所做工作的图像。第三,代码需要做什么的图像 函数格式(){ var ss=SpreadsheetApp.getActiv

说明:

堆栈溢出用户mhawksey最近编写了我的一些代码,通过这样做,向我介绍了超高效的数组推送。但是使用数组有点困难,因为在使用传统的.getRange/.setValue方法时,我似乎无法使用可以使用的函数

问题:

我需要集成.setFontColor('red')和.setBackgroundColor('white')

代码和图像:

首先,我将发布代码。第二,当前代码所做工作的图像。第三,代码需要做什么的图像

函数格式(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var s=ss.getActiveSheet();
var lastRow=s.getLastRow();
var行;
//获取列中所有值的[]
var data=s.getRange(“A:A”).getValues();
//我们将构建一个[][]来输出结果
var输出=[];
//循环遍历A列中的所有单元格
对于(行=0;行<最后一行;行++){
var cellValue=数据[行][0];
var-dash=false;
如果(单元格值的类型==='string'){
破折号=单元格值。子字符串(0,1);
//如果一个数字复制到我们的输出数组
}否则{
push([cellValue]);
}
//if-dash
如果(破折号==“-”){
//构建名+姓
变量名称=(数据[(行+1)][0]+“”+data[(行+2)][0])。trim();
//为-state(例如-MI)添加行
push([cellValue]);
output.push([name]);
输出推送([“订单完成”]);
//添加一个空行
输出。推送([“”]);
//多跳一行以加快速度
行++;
}
}
//设置我们在输出[][]数组中创建的值
s、 getRange(1,1,output.length).setValues(output);
}
代码就是这样做的:

这就是我想要实现的目标:

更新:

我附加了一个简单的、有效的格式化循环。问题是,当我在较长的数据列上运行它时,处理时间太长。从我对评论的理解来看,我无法快速格式化电子表格。我错了吗

附加的格式代码:

//other variables
var range1;

  //loop through column A
  for (var row = 0; row < lastRow; row++) {
    range1 = s.getRange(row + 1, 1);

    //define offsets for if statement
    var offset1 = range1.offset(1, 0);
    var offset2 = range1.offset(2, 0);

    //substring cannot run on numbers, so...
    cellValue = range1.getValue();
    if (typeof cellValue === 'number') {continue;};
    dash = cellValue.substring(0, 1);

    //if -
    if (dash === "-") {
       offset1.setFontColor('red');
       offset2.setBackground('green');
     };
   };
//其他变量
变量范围1;
//循环通过A列
对于(变量行=0;行
备注:OP从修订版到第3版做了巨大的改变。以下内容摘自修订版1的来源


是否可以将文本推送到带有格式设置的电子表格中 如.setFontColor、.setBackgroundColor或.setBackOrder?我一直在 玩弄代码,但从未收到错误消息。只是 什么都不做。我的工作是这样的:

if(单元格==“应为红色”){
var redCell=(数据[(行)][0])。setFontColor('red');
array.push([redCell]);
}

以下是我对修订版1的回答

要将值和格式从一个单元格或区域复制到另一个单元格或区域,请使用

从上面的链接

 // The code below will copy the first 5 columns over to the 6th column.
 var sheet = SpreadsheetApp.getActiveSheet();
 var rangeToCopy = sheet.getRange(1, 1, sheet.getMaxRows(), 5);
 rangeToCopy.copyTo(sheet.getRange(1, 6));
 }

您可以使用所有不同的电子表格方法来获取和设置不同数组中的颜色、字体大小、字体权重等,但不能将这些“属性”混合在一个项目中。看

甚至更方便的是,在脚本编辑器中编写一个定义范围的脚本,并使用auto complete查看您可以使用它执行的所有操作

(控制+空格键)


在代码更新后进行编辑。 您应该创建第二个数组来保存范围内的所有背景色,并根据需要填充。 在下面的代码中,我使用您的输出数组以并行方式构建数组,这不是非常优雅,而是系统地展示了它是如何工作的

请注意,null值表示“无背景色”,而#0F0是绿色的十六进制代码,但如果您愿意,也可以使用“绿色”字符串

    ...
    var output = [];
    var backGrounds=[]
    //loop through all cells in column A
    for (row = 0; row < lastRow; row++) {
      var cellValue = data[row][0];
      var dash = false;
      if (typeof cellValue === 'string') {
        dash = cellValue.substring(0, 1);
        //if a number copy to our output array
      } else {
        output.push([cellValue]);
        backGrounds.push([null]);
      }

      //if -dash
      if (dash === "-") {
        //build first + last name
        var name = (data[(row+1)][0]+" "+data[(row+2)][0]).trim();
        //add row for the -state (e.g. -MI)
        output.push([cellValue]);
        backGrounds.push([null]);
        output.push([name]);
        backGrounds.push([null]);
        output.push(["Order complete"]);
        backGrounds.push(['#0F0']);
        //add a blank row
        output.push([""]);
        backGrounds.push([null]);
        //jump an extra row to speed things up
        row++;
      }
    }
  s.getRange(1, 1, output.length).setBackgrounds(backGrounds);
...
。。。
var输出=[];
变量背景=[]
//循环遍历A列中的所有单元格
对于(行=0;行<最后一行;行++){
var cellValue=数据[行][0];
var-dash=false;
如果(单元格值的类型==='string'){
破折号=单元格值。子字符串(0,1);
//如果一个数字复制到我们的输出数组
}否则{
push([cellValue]);
背景。推送([null]);
}
//if-dash
如果(破折号==“-”){
//构建名+姓
变量名称=(数据[(行+1)][0]+“”+data[(行+2)][0])。trim();
//为-state(例如-MI)添加行
push([cellValue]);
背景。推送([null]);
output.push([name]);
背景。推送([null]);
输出推送([“订单完成”]);
背景。推送(['#0F0']);
//添加一个空行
输出。推送([“”]);
背景。推送([null]);
//多跳一行以加快速度
行++;
}
}
s、 getRange(1,1,output.length).setBackgrounds(背景);
...

需要更多的代码,如何使用阵列?同样,如果看不到您的代码,您似乎只需要:data[(row)][0].setFontColor('red');如果您只想将单元格颜色设置为红色,那么就没有整个redCell和array.push。如果您试图将电子表格范围方法应用于javascript数组,这就像用法语与来自火星的人交谈一样。。。如果他是一个温和的人,他不会抗议,但他也不会做任何事。啊,好的。所以@Sergeinsas,我不知道如何表述这个问题。是因为我错误地尝试应用“范围方法”吗
    ...
    var output = [];
    var backGrounds=[]
    //loop through all cells in column A
    for (row = 0; row < lastRow; row++) {
      var cellValue = data[row][0];
      var dash = false;
      if (typeof cellValue === 'string') {
        dash = cellValue.substring(0, 1);
        //if a number copy to our output array
      } else {
        output.push([cellValue]);
        backGrounds.push([null]);
      }

      //if -dash
      if (dash === "-") {
        //build first + last name
        var name = (data[(row+1)][0]+" "+data[(row+2)][0]).trim();
        //add row for the -state (e.g. -MI)
        output.push([cellValue]);
        backGrounds.push([null]);
        output.push([name]);
        backGrounds.push([null]);
        output.push(["Order complete"]);
        backGrounds.push(['#0F0']);
        //add a blank row
        output.push([""]);
        backGrounds.push([null]);
        //jump an extra row to speed things up
        row++;
      }
    }
  s.getRange(1, 1, output.length).setBackgrounds(backGrounds);
...