随着即将发布
微软的下一个版本
®
Office(目前代号为“Office 12的”),将有微软的Word,PowerPoint新的默认文件格式
®
和Excel
®
。这些称为Microsoft Office Open XML格式的新格式将为Office开发人员打开一个全新的世界。默认情况下,Office文档将是开放和可访问的,因为它们将使用标准的ZIP和XML技术,并提供完整的文档,并且可以免费使用许可证。这些技术是对Microsoft Office 2003 Editions附带的现有XML格式的改进,但现在可以使用现有的Office 2003 XML参考模式来实现与文档数据配合使用的解决方案,并提供了一种理解用新的默认格式进行开发将需要什么。
Microsoft Excel中的SpreadsheetML格式非常易于使用,因为它专为人类可读和可编辑而设计。但是很多人可能没有机会看看Excel中的XML支持。一旦你掌握了它的工作方式,你就会意识到你有很多XML特性的用途,从数据库和网页之间的数据转换到在不同的应用程序之间共享文件。
为了让你开始,我将建立一个XML示例,说明它是如何工作的。随着您的继续,您可以在此示例中使用Office XP或Office 2003,因为它们都支持Excel版本中的SpreadsheetML。使用文本编辑器,我将创建一个
如图1所示
的非常简单的表格 ,概述了创建代表Excel工作表的XML文件的七个步骤。
图1表格示例
First Name | Last Name | Phone Number |
Nancy | Davolio | (206) 555-9857 |
Andrew | Fuller | (206) 555-9482 |
Janet | Leverling | (206) 555-3412 |
Margaret | Peacock | (206) 555-8122 |
Steven | Buchanan | (71) 555-4848 |
1.创建XML文件
首先,在记事本中创建一个新文件,并将其称为test.xml。然后按照这里列出的步骤。首先键入以下内容:
这声明该文件是遵循XML规范的1.0版本的XML文档。它应该始终位于所有XML文件的顶部。接下来添加文档的根元素。XML文件始终只有一个根元素,其中包含文档的其余部分。对于SpreadsheetML,根元素是<Workbook>。XML声明之后,添加该元素,使您的文件现在看起来像这样:
<?xml version="1.0"?>
<?xml version="1.0"?> <Workbook> </Workbook>
2.声明名字空间
现在您将声明这个名称空间并为根元素添加一个前缀。大多数XML文档都有一个与其关联的名称空间。声明XML文件的命名空间使得用户解析XML时能够更容易地知道他们正在处理的是什么类型的XML。即使在Office中,XML也有许多不同的用途。知道何时分析Word XML文件而不是Excel XML文件的一种方法是查看名称空间。对于Office XP,当产品组创建SpreadsheetML模式时,我们仍然以“urn:schemas-microsoft-com:office”的形式使用命名空间。展望未来,我们将使用URL命名空间,就像我们在Office 2003中使用WordML(例如//schemas.microsoft.com/office)一样。通过向电子表格添加名称空间声明,您的文件应该如下所示:
<?xml version="1.0"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"> </Workbook>
您将要为命名空间执行的最后一件事是使用前缀,而不是默认值。由于属性符合SpreadsheetML模式的限定,所以如果要使用任何属性,则需要执行此操作。我们使用“ss”(电子表格)作为前缀。您将在所有元素之前添加“ss:”,然后您将更新您的名称空间声明,以表明该名称空间适用于前面带有“ss:”的所有内容,而不仅仅应用于默认XML元素,如下所示:
<?xml version="1.0"?> <ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> </ss:Workbook>
请注意,名称空间声明表示xmlns:ss =而不仅仅是xmlns =。这意味着任何前面有“ss:”的东西都适用于电子表格命名空间。
3.添加一个工作表
接下来,您将添加一个工作表。由于您有一个空的工作簿,您需要在工作簿中声明电子表格网格。你可能知道,工作簿可以有多个工作表,但是在这里你只需要声明一个。另外,我们在工作表中声明一个表。表格是所有网格数据将要去的地方,文件现在看起来像这样:
<?xml version="1.0"?> <ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> <ss:Worksheet ss: Name="Sheet1"> <ss:Table> </ss:Table> </ss:Worksheet> </ss:Workbook>
4.添加标题行
您要生成的表中的第一行有三个列中的“名字”,“姓氏”和“电话号码”。我们添加一个<Row>标签以及三个<Cell>标签。单元格的实际内容包含在一个<Data>标签中,所以我们再添加一下。该文件现在看起来像
图2
。
图2 XML工作表采取形式
<?xml version="1.0"?> <ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> <ss:Worksheet ss:Name="Sheet1"> <ss:Table> <ss:Row> <ss:Cell> <ss:Data ss:Type="String">First Name</ss:Data> </ss:Cell> <ss:Cell> <ss:Data ss:Type="String">Last Name</ss:Data> </ss:Cell> <ss:Cell><ss:Data ss:Type="String">Phone Number</ss:Data> </ss:Cell> </ss:Row> </ss:Table> </ss:Worksheet> </ss:Workbook>
您现在有一个可以直接在Excel中打开的表格模板。它将
如图3所示
。不太令人兴奋,但这是一个开始。
图3
基本工作表
5.调整列宽
请注意,列的宽度对于内容来说太窄。让我们在文件中添加一些XML以指定您想要的列的宽度。结果代码
如图4
所示 。
图4调整列的大小
<?xml version="1.0"?> <ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> <ss:Worksheet ss:Name="Sheet1"> <ss:Table> <ss:Row> <ss:Cell> <ss:Data ss:Type="String">First Name</ss:Data> </ss:Cell> <ss:Cell> <ss:Data ss:Type="String">Last Name</ss:Data> </ss:Cell> <ss:Cell><ss:Data ss:Type="String">Phone Number</ss:Data> </ss:Cell> </ss:Row> </ss:Table> </ss:Worksheet> </ss:Workbook>
现在在Excel中再次打开该文件。请注意,列更宽,文本现在适合(
见图5
)。还有一个属性可以在列元素上设置,告诉它使用自动适应的宽度。这只适用于数字和日期。由于你的单元格是字符串,你需要明确地设置宽度。
图5
调整大小的单元格
6.添加剩余数据
现在添加这些额外的数据行。这应该很容易。只需选择第一个“行”元素并复制它。然后粘贴五次,所以你总共有六个行。现在通过并更新行的值。如果您熟悉可扩展样式表语言转换(Extensible Stylesheet Language Transform,XSLT),您将看到如何轻松生成可应用于DataSet的XSLT,以将其转换为SpreadsheetML。只需重复DataSet中每一行的行标记,并在每个单元格的数据标记中添加值。在应用完所有的数据之后,你的XML应该
如图6所示
,它已经被缩写为空格。
图7
显示了Excel中的完整表格。
图6包含所有数据的XML表
<?xml version="1.0"?> <ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> <ss:Worksheet ss:Name="Sheet1"> <ss:Table> <ss:Column ss:Width="80"/> <ss:Column ss:Width="80"/> <ss:Column ss:Width="80"/> <ss:Row> <ss:Cell> <ss:Data ss:Type="String">First Name</ss:Data> </ss:Cell> <ss:Cell> <ss:Data ss:Type="String">Last Name</ss:Data> </ss:Cell> <ss:Cell> <ss:Data ss:Type="String">Phone Number</ss:Data> </ss:Cell> </ss:Row> <ss:Row> <ss:Cell> <ss:Data ss:Type="String">Nancy</ss:Data> </ss:Cell> <ss:Cell> <ss:Data ss:Type="String">Davolio</ss:Data> </ss:Cell> <ss:Cell> <ss:Data ss:Type="String">(206)555 9857</ss:Data> </ss:Cell> </ss:Row> <ss:Row> ... </ss:Row> </ss:Table> </ss:Worksheet> </ss:Workbook>
图7
带有数据的工作表
7.添加标题格式
正如你所看到的,第一行看起来不像列标题,所以让我们用粗体文本格式化,以便它清楚地显示标题。所有你需要做的是生成一个粗体文本的样式,然后引用该样式与第一行。首先,在Worksheet标签前添加以下XML:
这将创建一个ID为“1”的样式,并将其应用于粗体。接下来,更新第一行元素以引用StyleID 1.行代码现在应该如下所示:
现在,您的XML应该
如图8所示
,
图9
显示了它在Excel中的外观。
<ss:Styles> <ss:Style ss:ID="1"> <ss:Font ss:Bold="1"/> </ss:Style> </ss:Styles>
<ss:Row ss:SyleID="1">
图8拼接标题行
<?xml version="1.0"?> <ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"> <ss:Styles> <ss:Style ss:ID="1"> <ss:Font ss:Bold="1"/> </ss:Style> </ss:Styles> <ss:Worksheet ss:Name="Sheet1"> <ss:Table> <ss:Column ss:Width="80"/> <ss:Column ss:Width="80"/> <ss:Column ss:Width="80"/> <ss:Row ss:StyleID="1"> <ss:Cell> <ss:Data ss:Type="String">First Name</ss:Data> </ss:Cell> <ss:Cell> <ss:Data ss:Type="String">Last Name</ss:Data> </ss:Cell> <ss:Cell> <ss:Data ss:Type="String">Phone Number</ss:Data> </ss:Cell> </ss:Row> <ss:Row> <ss:Cell> <ss:Data ss:Type="String">Nancy</ss:Data> </ss:Cell> <ss:Cell> <ss:Data ss:Type="String">Davolio</ss:Data> </ss:Cell> <ss:Cell> <ss:Data ss:Type="String">(206)555-9857</ss:Data> </ss:Cell> </ss:Row> ... </ss:Row> </ss:Table> </ss:Worksheet> </ss:Workbook>
图9
完成的工作表
包起来
这是一个非常简单的例子,但是如果你不熟悉Office XML(甚至是通用的XML),这是一个很好的介绍。未来版本的Excel的新XML格式看起来与我在SpreadsheetML中展示的不同,但也会有一些相似之处。熟悉现有的模式是很好的,我将开始在
blogs.msdn.com/brian_jones
上发布更多关于我的博客上的新模式 。
First Name | Last Name | Phone Number |
Nancy | Davolio | (206) 555-9857 |
Andrew | Fuller | (206) 555-9482 |
Janet | Leverling | (206) 555-3412 |
Margaret | Peacock | (206) 555-8122 |
Steven | Buchanan | (71) 555-4848 |