使用CAxlsx gem (https://github.com/caxlsx/caxlsx),我试图将条件格式添加到一系列单元格中,如果单元格包含字符-
,则应该应用该样式。下面是我现在使用的代码片段:
worksheet.add_conditional_formatting(range,
type: :containsText,
formula: "-",
dxfId: @styles[:invalid],
priority: 1)
不幸的是,这似乎不起作用。当单元格不包含文本,而是一个负数时,它似乎应用了样式,但这不是我的用例。文档也非常缺乏,并且没有提供很多关于在这种情况下应该做什么的解释。(例如,有一个cellIs
类型,可以使用containsText
操作符,但也有一个containsText
类型,没有解释它们之间的区别是-,两者似乎都不起作用在我的情况下.( 如果有任何建议,我将不胜感激,到目前为止,这只是一个试验和错误。
假设您的范围类似"A1:A4"
,那么您正在寻找的公式是NOT(ISERROR(SEARCH("-",A1)))
。文档
的例子:
require 'axlsx'
package = Axlsx::Package.new
workbook = package.workbook
s = workbook.styles.add_style({b:true, type: :dxf})
rows = ['a','b-c','d','e-f']
workbook.add_worksheet do |sheet|
rows.each do |row|
sheet.add_row [row]
end
sheet.add_conditional_formatting("A1:A4", { :type => :containsText,
:operator => :containsText,
:formula => 'NOT(ISERROR(SEARCH("-",A1)))',
:dxfId => s,
:priority => 1 })
end
package.serialize('conditional_test.xlsx')
我发现确定合适的公式最简单的方法是:
- 手动创建新的excel工作簿
- 填写适当数量的单元格
- 有条件地将它们格式化为excel
- 保存此工作簿并关闭
- 将扩展名更改为.zip(因为xlsx只是压缩XML文件)
- 打开zip文件,导航到/xl/worksheets/sheet1.xml
- 打开该文件,它将显示用于条件格式的公式,例如
<x14:conditionalFormattings>
<x14:conditionalFormatting xmlns:xm="http://schemas.microsoft.com/office/excel/2006/main">
<x14:cfRule type="containsText" priority="1" operator="containsText" id="{E75522C8-BC6E-4142-B282-D21DF586C852}">
<xm:f>NOT(ISERROR(SEARCH("-",A1)))</xm:f>
<xm:f>"-"</xm:f>
<x14:dxf>
<font>
<color rgb="FF9C0006"/>
</font>
<fill>
<patternFill>
<bgColor rgb="FFFFC7CE"/>
</patternFill>
</fill>
</x14:dxf>
</x14:cfRule>
<xm:sqref>A1:A4</xm:sqref>
</x14:conditionalFormatting>
</x14:conditionalFormattings>