首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Perl Spreadsheet::WriteExcel 實戰:從 Oracle 直接產出專業格式 Excel 報表

     編輯:Oracle 資料庫基礎

為何需要直接產生 Excel 二進位檔?

商務用戶習慣使用 Excel 分析資料。雖可透過 ODBC 連結資料庫,但部署連線環境複雜。開發人員直接從資料庫產出 .xls 檔,再透過 Email 或網站下發,是更輕量且通用的方案。

CSV 方案的侷限

  • 無格式控制(字型、顏色、框線、對齊)。
  • 公式需用戶手動調整儲存格位置才生效。
  • 無法保護工作表、設定列印區域、凍結窗格。

Spreadsheet::WriteExcel 核心能力

John McNamara 開發的 Perl 模組,能動態產生真正的 Excel 二進位檔,支援:

  • 建立活頁簿、多工作表、寫入儲存格。
  • 豐富格式:字型、粗體、顏色、填充圖案、邊框、對齊、數字格式(貨幣、千分位)。
  • 進階功能:文字旋轉、插入圖片、工作表密碼保護、資料分組大綱、列印設定、頁面中斷。
  • 支援標準輸出,可整合於 CGI 程式,透過 HTTP 提供動態下載。

完整範例:DBI 查詢 EMP 表並產出格式化報表

use DBI;
use Spreadsheet::WriteExcel;

# 連線資料庫
my $dbh = DBI->connect('dbi:Oracle:','scott','tiger') || die $DBI::errstr;
print "Generating Excel Spreadsheet\n";

# 建立活頁簿與工作表
my $workbook  = Spreadsheet::WriteExcel->new("emp.xls");
my $worksheet = $workbook->add_worksheet();

# 定義格式
my $fmt = {
  HEADER   => $workbook->add_format(bold=>1, align=>'center', bottom=>2, bg_color=>'silver'),
  ENAME    => $workbook->add_format(bold=>1, color=>'blue'),
  MONEY    => $workbook->add_format(num_format=>'$#,##0.00', align=>'right'),
  TOTAL    => $workbook->add_format(num_format=>'$#,##0.00', align=>'right', bold=>1, top=>2),
};

# 寫入標題列
my $r = 1;
$worksheet->write($r-1, 0, 'Employee', $fmt->{HEADER});
$worksheet->write($r-1, 1, 'Salary',   $fmt->{HEADER});
$worksheet->write($r-1, 2, 'Commission',$fmt->{HEADER});
$worksheet->write($r-1, 3, 'Total',    $fmt->{HEADER});
$r++;

# 查詢資料並寫入,含公式計算總薪
my $sth = $dbh->prepare('SELECT * FROM emp') || die $DBI::errstr;
$sth->execute;
while (my $row = $sth->fetchrow_hashref) {
  $worksheet->write($r-1, 0, $row->{ENAME}, $fmt->{ENAME});
  $worksheet->write($r-1, 1, $row->{SAL},   $fmt->{MONEY});
  $worksheet->write($r-1, 2, $row->{COMM},  $fmt->{MONEY});
  $worksheet->write($r-1, 3, "=B$r+C$r",    $fmt->{MONEY}); # Excel 公式
  $r++;
}

# 總計列
$worksheet->write($r-1, 0, '', $fmt->{TOTAL});
$worksheet->write($r-1, 1, "=SUM(B2:B".($r-1).")", $fmt->{TOTAL});
$worksheet->write($r-1, 2, "=SUM(C2:C".($r-1).")", $fmt->{TOTAL});
$worksheet->write($r-1, 3, "=B$r+C$r", $fmt->{TOTAL});

print "Processed " . ($r-2) . " rows\n";
$sth->finish;

部署建議

  • 伺服器端安裝 Perl、DBD::Oracle、Spreadsheet::WriteExcel 模組。
  • 搭配 Cron 排程定時產出報表,或整合至 Web 應用即時下載。
  • 大量資料時注意記憶體使用,可分批寫入。

此方案無需用戶端安裝任何驅動程式,即可獲得專業級 Excel 報表,是資料對帳、管理報表自動化的最佳選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved