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

Posted

技术标签:

【中文标题】如何使用 Google 表格中的格式水平合并单元格/列?【英文标题】:How to Merge Cells/Columns Horizontally With Formatting in Google Sheets? 【发布时间】:2019-06-17 06:10:00 【问题描述】:

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

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&lt;&gt;"" / B1=1)时,输出单元格返回B1 内容(C1 返回"1")。

而且它似乎没有解决格式所需的标准。

例如:

如果A1=""B1&lt;&gt;""/B1=1B1单元格背景为红色,则在输出单元格中返回B1内容和格式(C1返回1red as cell background color) .

但非常感谢关于.mergeAcross() 行动的建议。我不知道这件事,知道它确实很有价值。

【问题讨论】:

Google Spreadsheet script to merge cells in column A containing 'Hello' with the adjacent cell in column B的可能重复 【参考方案1】: 您希望使用 Google Apps 脚本实现以下情况。 您希望通过合并“C”和“D”列的值和格式来获得“H”列。

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

    从“C”和“D”列中检索值和背景颜色。 在循环中合并检索到的值和背景颜色。 输入值和背景颜色。

示例脚本:

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”列的两个单元格都有值时,将放置空值。如果要修改,请修改脚本。 此示例脚本适用于您的共享电子表格。如果您想将此用于其他情况,则需要修改此脚本。请注意这一点。

参考资料:

setValues(values) setBackgrounds(color) reduce()

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

【讨论】:

嗨@Tanaike!它工作得很好,谢谢!我在这里录制了一个快速演示 youtu.be/eknW6cijRdo 。也感谢您的文档,我将研究新的 pushreduce 术语和用法。一如既往的好代码和很多好主意可以学习!我会尽快详细研究代码!保重身体! @Lod 感谢您的回复。很高兴您的问题得到解决。

以上是关于如何使用 Google 表格中的格式水平合并单元格/列?的主要内容,如果未能解决你的问题,请参考以下文章

Google表格合并的单元格创建空间

在EXCEL中把上下两单元格合并了,怎样才能使文字上下居中呢?

C#2008报表控件导出excel格式,能实现类似excel中的合并单元格

根据 Google 表格中的第一个单元格格式化列中的单元格

如何使用 API 格式化 Google 表格电子表格单元格?

excel中怎样使表格数据显示为水平居中和垂直居中?