标 题: 对于EXCEL2003的XML格式文件的解析
作 者: Sdoat
时 间: 2010-09-20,16:41:00
链 接: http://blog.csdn.net/sdoat/archive/2010/09/20/5897404.aspx
首发CSDN,欢迎转载,转载请注明来源,谢谢!
工作中,很多时候用到Excel处理分析数据,而更深层次的数据挖掘,可能需要编写专门的程序进行处理,这时候有一个问题,就是如何从EXCEL中读取数据。
从EXCEL中读取数据,有多种方法,本文仅仅探讨文本读取的方式。EXCEL支持多种存储方式,从XLS到TXT到XML到....,本文仅仅探讨从EXCEL2003中的XML格式中读取指定数据。
本文环境:XP SP2 + VC6.0 + MS Office2003
本文工具:EXCEL2003 + VC6.0 + UE15.0
首先,分析一下XML的文件格式。
使用UE打开XML文件,可以看到,文件开头是XML文件头信息。
其中<Workbook>是EXCEL文件的内容;
<DocumentProperties>、<OfficeDocumentSettings>、<ExcelWorkbook>是文档的属性,本文重点是读取内容,故这些信息统统忽略;
<Styles>是EXCEL中段落、文字所有的属性,<Style>中是每一种不同的属性,所有的这些属性都有自己的id,此处也不是重点,也忽略;
<Worksheet>是工作表的信息,EXCEL文件中有几个工作表,此处就会有几个<Worksheet>的信息,所有的数据都存放在这些<Worksheet>中,我们的解析也主要以<Worksheet>为主。
<Worksheet ss:Name="工作表名">,此处可以获得工作表名,EXCEL中工作表必须有名字,故此处必定不为空。
接来下是一个<Table>,在<Table>中可以读取到此工作表最大的行数和列数,其存储形式为
<Table ss:ExpandedColumnCount="5" ss:ExpandedRowCount="63" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
这表明,此张工作表,最大列数为5,最大行数为63,其它为大小控制信息,忽略;
接下来有一系列的<Row>,这个工作表,总共有63个,而每个<Row>里面最多有5个<Cell>。
<Row>中存放的是一行的数据,而<Cell>中存放的是行中每一个有有效数据的格子的数据。
我们解析的时候,先根据<Row>读取每一行数据,然后再根据<Cell>解析出每一个格子的数据。
而<Row>中第一个<Cell>中可能存在下面数据 ss:Index="5",这个代表这一行中第一个有有效数据的格子是第5个格子,也就是说这一行的前四个数据都是空,我们还会看到 ss:StyleID="m153114702" ,这是代表这个单元格的属性,如果想知道这个属性是什么,请在UE中搜索m153114702,然后去看文件最前面的那个搜索结果,里面有定义,不过,此文忽略,
然后通常情况下,我们会看到一个<Data>,这里面就存储着我们需要的数据&#x