2016-06-20 121 views
5

是否可以使用Excel::Writer::XLSX更改或聲明默認字體? 每次創建或添加圖表和單元格時,我都可以設置它。但我認爲應該有一個更簡單的方法。如何使用Excel :: Writer :: XLSX設置工作簿範圍的默認格式?

+0

你用什麼模塊?我在CPAN上找不到一個名爲「xlswriter」的人。 – zb226

+0

我正在使用[this](http://search.cpan.org/~jmcnamara/Excel-Writer-XLSX/lib/Excel/Writer/XLSX/Chart.pm)之一。 – tsoomo

+0

我找到了方法並更新了答案。 – simbabque

回答

3

也許吧。

免責聲明:的Excel ::作家:: XLSX的作者解釋說,這不是一個好主意,並不能保證工作herehere

創建Format對象時,可以將屬性xf_index設置爲0。這會將該格式設置爲默認格式。

use Excel::Writer::XLSX; 

my $workbook = Excel::Writer::XLSX->new('filename.xlsx'); 

# set the default format 
$workbook->add_format(xf_index => 0, font => 'Comic Sans MS'); # I'm on Linux 

my $worksheet = $workbook->add_worksheet(); 
$worksheet->write(0, 0, 'Hi Excel!');  # will be in Comic Sans 

my $format = $workbook->add_format(font => 'Arial'); 
$worksheet->write(1, 1, 'In Arial!', $format); 

這不是在文檔中描述,但reading the code解釋它。

即使您稍後添加更多格式,它也能正常工作。您不需要保留該初始調用的Format對象。它將在整個工作簿中使用(可能也在不同的工作表中,但我沒有測試過)。

我建議你解釋一下你在代碼註釋中做了什麼,因爲它確實不是很明顯。

經過一些額外的研究,我發現它在the PDF document OpenOffice.org's Documentation of the Microsoft Excel File Format,在第89頁底部的4.6.2章節(我的重點)中有解釋。

缺省單元格格式 總是出現在Excel文件中,由具有固定索引15(基於從0的)的XF記錄描述。 默認情況下,它使用第一個XF記錄(索引0)所描述的 工作表/工作簿默認單元樣式。

所以現在我們也知道它爲什麼是xf_index => 0


舊的答案與一般建議:

一般來說,這不是支持。你需要使用格式。 The docs say有Calibri大小爲11的默認格式。

默認格式爲Calibri 11,其他所有屬性都關閉。

你需要創建一個格式對象的格式,字體,字體大小等的特定組合,然後你可以重複使用,在整個在每個小區或圖表的文檔。如果其中一個選項在特定單元格中不同,則需要爲此創建一個額外的Format對象。

my $default_format = $workbook->add_format(font => 'Comic Sans'); 

# ... 

$worksheet->write('A1', 'Cell A1', $default_format); 

# later ... 

$worksheet->write('Z3', 'Cell Z3', $default_format); 

如果你需要很多不同的格式,但總是想用相同的字體,它可能是設置字體的字符串作爲格式散列和使用有用。

my %default_formatting = (font => 'Comic Sans'); 
my $bold_format = $workbook->add_format(%default_formatting, bold => 1); 

甚至使子,有助於創建格式對象和已經知道的默認字體。

sub create_format { 
    my ($workbook, %formats) = @_; 
    return $workbook->add_format(font => 'Comic Sans', %formats); 
} 

# somewhere 
my $bold_format = create_format($workbook, bold => 1); 
$worksheet->write('A1', 'Cell A1', $bold_format); 

這也將使扔掉的格式是這樣的:

$worksheet->write('D1', 'Weird stuff', create_format( 
    $workbook, 
    bold  => 1, 
    strikeout => 1, 
    shadow => 1, 
    bg_color => 'pink', 
)); 
+2

*是的,但它是隱藏的。創建Format對象時,您可以將屬性xf_index設置爲0。*這不保證現在或將來的任何時候都可以使用。在Excel 2007+中設置默認格式的唯一有效方法是更新theme.xml文件,並且Excel :: Writer :: XLSX當前不支持該文件。 – jmcnamara

+0

@jmcnamara感謝您澄清。但是,這不會也適用於你的代碼在我發現它的構造函數嗎? – simbabque

+0

構造函數設置默認格式以匹配默認主題文件中的默認格式。您的解決方法可能適用於某些情況,但不是全部。 – jmcnamara

相關問題