使用jsp實現word、excel格式報表列印

來源:互聯網
上載者:User



使用jsp實現word、excel格式報表列印

http://www.javaresearch.org/article/showarticle.jsp?column=106&thread=8444
evan 原創  (參與分:35753,專家分:640)   發表:2003-8-14 下午3:14   更新:2003-8-21 上午12:49   版本:1.0   閱讀:9045



title: 使用JSP實現WORD、EXCEL格式報表列印

author: evan

email: evan_zhao@hotmail.com

date: 2003-08-21

因為ms word和excel的文檔都支援html文字格式設定,因此可以先用word或excel做好模版,另存新檔Web頁,然後將該html改成jsp,將資料部分動態填入即可,不用很辛苦的調整格式

 

word頁面只要在jsp頭設定如下指令:

<%@page contentType="application/msword;charset=GBK" %>

 

excel如下:

<%@page contentType="application/vnd.ms-excel;charset=GBK" %>

使用這種方式用戶端必須安裝有office軟體,使用者訪問時將在ie中直接用word或excel開啟該頁面。

此方法優勢是模板設計、調整方便,無需在伺服器端使用複雜的POI或jxl技術,也無需在用戶端使用ActiveX控制項技術,更安全、方便,輕鬆實現較好的列印效果。 

microsoft關於伺服器端動態建立office文檔的資料(asp樣本): 

http://support.microsoft.com/default.aspx?scid=KB;en-us;301044&

 

簡單樣本

使用word建立一文檔,畫表格如下:

----------------------------

| 使用者名稱 | 真實姓名 | 性別 |

----------------------------

| guest  | 路人甲   | 男   |

----------------------------

