在处理数据转换任务时,经常需要将Excel表格数据导出为XML格式。本文将介绍如何在Visual Studio中使用C#开发一个Excel插件,实现这一功能。
这个插件非常简单,它能够将Excel工作表中的数据导出为XML格式。例如,如果Excel工作表包含如下数据:
国家 | 首都 | 大陆
法国 | 巴黎 | 欧洲
德国 | 柏林 | 欧洲
印度 | 新德里 | 亚洲
印度尼西亚 | 雅加达 | 亚洲
使用该插件后,上述数据可以被导出为如下XML格式:
<sheet1>
<row>
<country>France</country>
<capital>Paris</capital>
<continent>Europe</continent>
</row>
<row>
<country>Germany</country>
<capital>Berlin</capital>
<continent>Europe</continent>
</row>
<row>
<country>India</country>
<capital>New Delhi</capital>
<continent>Asia</continent>
</row>
<row>
<country>Indonesia</country>
<capital>Jakarta</capital>
<continent>Asia</continent>
</row>
</sheet1>
一旦插件安装完成,Excel的“插件”选项卡中将出现一个“生成XML”按钮。点击该按钮后,会弹出保存文件对话框,允许保存生成的XML文件。
ExcelExportXml插件适用于Excel中包含表格数据,且第一行包含列标题的情况。它基于以下假设工作:
第一行被视为列标题,并将被转换为XML标签。
遇到第一行中的第一个空单元格后,右侧的所有列将被忽略。
仅支持到'Z'列,即最多26列。
遇到第一行所有值都为空时,视为工作表的结束。
工作表名称和列名称中不应包含任何空格。
Excel提供了多种导出XML数据的方法。其中之一是“另存为”对话框中的“另存为XML数据”。这需要定义XML映射,认为需要安装Microsoft的开发者插件。
另一个选项是“另存为XML Spreadsheet 2003”,它生成的XML如下:
<Worksheet ss:Name="Sheet1">
<Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="5" x:FullColumns="1" x:FullRows="1" ss:DefaultRowHeight="15">
<Column ss:Width="51" />
<Column ss:Width="54" />
<Column ss:Width="51.75" />
<Row ss:StyleID="s64">
<Cell>
<Data ss:Type="String">Country</Data>
</Cell>
<Cell>
<Data ss:Type="String">Capital</Data>
</Cell>
<Cell>
<Data ss:Type="String">Continent</Data>
</Cell>
</Row>
<Row>
<Cell>
<Data ss:Type="String">France</Data>
</Cell>
<Cell>
<Data ss:Type="String">Paris</Data>
</Cell>
<Cell>
<Data ss:Type="String">Europe</Data>
</Cell>
</Row>
<Row>
<Cell>
<Data ss:Type="String">Germany</Data>
</Cell>
<Cell>
<Data ss:Type="String">Berlin</Data>
</Cell>
<Cell>
<Data ss:Type="String">Europe</Data>
</Cell>
</Row>
<Row>
<Cell>
<Data ss:Type="String">India</Data>
</Cell>
<Cell>
<Data ss:Type="String">New Delhi</Data>
</Cell>
<Cell>
<Data ss:Type="String">Asia</Data>
</Cell>
</Row>
<Row>
<Cell>
<Data ss:Type="String">Indonesia</Data>
</Cell>
<Cell>
<Data ss:Type="String">Jakarta</Data>
</Cell>
<Cell>
<Data ss:Type="String">Asia</Data>
</Cell>
</Row>
</Table>
</Worksheet>
如所见,上述XML可能并不是想要的。它更像是Excel工作表的表示,而不是数据的语义。
ExcelExportXML插件功能有限,但在常见场景中非常有效,即当拥有包含列标题的表格数据时。
使用Visual Studio2010 Professional,创建Excel插件非常简单。以下是为ExcelExportXml插件遵循的步骤:
步骤 #1:创建一个类型为'Excel 2010 Add-in'的新项目。该项目将包含一个名为ThisAddin.cs的类文件。
步骤 #2:要创建Excel功能区上的按钮,右键单击项目,然后选择“添加”->“新建项”。
步骤 #3:从新项目列表中选择'Ribbon (XML)',将功能区类命名为Ribbon1。这将向项目中添加两个文件,分别是Ribbon1.cs和Ribbon1.xml。
步骤 #4:在ThisAddin类中添加以下代码:
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new Ribbon1();
}
步骤 #5:在Ribbon1.xml中定义将在Excel功能区上显示的按钮的属性。onAction属性指定了点击按钮时将从Ribbon1.cs调用的方法(onAction="OnTextButton")。
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load">
<ribbon>
<tabs>
<tab idMso="TabAddIns">
<group id="MyGroup" label="Export XML">
<button id="textButton" label="Generate XML" screentip="Export to XML" onAction="OnTextButton" supertip="Export excel sheet to XML file." />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
步骤 #6:在Ribbon1.cs中添加以下方法声明,并在这里实现功能。
public void OnTextButton(Office.IRibbonControl control)
{
// TODO: Add your implementation here
}