现在的位置: 首页 > 综合 > 正文

一种用程序控制EXCEL文档执行的方法

2012年12月18日 ⁄ 综合 ⁄ 共 2101字 ⁄ 字号 评论关闭

 
程序代码
介绍:
我需要做一个简单的针对所选对象的数据报告。我最初的想法是生成一个简单的.txt文件并用notepad进行浏览,这看起来太单调了,我的一些用户想分析一下数据(例如,平均,统计和导出)。当然,一个自然的实现方法是用Microsoft Excel。
我搜索了一些关于Microsoft Excel界面程序的例子。没费太大的尽,实际上,我希望自己设计程序。
我知道某人可以用多种格式保存EXCEL分页,所以打开EXCEL,建立想要的分页,包含格式和多种数据类型并保存成一个XML文件。然后打开我自己的编辑器来重新编辑。
你可能已经知道,该项目可能有人谈论过。我曾经写过类似的文章。绝大部分或多或少的涉及EXCEL的界面(添加标准的VS项目手册,和EXCEL事例)。而这里介绍的方法有两个优点:
低技术含量,并且这种方法不需要安装Microsoft office,对于C#程序可以直接执行XML。在有些情况下这是个显著的优点。有一个读者想我指出这一点让我很欣慰。
最后一点,所有我们要做的只是执行XML。C#不是唯一可以做这个的,VB和其它的语言也能作到。

背景:
一些MS office的产品允许你保存相关文档为XML文件,而不是二进制格式(.doc,.xls)。Office 2003执行的XML虽然复杂但是是可读的。保存一个EXCEL文件为.xml,在FILE ,SAVE AS 下改变输出格式为"XML Spreadsheet"。
Microsoft Office识别一个特殊的XML文件里的"XML Spreadsheet":
<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>

第一行显示普通的xml版本信息,第二行负责让Office去打开EXCEL处理XML
XML自身是分成若干部分:
Workbook:XML的根节点,其它块的父节点。
DocumentProperties:最重要的部分--设置参数。
Styles:不同列和行以及指定工作表单元的格式信息定义。
Worksheet(s):大部分的工作表在这里定义。
工作表由两大部分组成:
Table:这是分页存储所有数据的场所。
WorksheetOptions:工作表自身的全局选项。
最后,表块定义成两部分:


列/单元
这些信息,一个可以用来建立导如入到Microsoft Excel中的XML文件,然后由用户查阅,计划操作。
使用代码:
该项目代码做了以下工作:
建立一系列数据对象用来在分页中显示。这个事例数据是模仿一个简单的价格表。
生成相应的XML并可以在EXCEL中打开。
打开EXCEL。
事例包含了一个简单的菜单并带一个连接标签。点连接,调用一个ExcelReport对象。
ExcelReport对象的构造器调用一个SampleData对象。
简单的菜单对象在ExcelReport中引用GenerateSelf()方法,其中保存EXCEL XML为一个文件名为c:/temp/prices.xml的文件

一但被执行,菜单程序启动EXCEL
几点感性趣的问题:
这里的技术已经成功的运用于操作复杂的EXCEL文件,包括多页面包含图表的文件。
虽然这样可以,Microsoft Word也能保存文件为一个XML格式,相同的技术可以被用来建立各种Microsoft Word格式的Word XML文件。
EXCEL在文件建立上确实表现出明显问题。幸运的是,问题很容易解决。也很直接,在处理文件是,你可以注意一下表块,向这样一行:<Cell><Data ss:Type="Number">25</Data></Cell>
虽然这没有必要,但我将XML区分节点到他们所有的行中。并发现这样很容易在文本编辑器中浏览。所以就这么做了:
<Cell>
  <Data ss:Type="Number">25</Data>
</Cell>

考虑再多一些,XML必须是合法的文件。Excel 2003在打开XML文件时有时会显示一个对话框 "Problems During Load",抱错内容有时会更详细一点,"Problems came up in the following areas during load:"并列出"Table"区。
它缓和的通知你在很长的路径下有错:
"This file cannot be opened because of errors. Errors are listed in: C:/Documents and Settings/pagalvin.DFKBZ221/Local Settings/Temporary Internet Files/Content.MSO/D74388D6.log"
可惜,在WIN2000下,你不能copy/paste该文件名,所以找到文件有些困难。更糟的是,你发现这并没有什么帮助:
XML PARSE ERROR: Extraneous end-tag
Error occurs at or below this element stack:
<ss:Workbook>
  <ss:Worksheet>
    <ss:Table>
      <ss:Row>
        <ss:cell>

抱歉!评论已关闭.