如何通过Google表格中的格式水平合并单元格/列?

时间:2019-06-17 06:10:00

标签: google-apps-script google-sheets google-sheets-formula

我找到了一种手动方法,可以使用以下几个步骤和公式将单元格与格式合并:

以下YouTube视频示例:

https://youtu.be/0dP8AVTx9wA

Sheet2在这里:

How to Merge cells horizontally with formatting in Google Sheets?

条件格式列E(范围E1:E33):

=IFS(AND(C1="",D1=""),"$",AND(C1<>"",D1=""),C1&"#",AND(C1="",D1<>""),D1&"*")

文字正好是

$  

—>将背景颜色设置为白色

文本包含:

#  

—>将背景色设置为红色

文本包含:

*

—>将背景颜色设置为绿色

条件格式列F(范围F1:F33):

=RIGHT(E1:E,1)="$"

—>将背景颜色设置为白色

=RIGHT(E1:E,1)="#"

—>将背景色设置为红色

=RIGHT(E1:E,1)="*"

—>将背景颜色设置为绿色

在范围F1:F33中删除“ $”,“#”和“ *”。

我的问题是:

如何通过脚本使过程更简单和自动化? 可能用更少的步骤?

非常感谢您的帮助和想法!

编辑:

回答建议的答案

Google Spreadsheet script to merge cells in column A containing 'Hello' with the adjacent cell in column B

我的问题有何不同?

如果我的理解正确,那么.mergeAcross()操作将合并单元格,以仅将左列单元格(列A)的左上内容保留在输出单元格中(合并结果)。

在我的情况下,合并2个单元格并将右列单元格的内容保留在合并结果中将无效。

例如:

A1为空(A1="")并且B1不为空(B1<>"" / B1=1)时,输出单元格返回B1内容(C1返回"1")。

而且,它似乎也没有解决格式化所需的条件。

例如:

如果A1=""B1<>"" / B1=1,并且B1单元格背景为红色,则返回B1内容和格式在输出单元格中({{ 1}}返回C11)。

但是非常感谢您提出有关red as cell background color行动的建议。我不知道,知道它确实很有价值。

1 个答案:

答案 0 :(得分:2)

  • 您想使用Google Apps脚本实现以下情况。
    • 您想通过合并列“ C”和“ D”的值和格式来获得列“ H”。

enter image description here

如果我的理解是正确的,那么该示例脚本如何?该脚本的流程如下。

  1. 从“ C”和“ D”列中检索值和背景色。
  2. 将检索到的值和背景色合并成一个循环。
  3. 放置值和背景色。

示例脚本:

function myFunction() {
  var destColumn = "H"; // Please set the destination column.
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");

  var range = sheet.getRange("C1:D" + sheet.getLastRow());
  var values = range.getValues();
  var backgrounds = range.getBackgrounds();
  var obj = values.reduce(function(o, e, i) {
    if (e[0] && !e[1]) {
      o.values.push([e[0]]);
      o.backgrounds.push([backgrounds[i][0]]);
    } else if (!e[0] && e[1]) {
      o.values.push([e[1]]);
      o.backgrounds.push([backgrounds[i][1]]);
    } else {
      o.values.push([""]);
      o.backgrounds.push([""]);
    }
    return o;
  }, {values: [], backgrounds: []});
  var destRange = sheet.getRange(destColumn + "1:" + destColumn + sheet.getLastRow());
  destRange.setValues(obj.values);
  destRange.setBackgrounds(obj.backgrounds);
}
  • 使用此脚本时,请将其复制并粘贴到共享电子表格的脚本编辑器中。并运行myFunction的功能。
  • 在此脚本中,使用“ Sheet2”的“ C”和“ D”列将结果放入“ H”列。

注意:

  • 在此脚本中,当同一行的列“ C”和“ D”的两个单元格都具有值时,将放入空值。如果要修改此内容,请修改脚本。
  • 此示例脚本适用于您共享的电子表格。如果要在其他情况下使用此脚本,则需要修改此脚本。请注意这一点。

参考文献:

如果我误解了您的问题,而这不是您想要的结果,我深表歉意。