zoukankan      html  css  js  c++  java
  • 用XML操作Excel文件

    用XML操作Excle文件

    在项目中有时候需要将数据输出到Excle,办法很多,比如说用ADO,但是这些都不能满足性能上的要求,如果你将10W条数据用ADO方式写入数据库,速度是很慢的。而且还不能对生成的Excle设置格式。

    一个偶然的机会,我发现将Excle档保存为XML(表格),然后用记事本打开就会发现,整个文件就是一个XML数据.对这个文件进行操作还能得到复杂的效果,比如:合并单元格,字体,颜色,甚至是为单元格设置公式。

    比如这样的:

    效果图


    一些值得注意的地方:
    一 .文件头部有以下信息:
    <?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"> <Author>xRoy</Author> <LastAuthor>xRoy</LastAuthor> <Created>2009-02-25T03:21:56Z</Created> <Company>SunnySec</Company> <Version>11.9999</Version> </DocumentProperties>
    其中,一下几个部分可以修改,其意思很简单,懂点E文就知道了.
    <Author>xRoy</Author> <LastAuthor>xRoy</LastAuthor> <Created>2009-02-25T03:21:56Z</Created> <Company>SunnySec</Company> <Version>11.9999</Version>
    二 .接下来你将看到<Styles>部分,大概就像这样:
    <Styles> <Style ss:ID="Default" ss:Name="Normal"> <Alignment ss:Vertical="Center"/> <Borders/> <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/> <Interior/> <NumberFormat/> <Protection/> </Style> <Style ss:ID="s21"> <Alignment ss:Vertical="Center"/> <Borders> <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/> <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/> <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/> <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/> </Borders> <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/> <Interior ss:Color="#800080" ss:Pattern="Solid"/> <NumberFormat/> <Protection/> </Style> <Styles/>
      <Styles>部分定义了一个样式的集合,每一种样式都在<Style></Style>中描述,我的理解是,每一个样式都是代表了一个单元格的形态,注意是一个,能不能在一个单元格上组合多个此处定义的样式,还没测试.在<Style>中:
      ss:ID        定义该样式的名称,要使用一个样式的时候需要用到.
      <Borders><Borders/> 这个东西就说明当前单元格的四个边的样式(有没有线条?线条多粗..)
      Font        定义单元格上文字的样式
      Interior: 指的是底色,ss:Color用于描述颜色,ss:Pattern 描述如何绘制
    三 .数据部分
    在这部分,你会看见类似这样的内容:
    <Worksheet ss:Name="Sheet1"> <Table ss:ExpandedColumnCount="9" ss:ExpandedRowCount="6" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25"> <Column ss:AutoFitWidth="0" ss:Width="50.25"/> <Column ss:AutoFitWidth="0" ss:Width="92.25"/> <Column ss:AutoFitWidth="0" ss:Width="102.75"/> <Column ss:AutoFitWidth="0" ss:Width="80.25"/> <Column ss:AutoFitWidth="0" ss:Width="83.25"/> <Column ss:AutoFitWidth="0" ss:Width="59.25"/> <Column ss:AutoFitWidth="0" ss:Width="58.5"/> <Column ss:AutoFitWidth="0" ss:Width="133.5"/> <Column ss:AutoFitWidth="0" ss:Width="198.75"/>
    说明:   
    <Worksheet ss:Name="Sheet1">   
    这里说明有一个叫做Sheet1的表单
    <Table ss:ExpandedColumnCount="9" ss:ExpandedRowCount="6" x:FullColumns="1"
       x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
    对于这个表单的总体数据描述:
    ss:ExpandedColumnCount="9"   数据表格有9列  
    ss:ExpandedRowCount="6"      数据表格有6行
    后面的就是设置一些默认属性,如果你在后面具体的表格上没有指定样式,就会用到这些.
    <Column ss:AutoFitWidth="0" ss:Width="50.25"/>
    依次定义ss:ExpandedColumnCount个列的宽和高
    接下来就是数据部分了,完整的一行大概是这样的:
    <Row ss:AutoFitHeight="0"> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">交易类型</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">产品名称</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">收方单位</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">产品开始序号</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">产品结束序号</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">数量</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">操作员</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">时间</Data></Cell> <Cell ss:StyleID="s22"><Data ss:Type="String" x:Ticked="1">备注</Data></Cell> </Row>
    <Row ></Row>部分描述的这一行的默认属性,它也可以指定样式,比如<Row ss:AutoFitHeight="0" ss:StyleID="s22">,这样的话,在这一行上面,任何没有特殊指定样式的表格都是这个默认样式.
    <Cell><Cell/>部分描述具体一个表格的样式,必须使用前面你已经定义好的<Style>.
    四 .数据尾部
    就是这个样子:
    <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> <Unsynced/> <Selected/> <Panes> <Pane> <Number>3</Number> <ActiveRow>6</ActiveRow> </Pane> </Panes> <ProtectObjects>False</ProtectObjects> <ProtectScenarios>False</ProtectScenarios> </WorksheetOptions> </Worksheet>
    这些一般用处不大,没有仔细研究.

    其他:在程序中可以用TinyXML来操作XML,另外还有编码问题要考虑,文件保存为*.xml,你发现即使安装的Excle,这个问默认的打开方式可能也不是Excle,有个技巧,将你文件的头部插入2 个字节,内容为[0xFF,0xFE].

  • 相关阅读:
    .NET中26个优化性能方法
    通过纯真IP地址实现根据用户地址显示信息
    jQuery中json中关于带有html代码网页的处理
    gb2312提交的url编码转换成utf8的查询
    c# Bitmap byte[] Stream 文件相互转换
    WebClient 上传文件
    进程监控模块配置与使用 ------ACE(开源项目)
    boost配置
    C++学习总结3
    SAE云平台的使用
  • 原文地址:https://www.cnblogs.com/chenqingwei/p/1588795.html
Copyright © 2011-2022 走看看