儲存為Web頁test.htm, 將test.htm改名為test.jsp,修改其中guest、路人甲、男為從資料庫動態查詢,如下:

  1. <%@ page contentType="application/msword;charset=GBK" %>
  2. <%@ page import="java.sql.*" %>
  3. <html xmlns:o="urn:schemas-microsoft-com:office:office"
  4. xmlns:w="urn:schemas-microsoft-com:office:word"
  5. xmlns="http://www.w3.org/TR/REC-html40">
  6. <head>
  7. <meta http-equiv=Content-Type content="text/html; charset=GB2312">
  8. <meta name=ProgId content=Word.Document>
  9. <meta name=Generator content="Microsoft Word 9">
  10. <meta name=Originator content="Microsoft Word 9">
  11. <title>使用者資訊</title>
  12. <!--[if gte mso 9]><xml>
  13.  <o:DocumentProperties>
  14.   <o:Author>evan zhao</o:Author>
  15.   <o:LastAuthor>evan zhao</o:LastAuthor>
  16.   <o:Revision>1</o:Revision>
  17.   <o:TotalTime>1</o:TotalTime>
  18.   <o:Created>2003-08-20T16:26:00Z</o:Created>
  19.   <o:LastSaved>2003-08-20T16:27:00Z</o:LastSaved>
  20.   <o:Pages>1</o:Pages>
  21.   <o:Company>taiping</o:Company>
  22.   <o:Lines>1</o:Lines>
  23.   <o:Paragraphs>1</o:Paragraphs>
  24.   <o:Version>9.2812</o:Version>
  25.  </o:DocumentProperties>
  26. </xml><![endif]--><!--[if gte mso 9]><xml>
  27.  <w:WordDocument>
  28.   <w:PunctuationKerning>
  29.   <w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
  30.   <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
  31.   <w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
  32.   <w:Compatibility>
  33.    <w:SpaceForUL>
  34.    <w:BalanceSingleByteDoubleByteWidth>
  35.    <w:DoNotLeaveBackslashAlone>
  36.    <w:ULTrailSpace>
  37.    <w:DoNotExpandShiftReturn>
  38.    <w:AdjustLineHeightInTable>
  39.    <w:UseFELayout>
  40.   </w:Compatibility>
  41.  </w:WordDocument>
  42. </xml><![endif]-->
  43. <style>
  44. <!--
  45.  /* Font Definitions */
  46. @font-face
  47.     {font-family:宋體;
  48.     panose-1:2 1 6 0 3 1 1 1 1 1;
  49.     mso-font-alt:SimSun;
  50.     mso-font-charset:134;
  51.     mso-generic-font-family:auto;
  52.     mso-font-pitch:variable;
  53.     mso-font-signature:3 135135232 16 0 262145 0;}
  54. @font-face
  55.     {font-family:"\@宋體";
  56.     panose-1:2 1 6 0 3 1 1 1 1 1;
  57.     mso-font-charset:134;
  58.     mso-generic-font-family:auto;
  59.     mso-font-pitch:variable;
  60.     mso-font-signature:3 135135232 16 0 262145 0;}
  61.  /* Style Definitions */
  62. p.MsoNormal, li.MsoNormal, div.MsoNormal
  63.     {mso-style-parent:"";
  64.     margin:0cm;
  65.     margin-bottom:.0001pt;
  66.     text-align:justify;
  67.     text-justify:inter-ideograph;
  68.     mso-pagination:none;
  69.     font-size:10.5pt;
  70.     mso-bidi-font-size:12.0pt;
  71.     font-family:"Times New Roman";
  72.     mso-fareast-font-family:宋體;
  73.     mso-font-kerning:1.0pt;}
  74.  /* Page Definitions */
  75. @page
  76.     {mso-page-border-surround-header:no;
  77.     mso-page-border-surround-footer:no;}
  78. @page Section1
  79.     {size:595.3pt 841.9pt;
  80.     margin:72.0pt 90.0pt 72.0pt 90.0pt;
  81.     mso-header-margin:42.55pt;
  82.     mso-footer-margin:49.6pt;
  83.     mso-paper-source:0;
  84.     layout-grid:15.6pt;}
  85. div.Section1
  86.     {page:Section1;}
  87. -->
  88. </style>
  89. </head>
  90. <body lang=ZH-CN style='tab-interval:21.0pt;text-justify-trim:punctuation'>
  91. <div class=Section1 style='layout-grid:15.6pt'>
  92. <table border=1 cellspacing=0 cellpadding=0 style='border-collapse:collapse;
  93.  border:none;mso-border-alt:solid windowtext .5pt;mso-padding-alt:0cm 5.4pt 0cm 5.4pt'>
  94.  <tr>
  95.   <td width=189 valign=top style='width:142.0pt;border:solid windowtext .5pt;
  96.   padding:0cm 5.4pt 0cm 5.4pt'>
  97.   <p class=MsoNormal><span style='font-family:宋體;mso-ascii-font-family:"Times New Roman";
  98.   mso-hansi-font-family:"Times New Roman"'>使用者名稱</span></p>
  99.   </td>
  100.   <td width=189 valign=top style='width:142.05pt;border:solid windowtext .5pt;
  101.   border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  102.   <p class=MsoNormal><span style='font-family:宋體;mso-ascii-font-family:"Times New Roman";
  103.   mso-hansi-font-family:"Times New Roman"'>真實姓名</span></p>
  104.   </td>
  105.   <td width=189 valign=top style='width:142.05pt;border:solid windowtext .5pt;
  106.   border-left:none;mso-border-left-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  107.   <p class=MsoNormal><span style='font-family:宋體;mso-ascii-font-family:"Times New Roman";
  108.   mso-hansi-font-family:"Times New Roman"'>性別</span></p>
  109.   </td>
  110.  </tr>
  111. <%
  112. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
  113. String url="jdbc:odbc:mydb";
  114. //串連mydb資料庫
  115. Connection con=DriverManager.getConnection (url, "", ""); 
  116. try{
  117.   Statement stmt=con.createStatement(); 
  118.   //查詢employee表
  119.   ResultSet rs=stmt.executeQuery("select user_name, real_name, gender from employee ");
  120.   while(rs.next()){
  121. %>
  122.  <tr>
  123.   <td width=189 valign=top style='width:142.0pt;border:solid windowtext .5pt;
  124.   border-top:none;mso-border-top-alt:solid windowtext .5pt;padding:0cm 5.4pt 0cm 5.4pt'>
  125.   <p class=MsoNormal><span lang=EN-US><%=rs.getString("user_name")%></span></p>
  126.   </td>
  127.   <td width=189 valign=top style='width:142.05pt;border-top:none;border-left:
  128.   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  129.   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  130.   padding:0cm 5.4pt 0cm 5.4pt'>
  131.   <p class=MsoNormal><span style='font-family:宋體;mso-ascii-font-family:"Times New Roman";
  132.   mso-hansi-font-family:"Times New Roman"'><%=rs.getString("real_name")%></span></p>
  133.   </td>
  134.   <td width=189 valign=top style='width:142.05pt;border-top:none;border-left:
  135.   none;border-bottom:solid windowtext .5pt;border-right:solid windowtext .5pt;
  136.   mso-border-top-alt:solid windowtext .5pt;mso-border-left-alt:solid windowtext .5pt;
  137.   padding:0cm 5.4pt 0cm 5.4pt'>
  138.   <p class=MsoNormal><span style='font-family:宋體;mso-ascii-font-family:"Times New Roman";
  139.   mso-hansi-font-family:"Times New Roman"'><%=rs.getString("gender")%></span></p>
  140.   </td>
  141.  </tr>
  142. <%
  143.   } // end while
  144.   
  145.   rs.close();
  146.   stmt.close();
  147. finally {
  148.   con.close();
  149. }
  150. %> 
  151.  
  152. </table>
  153. <p class=MsoNormal><span lang=EN-US><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p>
  154. </div>
  155. </body>
  156. </html>

相關連結:

在良好的J2EE程式中資料庫查詢可能寫在專門的DAO(Data Access Object)中, 如何方便的查詢資料並傳遞列表至JSP頁面請參考:

JSP頁面查詢顯示常用模式

本文參考:WEB應用中報表列印的實現

著作權聲明   給作者寫信
本篇文章對您是否有協助?  投票:         投票結果:     2       0
作者其它文章:

  • JSP分頁技術實現
  • JSP頁面查詢顯示常用模式

作者全部文章

  評論人:tangzh    參與分: 6    專家分: 0 發表時間: 2003-8-25 下午1:16
談談自己的感受:

    對列印報表方面使用該方法,感覺沒有什麼價值,如:表格中特殊符號(斜杆)不能處理,分頁不能自動、每頁中頁表頭表尾不能自動添加。。。

    但如果用PDF列印,就能體現列印報表的優勢。
  評論人:FetchPro    參與分: 15    專家分: 0 發表時間: 2003-9-1 下午5:43
同意樓上的意見!WORD 做報表不適宜.

我使用org.faceless.pdf的軟體包,做出PDF報表還可以使用adobe reader的功能。

  評論人:evan    參與分: 35753    專家分: 640    來自: Shanghai
發表時間: 2003-9-3 下午1:40
這隻是簡單的解決辦法,適合沒有保表工具的輕量及應用。word裡可以使用頁首頁尾,也可以用分頁符控制分頁。excel裡可以嵌入公式等方便業務部門操作,並且使用者可以在這個結果上再加工

使用pdf列印最大的問題是如何設計頁面配置、字型等,如果有一個方便的可視化編輯器做模版就好了

想做專業報表還是需要專業保表工具,可以方便的產生各種檔案格式

  評論人:wanglaobie    參與分: 9    專家分: 0 發表時間: 2004-5-18 上午10:47
用這種方法報表會變形,請問有沒有一種方法將報表輸出到word中同時保證報表不變形?
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.