使用HTML文件作为中转生成WORD文档
????《霍元甲》中的乞丐說,就在今天。是的,就在今天,盡管我的論文沒有遵循問題導(dǎo)向的研究思路,盡管我答辯時同幾個不懂技術(shù)的專家簡直是在雞同鴨講,答辯委員會還是一致通過,建議授予我管理學(xué)碩士學(xué)位。Anyway,終于自由了!
????言歸正傳,答辯前,我們的研究生秘書遇到麻煩了,呵呵,60多個研究生每個人都要打印一個下圖所示格式的審核表:
? ???要是一個學(xué)生一個學(xué)生的填寫,工作量還真是很大,而且以后每年都要這樣填寫,實在是太麻煩了。
???? 好了,這應(yīng)該是一個很簡單的問題,假設(shè)數(shù)據(jù)都準(zhǔn)備好了(事實上這部分也是一團糟,盡管比較簡單),我們可以考慮使用報表設(shè)計器做一個報表,但是其中報表的細(xì)節(jié)比較麻煩(比如答辯委員會的成員可能只有7個,而不是圖示的8個,一般的報表設(shè)計器不是很好處理)。再考慮直接用程序生成WORD文檔吧,嗯,WORD的對象模型可以參考,但生成這種格式還是比較麻煩的,我們可以考慮一種變通的方法——使用HTML文件作為中轉(zhuǎn):
???? 先使用Dreamweaver等HTML生成工具,生成上圖所示的表格,保存為一個html文件。用WORD打開這個html文件,看一下效果(使用“頁面”視圖),除了表格線好像太粗了,其它的CSS樣式應(yīng)用效果還是很好的。現(xiàn)在,我們就可以考慮像ASP時代開發(fā)的時候使用代碼循環(huán)為每一個學(xué)生那樣生成這個表格了。另外,還有一個需求需要滿足,就是每個學(xué)生的審核表應(yīng)該占一頁,也就是說每次循環(huán)都應(yīng)該插入一個分頁符。HTML文件中沒有分頁的概念,我們可以先在WORD中插入一個分頁符,然后將這個WORD文檔另存為HTML文件,然后查看其源文件,可以看到,分頁符是這樣的:
<br?clear=all?style='page-break-before:always'>????至于細(xì)線表格,當(dāng)然可以在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,下面的代碼就可以為所有學(xué)生一次生成審核表了:
?
?1????????????string?strFilePath?=?Application.StartupPath?+?@"\wordfile.doc";?2
?3????????????System.IO.StreamWriter?sw?=?new?System.IO.StreamWriter(strFilePath,?false,?System.Text.Encoding.GetEncoding("gb2312"));
?4????????????sw.WriteLine("<html><head><meta?http-equiv='Content-Type'?content='application/msword;?charset=gb2312'><title>學(xué)位論文答辯委員會成員審核表</title>");
?5????????????sw.WriteLine("<style?type='text/css'><!--.STYLE1?{????font-family:?'宋體';????font-size:?18pt;????font-weight:?bold;?}?.STYLE2?{????font-family:?'宋體';????font-size:?11pt;????font-weight:?bold;?}?-->?</style>");
?6????????????sw.WriteLine("</head>");
?7????????????sw.WriteLine("<body>");
?8
?9????????????System.Data.OleDb.OleDbDataAdapter?odda?=?new?System.Data.OleDb.OleDbDataAdapter("SELECT?研究生.編號,?研究生.姓名,?研究生.學(xué)科專業(yè),?研究生.導(dǎo)師,?研究生.論文題目?FROM?研究生?ORDER?BY?研究生.編號",?"Provider=Microsoft.Jet.OLEDB.4.0;Data?Source="?+?System.Windows.Forms.Application.StartupPath?+?@"\database.mdb");
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("<div?align='center'?class='STYLE1'><u> 碩 </u>士學(xué)位論文答辯委員會成員審核表</div>");
19
20????????????????sw.WriteLine("<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'>");
21
22????????????????sw.WriteLine("<tr><td?width='68'?align='center'?valign='middle'?class='STYLE2'?height='50pt'>研究生<br?/>姓 名</td>");
23????????????????sw.WriteLine("<td?width='93'?align='center'?valign='middle'?class='STYLE2'?height='50pt'>"?+?dsStudent.Tables[0].Rows[i]["姓名"].ToString()?+?"</td>");
24????????????????sw.WriteLine("<td?width='68'?align='center'?valign='middle'?class='STYLE2'?height='50pt'>專 業(yè)</td>");
25????????????????sw.WriteLine("<td?colspan='3'?align='center'?valign='middle'?class='STYLE2'?height='50pt'>"?+?dsStudent.Tables[0].Rows[i]["學(xué)科專業(yè)"].ToString()?+?"</td></tr>");
26
27
28????????????????sw.WriteLine("<tr><td?align='center'?valign='middle'?class='STYLE2'?height='50pt'>導(dǎo) 師<br?/>姓 名</td>");
29????????????????sw.WriteLine("<td?align='center'?valign='middle'?class='STYLE2'?height='50pt'>"?+?dsStudent.Tables[0].Rows[i]["導(dǎo)師"].ToString()?+?"</td>");
30????????????????sw.WriteLine("<td?align='center'?valign='middle'?class='STYLE2'?height='50pt'>論 文<br?/>題 目</td>");
31????????????????sw.WriteLine("<td?colspan='3'?align='center'?valign='middle'?class='STYLE2'?height='50pt'>"?+?dsStudent.Tables[0].Rows[i]["論文題目"].ToString()?+?"</td></tr>");
32
33????????????????sw.WriteLine("<tr><td?rowspan='8'?align='center'?valign='middle'?class='STYLE2'>答<br?/><br?/>辯<br?/><br?/>委<br?/><br?/>員<br?/><br?/>會<br?/><br?/>成<br?/><br?/>員</td>");
34????????????????sw.WriteLine("<td?align='center'?valign='middle'?class='STYLE2'?height='36'>姓 名</td>");
35????????????????sw.WriteLine("<td?align='center'?valign='middle'?class='STYLE2'?height='36'>職 稱</td>");
36????????????????sw.WriteLine("<td?width='204'?align='center'?valign='middle'?class='STYLE2'?height='36'>工 作 單 位</td>");
37????????????????sw.WriteLine("<td?width='100'?align='center'?valign='middle'?class='STYLE2'?height='36'>在委員會中<br?/>擔(dān)任的職務(wù)</td>");
38????????????????sw.WriteLine("<td?width='63'?align='center'?valign='middle'?class='STYLE2'?height='36'>備 注</td></tr>");
39
40????????????????System.Data.OleDb.OleDbDataAdapter?oddaT?=?new?System.Data.OleDb.OleDbDataAdapter("SELECT?答辯老師小組.順序,?答辯老師.姓名,?答辯老師.職稱,?答辯老師.單位,?答辯老師小組.答辯職務(wù),?答辯老師.備注?FROM?答辯老師?INNER?JOIN?(答辯老師小組?INNER?JOIN?(答辯小組?INNER?JOIN?研究生小組?ON?答辯小組.編號?=?研究生小組.小組)?ON?答辯老師小組.小組編號?=?答辯小組.編號)?ON?答辯老師.編號?=?答辯老師小組.答辯老師編號?WHERE?(((研究生小組.研究生)="?+?dsStudent.Tables[0].Rows[i]["編號"].ToString()?+?"))?ORDER?BY?答辯老師小組.順序",?"Provider=Microsoft.Jet.OLEDB.4.0;Data?Source="?+?System.Windows.Forms.Application.StartupPath?+?@"\database.mdb");
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("<tr><td?align='center'?valign='middle'?class='STYLE2'?height='36'>"?+?dsTeacher.Tables[0].Rows[j]["姓名"].ToString()?+?"</td>");
50????????????????????????sw.WriteLine("<td?align='center'?valign='middle'?class='STYLE2'?height='36'>"?+?dsTeacher.Tables[0].Rows[j]["職稱"].ToString()?+?"</td>");
51????????????????????????sw.WriteLine("<td?align='center'?valign='middle'?class='STYLE2'?height='36'>"?+?dsTeacher.Tables[0].Rows[j]["單位"].ToString()?+?"</td>");
52????????????????????????sw.WriteLine("<td?align='center'?valign='middle'?class='STYLE2'?height='36'>"?+?dsTeacher.Tables[0].Rows[j]["答辯職務(wù)"].ToString()?+?"</td>");
53????????????????????????sw.WriteLine("<td?align='center'?valign='middle'?class='STYLE2'?height='36'>"?+?dsTeacher.Tables[0].Rows[j]["備注"].ToString()?+?"</td></tr>");
54????????????????????}
55????????????????????else
56????????????????????{?
57????????????????????????sw.WriteLine("<tr><td?align='center'?valign='middle'?class='STYLE2'?height='36'> </td>");
58????????????????????????sw.WriteLine("<td?align='center'?valign='middle'?class='STYLE2'?height='36'> </td>");
59????????????????????????sw.WriteLine("<td?align='center'?valign='middle'?class='STYLE2'?height='36'> </td>");
60????????????????????????sw.WriteLine("<td?align='center'?valign='middle'?class='STYLE2'?height='36'> </td>");
61????????????????????????sw.WriteLine("<td?align='center'?valign='middle'?class='STYLE2'?height='36'> </td></tr>");
62????????????????????}
63????????????????}
64????????????????????????????????
65????????????????dsTeacher.Dispose();
66
67????????????????sw.WriteLine("<tr><td?align='center'?valign='middle'?class='STYLE2'>分學(xué)<br?/>科學(xué)<br?/>位評<br?/>定委<br?/>員會<br?/>意見</td>");
68????????????????sw.WriteLine("<td?colspan='5'?class='STYLE2'><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p>");
69????????????????sw.WriteLine("<p> 分委員會主席(簽字) 2006年06月10日</p></td></tr>");
70
71????????????????sw.WriteLine("<tr><td?align='center'?valign='middle'?class='STYLE2'>校學(xué)<br?/>位評<br?/>定委<br?/>員會<br?/>審批<br?/>意見</td>");
72????????????????sw.WriteLine("<td?colspan='5'?class='STYLE2'><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p>");
73????????????????sw.WriteLine("<p> 2006年06月10日</p></td></tr></table>");
74
75????????????????sw.WriteLine("<br?clear=all?style='page-break-before:always'>");
76????????????}
77
78????????dsStudent.Dispose();
79
80????????????sw.WriteLine("</body></html>");
81
82????????????sw.Close();
83
84????????????System.Diagnostics.Process.Start(strFilePath);
???
轉(zhuǎn)載于:https://www.cnblogs.com/waxdoll/archive/2006/06/11/423194.html
總結(jié)
以上是生活随笔為你收集整理的使用HTML文件作为中转生成WORD文档的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有趣的猜数字游戏
- 下一篇: Delphi的类与继承