如何使用 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<>""
/ B1=1
)时,输出单元格返回B1
内容(C1
返回"1"
)。
而且它似乎没有解决格式所需的标准。
例如:
如果A1=""
、B1<>""
/B1=1
和B1
单元格背景为红色,则在输出单元格中返回B1
内容和格式(C1
返回1
和red 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 。也感谢您的文档,我将研究新的push
和 reduce
术语和用法。一如既往的好代码和很多好主意可以学习!我会尽快详细研究代码!保重身体!
@Lod 感谢您的回复。很高兴您的问题得到解决。以上是关于如何使用 Google 表格中的格式水平合并单元格/列?的主要内容,如果未能解决你的问题,请参考以下文章
在EXCEL中把上下两单元格合并了,怎样才能使文字上下居中呢?
C#2008报表控件导出excel格式,能实现类似excel中的合并单元格