我们在开发网站时,有很大一部分人采用的是MVC模式,而V是代表视图,关于视图开发的语言,都有语法简单,开发迅速的特点,比如说velocity,jstl等等,而通常用这种语言写成的文件我们通常称其为模板。模板,从名字上可以得出,这是一种通用具有参照性的样板,所有的东西都是按照它的比例剪栽而成的。
在采用MVC方式开发html页时,因为html是普通文本表示的,我们就会用如下形式表html
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
2 < html xmlns ="http://www.w3.org/1999/xhtml" xml:lang ="zh-CN" lang ="zh-CN" >
3 < head >
4 < title > #if($title) $title - #end xxx网 </ title >
5 < meta http-equiv ="Content-Type" content ="text/html; charset=utf-8" />
6 < meta http-equiv ="Content-Language" content ="cn" />
7 < meta content ="all" name ="robots" />
8 < meta name ="author" content ="mailto:netcorner@live.com%22/>
9 <meta name=" copyright" content ="http://www.xxx.com%22/>
10 <meta name=" description" content ="$!title" />
11 < meta name ="keywords" content ="$!title" />
12 < link rel ="icon" href ="$applicationPath/favicon.ico" type ="image/x-icon" />
13 < script src ="$applicationPath/script/jquery1.3.2.js" type ="text/javascript" ></ script >
14 </ head >
15 < body >
16 #body()
17 </ body >
18 </ html >
通过上面的形式,我们程序就可以把以“${var}”形式的替换成我们想要的数据,而且处理起来很方便,页面和逻辑进行区分,但是对于我们的office文件(如excel,word的文件)应该怎么处理呢?因为他们不是文本的,所以通常情况下想要以excel或word文件模板像html一样做模板处理就相当困难了!那么有什么办法处理这种情况呢?
在开发过程中,我们会遇到很多情况是这样的:要导出数据,导出成excel、PDF、word形式的,有的如果想打印,也可以直接导出这几种形式,以方便用户打印。这几种情况在开发中是经常存的,对于开发OA时,这种情况遇到的就更多一些了。
那么有没有把像excel、word文档当成模板处理的呢?
其实有很多方式可以实现这种情况的,我知道的大致有这几种情况。
1.通过操作office类库,在程序中进行操作
这种情况,得调用office类库,而且还得写不少代码。
2.用openxml代替office的二进制代码
感觉很复杂,也不知道openxml文件是否支持office早期版本。
3.用office文件另存为xml形式来表示
例:
我建立doc文件,在文档里面输入“aaaaaaaaaaaaaaaaa”,并别存为“XML文档(*.xml)”,当你直接打开这个xml文件是就是直接打开word文档了,而文档里面就是我输入的数据。用记事本打开刚才保存的xml文件,发现里面就是一个文本格式的。代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
<? mso-application progid="Word.Document" ?>
< w:wordDocument xmlns:w ="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v ="urn:schemas-microsoft-com:vml" xmlns:w10 ="urn:schemas-microsoft-com:office:word" xmlns:sl ="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml ="http://schemas.microsoft.com/aml/2001/core" xmlns:wx ="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o ="urn:schemas-microsoft-com:office:office" xmlns:dt ="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" w:macrosPresent ="no" w:embeddedObjPresent ="no" w:ocxPresent ="no" xml:space ="preserve" >< o:DocumentProperties >< o:Title > aaaaaaaaaaaaaaaaa </ o:Title >< o:Author > netcorner </ o:Author >< o:LastAuthor > netcorner </ o:LastAuthor >< o:Revision > 2 </ o:Revision >< o:TotalTime > 0 </ o:TotalTime >< o:Created > 2010-03-10T05:18:00Z </ o:Created >< o:LastSaved > 2010-03-10T05:18:00Z </ o:LastSaved >< o:Pages > 1 </ o:Pages >< o:Words > 2 </ o:Words >< o:Characters > 16 </ o:Characters >< o:Lines > 1 </ o:Lines >< o:Paragraphs > 1 </ o:Paragraphs >< o:CharactersWithSpaces > 17 </ o:CharactersWithSpaces >< o:Version > 11.6359 </ o:Version ></ o:DocumentProperties >< w:fonts >< w:defaultFonts w:ascii ="Times New Roman" w:fareast ="宋体" w:h-ansi ="Times New Roman" w:cs ="Times New Roman" />< w:font w:name ="宋体" >< w:altName w:val ="SimSun" />< w:panose-1 w:val ="02010600030101010101" />< w:charset w:val ="86" />< w:family w:val ="Auto" />< w:pitch w:val ="variable" />< w:sig w:usb-0 ="00000003" w:usb-1 ="288F0000" w:usb-2 ="00000016" w:usb-3 ="00000000" w:csb-0 ="00040001" w:csb-1 ="00000000" /></ w:font >< w:font w:name ="@宋体" >< w:panose-1 w:val ="02010600030101010101" />< w:charset w:val ="86" />< w:family w:val ="Auto" />< w:pitch w:val ="variable" />< w:sig w:usb-0 ="00000003" w:usb-1 ="288F0000" w:usb-2 ="00000016" w:usb-3 ="00000000" w:csb-0 ="00040001" w:csb-1 ="00000000" /></ w:font ></ w:fonts >< w:styles >< w:versionOfBuiltInStylenames w:val ="4" />< w:latentStyles w:defLockedState ="off" w:latentStyleCount ="156" />< w:style w:type ="paragraph" w:default ="on" w:styleId ="a" >< w:name w:val ="Normal" />< wx:uiName wx:val ="正文" />< w:pPr >< w:widowControl w:val ="off" />< w:jc w:val ="both" /></ w:pPr >< w:rPr >< wx:font wx:val ="Times New Roman" />< w:kern w:val ="2" />< w:sz w:val ="21" />< w:sz-cs w:val ="24" />< w:lang w:val ="EN-US" w:fareast ="ZH-CN" w:bidi ="AR-SA" /></ w:rPr ></ w:style >< w:style w:type ="character" w:default ="on" w:styleId ="a0" >< w:name w:val ="Default Paragraph Font" />< wx:uiName wx:val ="默认段落字体" />< w:semiHidden /></ w:style >< w:style w:type ="table" w:default ="on" w:styleId ="a1" >< w:name w:val ="Normal Table" />< wx:uiName wx:val ="普通表格" />< w:semiHidden />< w:rPr >< wx:font wx:val ="Times New Roman" /></ w:rPr >< w:tblPr >< w:tblInd w:w ="0" w:type ="dxa" />< w:tblCellMar >< w:top w:w ="0" w:type ="dxa" />< w:left w:w ="108" w:type ="dxa" />< w:bottom w:w ="0" w:type ="dxa" />< w:right w:w ="108" w:type ="dxa" /></ w:tblCellMar ></ w:tblPr ></ w:style >< w:style w:type ="list" w:default ="on" w:styleId ="a2" >< w:name w:val ="No List" />< wx:uiName wx:val ="无列表" />< w:semiHidden /></ w:style ></ w:styles >< w:docPr >< w:view w:val ="print" />< w:zoom w:percent ="200" />< w:bordersDontSurroundHeader />< w:bordersDontSurroundFooter />< w:proofState w:spelling ="clean" w:grammar ="clean" />< w:attachedTemplate w:val ="" />< w:defaultTabStop w:val ="420" />< w:drawingGridVerticalSpacing w:val ="156" />< w:displayHorizontalDrawingGridEvery w:val ="0" />< w:displayVerticalDrawingGridEvery w:val ="2" />< w:punctuationKerning />< w:characterSpacingControl w:val ="CompressPunctuation" />< w:optimizeForBrowser />< w:validateAgainstSchema />< w:saveInvalidXML w:val ="off" />< w:ignoreMixedContent w:val ="off" />< w:alwaysShowPlaceholderText w:val ="off" />< w:compat >< w:spaceForUL />< w:balanceSingleByteDoubleByteWidth />< w:doNotLeaveBackslashAlone />< w:ulTrailSpace />< w:doNotExpandShiftReturn />< w:adjustLineHeightInTable />< w:breakWrappedTables />< w:snapToGridInCell />< w:wrapTextWithPunct />< w:useAsianBreakRules />< w:dontGrowAutofit />< w:useFELayout /></ w:compat ></ w:docPr >< w:body >< wx:sect >< w:p >< w:pPr >< w:rPr >< w:rFonts w:hint ="fareast" /></ w:rPr ></ w:pPr >< w:r >< w:rPr >< w:rFonts w:hint ="fareast" /></ w:rPr >< w:t > aaaaaaaaaaaaaaaaa </ w:t ></ w:r ></ w:p >< w:sectPr >< w:pgSz w:w ="11906" w:h ="16838" />< w:pgMar w:top ="1440" w:right ="1800" w:bottom ="1440" w:left ="1800" w:header ="851" w:footer ="992" w:gutter ="0" />< w:cols w:space ="425" />< w:docGrid w:type ="lines" w:line-pitch ="312" /></ w:sectPr ></ wx:sect ></ w:body ></ w:wordDocument >
而刚才输入的文字"aaaaaaaaaaaaaaaaa",就在其中。如果你需用用变量,那么就可以用变量替换了。
那么程序应该如何处理该文档呢?
其实处理方式和MVC中处理html一样的,只是把这个office的xml文档当作html模板处理并,在程序端另存为文档时也得处理一下,如下列代码:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
2 HttpContext.Current.Response.Charset = " UTF-8 " ;
3 HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
4 HttpContext.Current.Response.ContentType = " text/xml " ;
5 HttpContext.Current.Response.Write(TemplateProcess.Output(MyContext, " /layout/include/ " + this .MethodName)); // 模板处理的office模板文本代码
6 HttpContext.Current.Response.End();
通过上面形式,就可以把office文件当作文本模板导出office可以正常显示读取的word或excel文件了。