使用jsp实现word、excel格式报表打印(二)

来源:互联网 发布:手机淘宝下载 编辑:程序博客网 时间:2024/04/20 22:18
 使用jsp实现word、excel格式报表打印(二)   [ 日期:2006-12-18 ]   
来源:http://www.gs008.com/blog/blogview.asp?logID=325

因为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


方法二


1. 在Word或Excel中制作报表的样式。

        Excel的行高和列宽单位无法用mm或cm表示。

        需要计算。在1024*768下,1CM约为38像素。 

        以此为基准,可计算并控制报表的行列位置。


2. 在Word中设置“表格——标题行重复”。

    在Excel中设置“文件——页面设置——工作表——打印标题”。


3. 另存为网页,改后缀名“htm”为“jsp”。


4. Word报表文件头为:

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

     Excel报表文件头为:

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


5. 在文件头部分定义打印参数变量如下(以Excel为例):

<%   

   //需要打印的记录条数
   int PrintRowCount=RowCount;   

   //每页打印的记录条数
   int PageRowCount=16;            

   //最后一页需要打印的空行的数目
   int LoopNum=PageRowCount-PrintRowCount%PageRowCount; 

   //打印区域的高度,其中2的意思是每页需要重复的标题行的数目
   int PrintAreaHeight=(PrintRowCount%PageRowCount==0)?PrintRowCount+2:PrintRowCount+LoopNum+2;

%>


6. 在<style></style>后,改动<!--[if gte mso 9]与<![endif]-->标签中的XML标签内容,主要是设置动态打印区域(以Excel为例):

    <% 

     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>"+
         ...... ");

     %>


7. JSP其他编码。

下面是主体循环打印部分(以Excel为例):

<%  
      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>");//无内容
            }
%>


8. 测试并继续修改 


1. 在Word或Excel中制作报表的样式。

        Excel的行高和列宽单位无法用mm或cm表示。

        需要计算。在1024*768下,1CM约为38像素。 

        以此为基准,可计算并控制报表的行列位置。


2. 在Word中设置“表格——标题行重复”。

    在Excel中设置“文件——页面设置——工作表——打印标题”。


3. 另存为网页,改后缀名“htm”为“jsp”。


4. Word报表文件头为:

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

     Excel报表文件头为:

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


5. 在文件头部分定义打印参数变量如下(以Excel为例):

<%   

   //需要打印的记录条数
   int PrintRowCount=RowCount;   

   //每页打印的记录条数
   int PageRowCount=16;            

   //最后一页需要打印的空行的数目
   int LoopNum=PageRowCount-PrintRowCount%PageRowCount; 

   //打印区域的高度,其中2的意思是每页需要重复的标题行的数目
   int PrintAreaHeight=(PrintRowCount%PageRowCount==0)?PrintRowCount+2:PrintRowCount+LoopNum+2;

%>


6. 在<style></style>后,改动<!--[if gte mso 9]与<![endif]-->标签中的XML标签内容,主要是设置动态打印区域(以Excel为例):

    <% 

     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>"+
         ...... ");

     %>


7. JSP其他编码。

下面是主体循环打印部分(以Excel为例):

<%  
      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>");//无内容
            }
%>


8. 测试并继续修改 


1. 在Word或Excel中制作报表的样式。

        Excel的行高和列宽单位无法用mm或cm表示。

        需要计算。在1024*768下,1CM约为38像素。 

        以此为基准,可计算并控制报表的行列位置。


2. 在Word中设置“表格——标题行重复”。

    在Excel中设置“文件——页面设置——工作表——打印标题”。


3. 另存为网页,改后缀名“htm”为“jsp”。


4. Word报表文件头为:

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

     Excel报表文件头为:

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


5. 在文件头部分定义打印参数变量如下(以Excel为例):

<%   

   //需要打印的记录条数
   int PrintRowCount=RowCount;   

   //每页打印的记录条数
   int PageRowCount=16;            

   //最后一页需要打印的空行的数目
   int LoopNum=PageRowCount-PrintRowCount%PageRowCount; 

   //打印区域的高度,其中2的意思是每页需要重复的标题行的数目
   int PrintAreaHeight=(PrintRowCount%PageRowCount==0)?PrintRowCount+2:PrintRowCount+LoopNum+2;

%>


6. 在<style></style>后,改动<!--[if gte mso 9]与<![endif]-->标签中的XML标签内容,主要是设置动态打印区域(以Excel为例):

    <% 

     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>"+
         ...... ");

     %>


7. JSP其他编码。

下面是主体循环打印部分(以Excel为例):

<%  
      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>");//无内容
            }
%>


8. 测试并继续修改 


三、

<object classid="clsid:0002E510-0000-0000-C000-000000000046" id="Spreadsheet1"
style="HEIGHT: 100%; WIDTH: 100%" width="14" height="14">
  <param name="HTMLURL" value="<%=strURL%>">
  <param name="HTMLData"  value="">
  <param name="DataType" value="HTMLURL">
  <param name="AutoFit" value="0">
  <param name="DisplayColHeaders" value="0">
  <param name="DisplayGridlines" value="0">
  <param name="DisplayHorizontalScrollBar" value="-1">
  <param name="DisplayRowHeaders" value="0">
  <param name="DisplayTitleBar" value="0">
  <param name="DisplayToolbar" value="-1">
  <param name="DisplayVerticalScrollBar" value="-1">
  <param name="EnableAutoCalculate" value="-1">
  <param name="EnableEvents" value="0">
  <param name="MoveAfterReturn" value="0">
  <param name="MoveAfterReturnDirection" value="0">
  <param name="RightToLeft" value="0">
  <param name="ViewableRange" value="1:100">
</object>

 
原创粉丝点击