虽然使用Excel.Application对象来操作Excel文件是非常professional的,不过Excel对象创建起来实在太臃肿了,特别是对于B/S结构的应用来说,还需要服务器部署适当版本的Excel应用。而到头来,其是我们对Excel的文件的要求很多时候其实并不高,绝大多数就是导入表格数据而已。

    当然如果只是表格数据,我们甚至可以偷梁换柱,导出一个rename成*.xls的Html文件就行了。毕竟Excel支持非常丰富的文件格式,并能自动解析识别用MIME格式描述多内容Excel工作表。但是不得不说这样的"Excel文件"太简陋了,对于带有图片格式统计图表的导出,就非常的郁闷了,需要像制作网页那样弄出一堆相关的文件来。不过幸好Excel还支持MIME格式(请参看No.20452046等RFC)的文档,这样一来我们就可以使用MIME格式,并使用文本方式来生成包含多种内容的Excel文件了。

    现在,我们来生成一个包含一行数据和两张图片的MIME格式Excel文件。
   
    首先是MIME文件头:

用MIME格式描述多内容Excel工作表MIME-Version: 1.0
用MIME格式描述多内容Excel工作表X-Document-Type: Worksheet
用MIME格式描述多内容Excel工作表Content-Type: multipart/related; boundary="----=BOUNDARY_9527------"
用MIME格式描述多内容Excel工作表
用MIME格式描述多内容Excel工作表------=BOUNDARY_9527------
用MIME格式描述多内容Excel工作表Content-Location: file:///C:/A257C953/cnblogs.htm
用MIME格式描述多内容Excel工作表Content-Transfer-Encoding: quoted-printable
用MIME格式描述多内容Excel工作表Content-Type: text/html; charset="us-ascii"

    这个部分除了红色的内容,基本都是不需要改变的,具体意义可以参看RFC2045。关于Content-Location这个属性描述,是用来指示这个文档的路径的,也就解码MIME文档时,我们可以参考这个属性来生成文件名及保存路径。

    第二个部分是HTML导入的xml namespace:

用MIME格式描述多内容Excel工作表<html xmlns:o=3D"urn:schemas-microsoft-com:office:office"
用MIME格式描述多内容Excel工作表   
xmlns:x=3D"urn:schemas-microsoft-com:office:excel">

    注意这里的"=3D",它是MIME文件编码中的转换格式,其实3D就是"="。如果不导入这两个名称空间,在Excel 2003下,打开文件不现实默认的表格边框用MIME格式描述多内容Excel工作表,整个文件除了内容外,其余区域就是一个空白。

    第三个部分是存放在<head>中的xml格式文档描述信息:

用MIME格式描述多内容Excel工作表<head>
用MIME格式描述多内容Excel工作表
<xml>
用MIME格式描述多内容Excel工作表 
<o:DocumentProperties>
用MIME格式描述多内容Excel工作表  
<o:Author>zhilee</o:Author>
用MIME格式描述多内容Excel工作表  
<o:LastAuthor>zhilee</o:LastAuthor>
用MIME格式描述多内容Excel工作表  
<o:Created>2005-07-12T17:02:17Z</o:Created>
用MIME格式描述多内容Excel工作表  
<o:LastSaved>2005-07-10T17:06:05Z</o:LastSaved>
用MIME格式描述多内容Excel工作表  
<o:Company>u-soft</o:Company>
用MIME格式描述多内容Excel工作表  
<o:Version>11.5606</o:Version>
用MIME格式描述多内容Excel工作表 
</o:DocumentProperties>
用MIME格式描述多内容Excel工作表
</xml>
用MIME格式描述多内容Excel工作表
<xml>
用MIME格式描述多内容Excel工作表 
<x:ExcelWorkbook>
用MIME格式描述多内容Excel工作表  
<x:ExcelWorksheets>
用MIME格式描述多内容Excel工作表   
<x:ExcelWorksheet>
用MIME格式描述多内容Excel工作表    
<x:Name>cnblogs</x:Name>
用MIME格式描述多内容Excel工作表    
<x:WorksheetOptions>
用MIME格式描述多内容Excel工作表     
<x:ProtectContents>False</x:ProtectContents>
用MIME格式描述多内容Excel工作表     
<x:ProtectObjects>False</x:ProtectObjects>
用MIME格式描述多内容Excel工作表     
<x:ProtectScenarios>False</x:ProtectScenarios>
用MIME格式描述多内容Excel工作表    
</x:WorksheetOptions>
用MIME格式描述多内容Excel工作表   
</x:ExcelWorksheet>
用MIME格式描述多内容Excel工作表  
</x:ExcelWorksheets>
用MIME格式描述多内容Excel工作表  
<x:ProtectStructure>False</x:ProtectStructure>
用MIME格式描述多内容Excel工作表  
<x:ProtectWindows>False</x:ProtectWindows>
用MIME格式描述多内容Excel工作表 
</x:ExcelWorkbook>
用MIME格式描述多内容Excel工作表
</xml>
用MIME格式描述多内容Excel工作表
</head>

    第一节的xml片断是一个可选项,其实就是Excel文件的文件属性;第二个xml其实也是可选的,只是这里面的<x:Name>cnblogs</x:Name>属性是用来记录Sheet的名称的,如果没有这个xml片段的描述,打开这个文件后,Excel会自动把文件名默认作为这个Sheet的名称。

    第四部分就是文件的内容了,也就是一个HTML文本:

用MIME格式描述多内容Excel工作表<body>
用MIME格式描述多内容Excel工作表
<table>
用MIME格式描述多内容Excel工作表 
<tr>
用MIME格式描述多内容Excel工作表  
<td>cnblogs</td>
用MIME格式描述多内容Excel工作表  
<td>birdshome</td>
用MIME格式描述多内容Excel工作表  
<td>mime</td>
用MIME格式描述多内容Excel工作表  
<td>excel</td>
用MIME格式描述多内容Excel工作表 
</tr>
用MIME格式描述多内容Excel工作表 
</table>
用MIME格式描述多内容Excel工作表
</body>

    这样就是Excel中的一行,有4个Cell。其实只要我们编辑这个第四部分,就可以创建我们需要的Excel数据表格了,包括对表格边框以及内容的style修饰等。那么如果我们要在这个文档中放入图片等内容怎么办呢?

    由于MIME支持对多文档的编码和描述,所以我们同样可以轻松的使用MIME格式来支持多数据内容。假如我们要在上面的那行数据下面放两张图片,怎么弄呢?刚才说了这个部分就是HTML文档嘛,放入图片还不很容易。这样就行了:

用MIME格式描述多内容Excel工作表<table>
用MIME格式描述多内容Excel工作表 
<tr>
用MIME格式描述多内容Excel工作表  
<td>cnblogs</td>
用MIME格式描述多内容Excel工作表  
<td>birdshome</td>
用MIME格式描述多内容Excel工作表  
<td>mime</td>
用MIME格式描述多内容Excel工作表  
<td>excel</td>
用MIME格式描述多内容Excel工作表 
</tr>
用MIME格式描述多内容Excel工作表 
<tr height=3D"51">
用MIME格式描述多内容Excel工作表 
<td colspan=3D"4">
用MIME格式描述多内容Excel工作表  
<img width=3D"133" height=3D"51" src=3D"http://birdshome.cnblogs.com/admin/resources/blogyuanadmin.gif">
用MIME格式描述多内容Excel工作表  
</td>
用MIME格式描述多内容Excel工作表 
</tr>
用MIME格式描述多内容Excel工作表  
<tr height=3D"100">
用MIME格式描述多内容Excel工作表  
<td colspan=3D"4">
用MIME格式描述多内容Excel工作表   
<img width=3D"150" height=3D"100" src=3D"http://www.google.com/intl/en/images/logo.gif">
用MIME格式描述多内容Excel工作表 
</td>
用MIME格式描述多内容Excel工作表 
</tr>
用MIME格式描述多内容Excel工作表 
</table>

    这样倒是就行了,不过、不过。。。这个图片怎么是URL啊用MIME格式描述多内容Excel工作表?当然了,MIME的描述能力还是非常强大的,我们可以把这个图片都弄到一个文件中来嘛。使用MIME的分节描述:boundary="----=BOUNDARY_9527------",我们这样来描述图片。

