利用 Word/Excel 強大的排版能力設計報表樣式,另存為 HTML(實為 MHTML),修改副檔名為 .jsp,嵌入 Java 代碼動態填充數據。適合格式固定、打印要求高的業務報表。
<%@ page contentType="application/msword;charset=GBK" %><%@ page contentType="application/vnd.ms-excel;charset=GBK" %><%
int printRowCount = rowCount; // 總記錄數
int pageRowCount = 16; // 每頁行數
int loopNum = pageRowCount - printRowCount % pageRowCount; // 末頁補齊空行
int printAreaHeight = (printRowCount % pageRowCount == 0) ?
printRowCount + 2 : printRowCount + loopNum + 2; // +2 為標題行
%>
<%
out.print("<x:ExcelName><x:Name>Print_Area</x:Name>"
+ "<x:SheetIndex>1</x:SheetIndex>"
+ "<x:Formula>=Sheet1!$A$1:$G$" + printAreaHeight + "</x:Formula>"
+ "</x:ExcelName>");
%>
<%
for (int i = 1; i <= printRowCount; i++) {
out.print("<tr><td>" + i + "</td></tr>"); // 有內容行
}
if (loopNum != pageRowCount) { // 補齊末頁空行
for (int j = 1; j <= loopNum; j++) {
out.print("<tr><td> </td></tr>");
}
}
%>
| 優點 | 缺點 |
|---|---|
| 所見即所得,業務人員可直接維護樣板 | HTML 代碼冗長,混雜 Office 專屬標籤,難以維護 |
| 無需學習報表工具(iText、POI、JasperReports) | 跨瀏覽器兼容性差,僅適合 IE/Edge 內嵌場景 |
| 打印分頁、標題行自動處理 | 大數據量導出極慢,內存佔用高 |
「Office 另存為 HTML + JSP 動態化」是一種低門檻、快速交付的報表方案,適合原型驗證或內部低頻打印需求。隨著業務增長,應規劃遷移至專業報表引擎。