我们在开发网站时,有很大一部分人采用的是MVC模式,而V是代表视图,关于视图开发的语言,都有语法简单,开发迅速的特点,比如说velocity,jstl等等,而通常用这种语言写成的文件我们通常称其为模板。模板,从名字上可以得出,这是一种通用具有参照性的样板,所有的东西都是按照它的比例剪栽而成的。
在采用MVC方式开发html页时,因为html是普通文本表示的,我们就会用如下形式表html
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文件,发现里面就是一个文本格式的。代码如下:
<?mso-application prog>>
而刚才输入的文字"aaaaaaaaaaaaaaaaa",就在其中。如果你需用用变量,那么就可以用变量替换了。
那么程序应该如何处理该文档呢?
其实处理方式和MVC中处理html一样的,只是把这个office的xml文档当作html模板处理并,在程序端另存为文档时也得处理一下,如下列代码:
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文件了。