4

我正在尝试在超链接单元格中设置文本的前景色,但它似乎不起作用。

使用类似的东西:sheet["A1"].color = "0000FF"适用于正常细胞,但不适用于超链接细胞

这段代码只是在“日志”表上创建了一个指向单元格 D1 的链接(工作正常),但 A1 永远不会变成蓝色!

sheet.add_hyperlink :location => "'Log'!D1", :target => :sheet, :ref => "A1" sheet["A1"].color = "0000FF"

谢谢!

4

3 回答 3

8

在将颜色应用于链接之前,有两件重要的事情要做:

  1. 您必须在样式中定义颜色,并且
  2. 您必须知道相关单元的确切地址。

样式通常应用于行,但在这种情况下,您希望将其应用于特定单元格。这是可能的,但您需要直接通过工作表对象来寻址单元格。此外,有点反直觉的是,“add_hyperlink”方法可用于工作表对象,而不是单元格。所以也要注意这一点。

以下是如何将样式应用于包含链接的单元格的示例:

p = Axlsx::Package.new
p.workbook do |wb|
  wb.styles do |s|
    blue_link = s.add_style :fg_color => '0000FF'
    wb.add_worksheet(:name => "Anchor Link Test") do |sheet|
      sheet.add_row ['Title', 'Link']

      # Define the row here, we will use that later
      row = sheet.add_row ['Google', 'Click to go']

      # Add the hyperlink by addressing the column you have used and add 1 to the row's index value.
      sheet.add_hyperlink :location => "http://www.google.com", :ref => "B#{row.index + 1}"
      sheet["B#{row.index + 1}"].style = blue_link
    end
    s = p.to_stream()
    File.open("anchor_link_test.xlsx", 'w') { |f| f.write(s.read) }
  end
end  

最后说明:您可能会注意到我使用这些方法编写了此电子表格

s = p.to_stream()
File.open("anchor_link_test.xlsx", 'w') { |f| f.write(s.read) }

Axlsx Github 问题页面上有证据表明这种写出文件的方法比

p.serialize

只是认为在 StackOverflow 上的某处值得一提!

于 2013-01-11T05:10:16.193 回答
1

这似乎有效:

require 'axlsx'
p = Axlsx::Package.new
ws = p.workbook.add_worksheet
ws.add_row ['hoge-hoge']
ws['A1'].color = '0000FF'
ws.add_hyperlink :location => 'F6', :target => :sheet, :ref => 'A1'
p.serialize 'where_is_my_color.xlsx'

您能否发布一个更大的未设置颜色的代码示例?

于 2012-10-04T01:23:05.977 回答
0

显然 Axlsx 仅将自定义样式应用于字符串数据类型。通过将每一列设置为 :string 来解决此问题,如下所示:

Sheet.add_row [ "1", "2", "3" ], :types => [:string, :string, :string]

谢谢兰迪!

于 2012-10-05T12:52:51.577 回答