【问题标题】:ConditionalFormatting of cell containing string in CAxlsxCAxlsx中包含字符串的单元格的ConditionalFormatting
【发布时间】:2021-12-11 14:19:49
【问题描述】:

使用 CAxlsx gem (https://github.com/caxlsx/caxlsx),我正在尝试将条件格式添加到一系列单元格,如果单元格包含字符 -,则应在其中应用样式。这是我目前正在使用的 sn-p。

worksheet.add_conditional_formatting(range,
      type: :containsText,
      formula: "-",
      dxfId: @styles[:invalid],
      priority: 1)

不幸的是,这似乎不起作用。当单元格不包含文本而是负数时,它似乎确实应用了样式,但这不是我的用例。该文档也严重缺乏,并且没有提供很多关于在这种情况下应该做什么的解释。 (例如,有一个 cellIs 类型,可以使用 containsText 运算符,但也有一个 containsText 类型,没有解释它们之间的区别是什么 - 似乎都不起作用我的情况。)任何指针将不胜感激,到目前为止,这只是反复试验。

【问题讨论】:

    标签: ruby formatting conditional-statements caxlsx


    【解决方案1】:

    假设您的范围类似于"A1:A4",那么您正在寻找的公式是NOT(ISERROR(SEARCH("-",A1)))Docs

    例子:

    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>
    

    【讨论】:

      猜你喜欢
      • 2015-07-16
      • 2021-04-18
      • 2015-04-21
      • 1970-01-01
      • 2021-10-06
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多