用MIME格式描述多内容Excel工作表------=BOUNDARY_9527------
用MIME格式描述多内容Excel工作表Content-Location: file:///C:/A257C953/cnblogs/image002.jpg
用MIME格式描述多内容Excel工作表Content-Transfer-Encoding: base64
用MIME格式描述多内容Excel工作表Content-Type: image/jpeg
用MIME格式描述多内容Excel工作表
用MIME格式描述多内容Excel工作表/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAUAAA/+4ADkFkb2JlAGTAAAAAAf/b
用MIME格式描述多内容Excel工作表AIQAAgICAgICAgICAgMCAgIDBAMCAgMEBQQEBAQEBQYFBQUFBQUGBgcHCAcHBgkJC...

    还可以这样描述(只是其Identity不同):

用MIME格式描述多内容Excel工作表------=BOUNDARY_9527------
用MIME格式描述多内容Excel工作表Content-ID: image001
用MIME格式描述多内容Excel工作表Content-Transfer-Encoding: base64
用MIME格式描述多内容Excel工作表Content-Type: image/gif
用MIME格式描述多内容Excel工作表
用MIME格式描述多内容Excel工作表R0lGODlhhQAzAOYAADNmmebm5pmZmWZmZr29vVx8nP///6eqrczV332KljpolG6ClK+ztZGbpGOK
用MIME格式描述多内容Excel工作表sPDz977O3nyZtWNzg6azv0lwlnuOodfa3YypxXx8fOXs8pOgrK+8yMXFxVJ5n2N/nGt...

    注意,boundary是:"----=BOUNDARY_9527------",而文档中使用的是:"------=BOUNDARY_9527------",多出来的两个"--"是MIEM要求的。

    于是这是的文档内容就可以写为:

用MIME格式描述多内容Excel工作表<table>
用MIME格式描述多内容Excel工作表 
<tr>
用MIME格式描述多内容Excel工作表  
<td>cnblogs</td>
用MIME格式描述多内容Excel工作表  
<td>birdshome</td>
用MIME格式描述多内容Excel工作表  
<td>mime</td>
用MIME格式描述多内容Excel工作表  
<td>excel</td>
用MIME格式描述多内容Excel工作表 
</tr>
用MIME格式描述多内容Excel工作表 
<tr height=3D"51">
用MIME格式描述多内容Excel工作表 
<td colspan=3D"4">
用MIME格式描述多内容Excel工作表  
<img width=3D"133" height=3D"51" src=3D"cid:image001">
用MIME格式描述多内容Excel工作表  
</td>
用MIME格式描述多内容Excel工作表 
</tr>
用MIME格式描述多内容Excel工作表  
<tr height=3D"100">
用MIME格式描述多内容Excel工作表  
<td colspan=3D"4">
用MIME格式描述多内容Excel工作表   
<img width=3D"150" height=3D"100" src=3D"cnblogs/image002.jpg">
用MIME格式描述多内容Excel工作表 
</td>
用MIME格式描述多内容Excel工作表 
</tr>
用MIME格式描述多内容Excel工作表 
</table>
   如果使用Content-Location描述,使用相对路径"cnblogs/image002.jpg"

    本文MIME Execl文件示例下载:mime_excel.rar。显示效果如下图:
    用MIME格式描述多内容Excel工作表

相关文章: