2013-04-09 28 views
4

我使用axlsx gem来处理xlsx文件。 请帮我设置单元格中的字体。宝石axlsx如何设置字体font_name?

item_style = s.add_style :b => false, :sz => 9, :font_name => 'courier', 
     :alignment => { :horizontal => :left, :vertical => :center, :wrap_text => true} 
row = sheet.add_row [item.name, item.price], :style => item_style 

但是单元格中的字体仍然是'Arial'。 我需要任何'单宽'字体。 我知道'信使'不是单宽度字体,只是举例而已。

因为我有固定的列宽。 我想知道单元格中的文本何时需要2行。 设置适当的行高。

谢谢。

回答

2

我会建议尝试下面的小例子,并确保它的工作。你需要在样式块中包含所有的东西。

p = Axlsx::Package.new 
    wb = p.workbook 
    wb.styles do |s| 
    courier = s.add_style :font_name => "Courier" 
    wb.add_worksheet(:title => "Worksheet 1") do |sheet| 
     sheet.add_row(["text in Courier"], :style => courier) 
    end 
    end 
p.serialize("Courier.xlsx") 

我没有用过axlsx所有的东西,但我相信,使用任何样式必须声明的样式块,并且该块内使用。

+0

我复制并通过定好你的代码,并执行它。字体仍然是“Arial”。但谢谢你的尝试。 – greenif 2013-04-10 10:38:15

+0

很好的例子acsmith!仅供参考 - 块或内联声明没问题。 – randym 2013-04-10 11:00:48

+0

从@randym考虑下面的评论 - 当我仅使用上面的代码生成文件时,Google Drive会正确呈现文件。您可能想尝试在Google云端硬盘中检查它,因为它可以解决您可能遇到的任何可能的字体名称问题。 – acsmith 2013-04-11 02:32:14

7

看看你的风格声明,这似乎适合我。冒着听起来迂腐的风险,你应该大写字体名称。

结合你的位和来自acsmith的好例子,下面的代码在excel中应该可以正常工作。你用什么软件查看Axlsx文件?并非所有电子表格软件都完全/实现了OOXML规范。

require 'axlsx' 
p = Axlsx::Package.new 
wb = p.workbook 
item_style = wb.styles.add_style :b => false, :sz => 9, :font_name => 'Courier', 
    :alignment => { :horizontal => :left, :vertical => :center, :wrap_text => true} 
wb.add_worksheet(:title => "Worksheet 1") do |sheet| 
    sheet.add_row(["text in Courier"], :style => item_style) 
end 
p.serialize("courier.xlsx") 

最好

randym

+0

已解决。谢谢。是的,你是对的。我使用libreoffice 3.6.4.3,当我尝试在Microsoft Excel 2007中打开文件时,在你的和我的文件中,看起来很好。之后我试图安装libreoffice 4.0.0.2。但它没有帮助,所以libreoffice不支持此功能。 \t 幸运的是我的客户使用Excel。 – greenif 2013-04-11 08:58:08

1

由我们Axlsx宝石,font_name可设定这样的许多方面,这是对我工作:

sheet.add_row ["some data", "","","", "", "","",""], :sz => 9,:height => 16,:font_name => "Arial" -------------> first way 

sheet.rows.last.cells[0].font_name = "Arial" ----------> second way 

sheet["A10"].font_name = "Arial" -----------> third way 

多行:

sheet["A1:E1"].each { |c| c.font_name = "Arial" } -------> fourth way 

@arial_fontfamily = s.add_style :b => 'true', :sz => 10, :font_name => 'Arial' --> small css definition -------> fifth way 

sheet["A1:E1"].each { |c| c.style = @arial_fontfamily } -------> sixth way 

sheet.add_row ["some data", "","","", "", "","",""], :sz => 9,:height => 16,:style => @arial_fontfamily -------------> seventh way