我正在尝试设置超链接单元格中文本的前景色,但它似乎不起作用。
使用类似以下内容:
sheet["A1"].color = "0000FF"
对于正常单元格效果很好,但对于超链接单元格则不然
此代码只是在“日志”工作表上创建一个指向单元格 D1 的链接(效果很好),但 A1 永远不会变成蓝色!
sheet.add_hyperlink :location => "'Log'!D1", :target => :sheet, :ref => "A1"
sheet["A1"].color = "0000FF"
谢谢!
在为链接应用颜色之前需要做两件重要的事情:
样式通常应用于行,但在本例中您希望将其应用于特定单元格。 这是可能的,但您需要直接通过工作表对象来寻址单元格。 另外,与直觉有些相反的是,“add_hyperlink”方法适用于 Sheet 对象,而不适用于 Cell。 所以也要小心这一点。
以下是如何将样式应用到包含链接的单元格的示例:
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 上的某个地方提及!
这似乎有效:
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'
您可以发布一个未设置颜色的代码的更大示例吗?
显然 Axlsx 仅将自定义样式应用于字符串数据类型。 通过将每列设置为键入 :string 来修复此问题,如下所示:
Sheet.add_row [ "1", "2", "3" ], :types => [:string, :string, :string]
谢谢兰迪!
对@curley 的答案进行一点补充。
有时,直接访问单元格比通过绝对引用更容易,特别是在循环生成统一行的情况下。
考虑一下这个通用代码,我们在工作表中添加一行,然后根据行数组中单元格的索引而不是 Excel 的列字母添加指向特定单元格的超链接。
最后,我们直接使用
cell.style =
为单元格指定一个样式
# sometime before the row loop
@blue_underlined_link = workbook.styles.add_style(u: true, fg_color: "0000FF")
objects.each do |object|
sheet.add_row(object_row(object), types: cell_types, style: style)
object_row_hyperlinks(object).each do |link_data|
cell = sheet.rows.last.cells[link_data[:cell_index]]
sheet.add_hyperlink(ref: cell, location: link_data[:hyperlink])
cell.style = @blue_underlined_link
end
end