Asp.net源码交流论坛 Asp.net交流讨论区Asp.ne技术问答使用HTML文件作为中转生成WORD文档(转)

1  /  1  页    1  跳转
发表新主题 回复该主题

标题: 使用HTML文件作为中转生成WORD文档(转)

身份:董事长

 
  • UID:2
  • 来自:北京
  • 精华:27
  • 积分:1696
  • 帖子:1507
  • 注册: 2007-05-17
  • 状态: 离线
  • 威望:54.00
  • 金钱:268.95 元
 
源码发布专家

使用HTML文件作为中转生成WORD文档(转)

批量生成Word 要是一个个的填写,工作量还真是很大,而且以后每年都要这样填写,实在是太麻烦了。

    好了,这应该是一个很简单的问题,假设数据都准备好了(事实上这部分也是一团糟,尽管比较简单),我们可以考虑使用报表设计器做一个报表,但是其中报表的细节比较麻烦(比如答辩委员会的成员可能只有7个,而不是图示的8个,一般的报表设计器不是很好处理)。再考虑直接用程序生成WORD文档吧,嗯,WORD的对象模型可以参考,但生成这种格式还是比较麻烦的,我们可以考虑一种变通的方法——使用HTML文件作为中转:
    先使用Dreamweaver等HTML生成工具,生成上图所示的表格,保存为一个html文件。用WORD打开这个html文件,看一下效果(使用“页面”视图),除了表格线好像太粗了,其它的CSS样式应用效果还是很好的。现在,我们就可以考虑像ASP时代开发的时候使用代码循环为每一个学生那样生成这个表格了。另外,还有一个需求需要满足,就是每个学生的审核表应该占一页,也就是说每次循环都应该插入一个分页符。HTML文件中没有分页的概念,我们可以先在WORD中插入一个分页符,然后将这个WORD文档另存为HTML文件,然后查看其源文件,可以看到,分页符是这样的:

<br clear=all style='page-break-before:always'>


至于细线表格,当然可以在CSS样式中加以定义,也可以按照上面分页符的方式查看其源代码:

<table width='610' border='1' cellpadding='0' cellspacing='0' bordercolor='#000000' style='border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt; mso-yfti-tbllook:480;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;mso-border-insideh:.5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'></table>


OK,下面的代码就可以为所有学生一次生成审核表了:

string strFilePath = Application.StartupPath + @&quot;\wordfile.doc&quot;;
2
3            System.IO.StreamWriter sw = new System.IO.StreamWriter(strFilePath, false, System.Text.Encoding.GetEncoding(&quot;gb2312&quot;));
4            sw.WriteLine(&quot;<html><head><meta http-equiv='Content-Type' content='application/msword; charset=gb2312'><title>学位论文答辩委员会成员审核表</title>&quot;);
5            sw.WriteLine(&quot;<style type='text/css'><!--.STYLE1 {    font-family: '宋体';    font-size: 18pt;    font-weight: bold; } .STYLE2 {    font-family: '宋体';    font-size: 11pt;    font-weight: bold; } --> </style>&quot;);
6            sw.WriteLine(&quot;</head>&quot;);
7            sw.WriteLine(&quot;<body>&quot;);
8
9            System.Data.OleDb.OleDbDataAdapter odda = new System.Data.OleDb.OleDbDataAdapter(&quot;SELECT 研究生.编号, 研究生.姓名, 研究生.学科专业, 研究生.导师, 研究生.论文题目 FROM 研究生 ORDER BY 研究生.编号&quot;, &quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot; + System.Windows.Forms.Application.StartupPath + @&quot;\database.mdb&quot;);
10
11            System.Data.DataSet dsStudent = new DataSet();
12
13            odda.Fill(dsStudent);
14
15            for (int i = 0; i < dsStudent.Tables[0].Rows.Count; i++)
16            {
17
18                sw.WriteLine(&quot;<div align='center' class='STYLE1'><u>  硕  </u>士学位论文答辩委员会成员审核表</div>&quot;);
19
20                sw.WriteLine(&quot;<table width='610' border='1' cellpadding='0' cellspacing='0' bordercolor='#000000' style='border-collapse:collapse;border:none;mso-border-alt:solid windowtext .5pt; mso-yfti-tbllook:480;mso-padding-alt:0cm 5.4pt 0cm 5.4pt;mso-border-insideh:.5pt solid windowtext;mso-border-insidev:.5pt solid windowtext'>&quot;);
21
22                sw.WriteLine(&quot;<tr><td width='68' align='center' valign='middle' class='STYLE2' height='50pt'>研究生<br />姓  名</td>&quot;);
23                sw.WriteLine(&quot;<td width='93' align='center' valign='middle' class='STYLE2' height='50pt'>&quot; + dsStudent.Tables[0].Rows[i][&quot;姓名&quot;].ToString() + &quot;</td>&quot;);
24                sw.WriteLine(&quot;<td width='68' align='center' valign='middle' class='STYLE2' height='50pt'>专  业</td>&quot;);
25                sw.WriteLine(&quot;<td colspan='3' align='center' valign='middle' class='STYLE2' height='50pt'>&quot; + dsStudent.Tables[0].Rows[i][&quot;学科专业&quot;].ToString() + &quot;</td></tr>&quot;);
26
27
28                sw.WriteLine(&quot;<tr><td align='center' valign='middle' class='STYLE2' height='50pt'>导  师<br />姓  名</td>&quot;);
29                sw.WriteLine(&quot;<td align='center' valign='middle' class='STYLE2' height='50pt'>&quot; + dsStudent.Tables[0].Rows[i][&quot;导师&quot;].ToString() + &quot;</td>&quot;);
30                sw.WriteLine(&quot;<td align='center' valign='middle' class='STYLE2' height='50pt'>论  文<br />题  目</td>&quot;);
31                sw.WriteLine(&quot;<td colspan='3' align='center' valign='middle' class='STYLE2' height='50pt'>&quot; + dsStudent.Tables[0].Rows[i][&quot;论文题目&quot;].ToString() + &quot;</td></tr>&quot;);
32
33                sw.WriteLine(&quot;<tr><td rowspan='8' align='center' valign='middle' class='STYLE2'>答<br /><br />辩<br /><br />委<br /><br />员<br /><br />会<br /><br />成<br /><br />员</td>&quot;);
34                sw.WriteLine(&quot;<td align='center' valign='middle' class='STYLE2' height='36'>姓  名</td>&quot;);
35                sw.WriteLine(&quot;<td align='center' valign='middle' class='STYLE2' height='36'>职  称</td>&quot;);
36                sw.WriteLine(&quot;<td width='204' align='center' valign='middle' class='STYLE2' height='36'>工  作  单  位</td>&quot;);
37                sw.WriteLine(&quot;<td width='100' align='center' valign='middle' class='STYLE2' height='36'>在委员会中<br />担任的职务</td>&quot;);
38                sw.WriteLine(&quot;<td width='63' align='center' valign='middle' class='STYLE2' height='36'>备  注</td></tr>&quot;);
39
40                System.Data.OleDb.OleDbDataAdapter oddaT = new System.Data.OleDb.OleDbDataAdapter(&quot;SELECT 答辩老师小组.顺序, 答辩老师.姓名, 答辩老师.职称, 答辩老师.单位, 答辩老师小组.答辩职务, 答辩老师.备注 FROM 答辩老师 INNER JOIN (答辩老师小组 INNER JOIN (答辩小组 INNER JOIN 研究生小组 ON 答辩小组.编号 = 研究生小组.小组) ON 答辩老师小组.小组编号 = 答辩小组.编号) ON 答辩老师.编号 = 答辩老师小组.答辩老师编号 WHERE (((研究生小组.研究生)=&quot; + dsStudent.Tables[0].Rows[i][&quot;编号&quot;].ToString() + &quot;)) ORDER BY 答辩老师小组.顺序&quot;, &quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot; + System.Windows.Forms.Application.StartupPath + @&quot;\database.mdb&quot;);
41
42                System.Data.DataSet dsTeacher = new DataSet();
43                oddaT.Fill(dsTeacher);
44
45                for (int j = 0; j < 7; j++)
46                {
47                    if (j < dsTeacher.Tables[0].Rows.Count)
48                    {
49                        sw.WriteLine(&quot;<tr><td align='center' valign='middle' class='STYLE2' height='36'>&quot; + dsTeacher.Tables[0].Rows[j][&quot;姓名&quot;].ToString() + &quot;</td>&quot;);
50                        sw.WriteLine(&quot;<td align='center' valign='middle' class='STYLE2' height='36'>&quot; + dsTeacher.Tables[0].Rows[j][&quot;职称&quot;].ToString() + &quot;</td>&quot;);
51                        sw.WriteLine(&quot;<td align='center' valign='middle' class='STYLE2' height='36'>&quot; + dsTeacher.Tables[0].Rows[j][&quot;单位&quot;].ToString() + &quot;</td>&quot;);
52                        sw.WriteLine(&quot;<td align='center' valign='middle' class='STYLE2' height='36'>&quot; + dsTeacher.Tables[0].Rows[j][&quot;答辩职务&quot;].ToString() + &quot;</td>&quot;);
53                        sw.WriteLine(&quot;<td align='center' valign='middle' class='STYLE2' height='36'>&quot; + dsTeacher.Tables[0].Rows[j][&quot;备注&quot;].ToString() + &quot;</td></tr>&quot;);
54                    }
55                    else
56                    {
57                        sw.WriteLine(&quot;<tr><td align='center' valign='middle' class='STYLE2' height='36'> </td>&quot;);
58                        sw.WriteLine(&quot;<td align='center' valign='middle' class='STYLE2' height='36'> </td>&quot;);
59                        sw.WriteLine(&quot;<td align='center' valign='middle' class='STYLE2' height='36'> </td>&quot;);
60                        sw.WriteLine(&quot;<td align='center' valign='middle' class='STYLE2' height='36'> </td>&quot;);
61                        sw.WriteLine(&quot;<td align='center' valign='middle' class='STYLE2' height='36'> </td></tr>&quot;);
62                    }
63                }
64                               
65                dsTeacher.Dispose();
66
67                sw.WriteLine(&quot;<tr><td align='center' valign='middle' class='STYLE2'>分学<br />科学<br />位评<br />定委<br />员会<br />意见</td>&quot;);
68                sw.WriteLine(&quot;<td colspan='5' class='STYLE2'><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p>&quot;);
69                sw.WriteLine(&quot;<p>        分委员会主席(签字)                    2006年06月10日</p></td></tr>&quot;);
70
71                sw.WriteLine(&quot;<tr><td align='center' valign='middle' class='STYLE2'>校学<br />位评<br />定委<br />员会<br />审批<br />意见</td>&quot;);
72                sw.WriteLine(&quot;<td colspan='5' class='STYLE2'><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p>&quot;);
73                sw.WriteLine(&quot;<p>                                                2006年06月10日</p></td></tr></table>&quot;);
74
75                sw.WriteLine(&quot;<br clear=all style='page-break-before:always'>&quot;);
76            }
77
78        dsStudent.Dispose();
79
80            sw.WriteLine(&quot;</body></html>&quot;);
81
82            sw.Close();
83
84            System.Diagnostics.Process.Start(strFilePath);


¶“EÝڗøFêbbs.51aspx.comGèâ€CŠ_
51aspx 最后编辑于 2007-12-03 15:11:34
 
技术问题请直接发布到论坛,合作及咨询请加技术支持QQ:793095132
问题搜索请点击
引用 回复
 

身份:学员

 
  • UID:207
  • 来自:广州
  • 精华:0
  • 积分:27
  • 帖子:27
  • 注册: 2007-06-18
  • 状态: 离线
  • 威望:0.00
  • 金钱:2.85 元

回复:使用HTML文件作为中转生成WORD文档(转)

收藏!用得着!!«<%S¨cs)Gbbs.51aspx.comlŠXŲã^öJ#
引用 回复
 
1  /  1  页    1  跳转
发表新主题 回复该主题

现在时间是:2009-01-08 01:48:17 京ICP备06046876号