2013-04-09 63 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