2009年1月5日

用Perl讀寫Excel文件(1)

基本上是參考IBM網站上的說明文件
不過這篇有種濃厚的機器翻譯感, 稍微擷取一下需要的部分來談談吧!
Windows下通常我們會使用Win32::OLE裡的方法來處理,

use Win32::OLE::Const 'Microsoft Excel';
my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
|| Win32::OLE->new('Excel.Application', 'Quit');

上面為設定參數, 嘗試尋找已存在的Excel, 否則開啟一個新的Excel Instance.

# open Excel file
my $Book = $Excel->Workbooks->Open("c:/komodo projects/test.xls");

開啟一個指定路徑下的Excel檔案, 回傳一個Win32::OLE->Excel->Workbooks的物件; 有了這個handle就可以使用Excel檔案了.

my $Sheet = $Book->Worksheets(1);

指定調用第幾個工作表. 上面指定了第一個. 可以利用worksheet的名字來調用.

$data= $Sheet->Cells($row,$col)->{'Value'};

$data將得到(row,col)的值. 事實上, 相反的也可以這樣修改(row,col)的內容.
調用Formula則是把Value改為Formula即可. ex: $Sheet->Cells($row,$col)->{'Formula'} ;row,col也可以用Range("[alphabet][number]")的方式直接取值.

不過實際上我是看到另外一個作法, 所以才看到這篇文章的. 據該文表示, 這可能不適用於Windows系統. 不過對於一篇2001年的文章, 有足夠理由相信作者已經作了許多改變. 這個perl module的名字叫做 Spreadsheet::WriteExcel 和 Spreadsheet::ParseExcel. 光聽名字就感覺很強大....錯覺?

如果需要cpan上的manual與若干code請點這個連結

正體中文愛好者可以看這篇, 簡介了最基礎的調用方法. 引用裡面的code:

use Spreadsheet::WriteExcel;
my $workbook = Spreadsheet::WriteExcel->new("-");
my $worksheet = $workbook->add_worksheet("MySheet");

建Wworkbooks, worksheet的方法.

$worksheet->write(5, 0, "Division Number:", $bold);
$worksheet->write(5, 1, $division_number);

填值的方法, 大同小異.

字體格式可以另外加上, 例如:

my $bold = $workbook->add_format();
$bold->set_bold();


基本上還有許多參數可以下, 以及許多函式可調用. 可以參照上面的cpan連結.