2010-04-07 63 views
3

我有很多报告是针对我的数据库运行的,最终需要以Excel电子表格的形式发布到最终用户。XML文件作为Excel文件

最初,我在创建文本报告,但将文本转换为电子表格的步骤有点麻烦。将文本导入到电子表格中的步骤太多,并且多行文本行在Excel中作为单独的行导入(这是不正确的)。

目前,我正在生成简单的XML文件,并以“.xls”扩展名保存文件。这样做效果更好,但仍然存在Excel每次打开文件时都会提示用户输入XML import dialogue的问题,如果他们添加了备注或将布局更改为文件(他们几乎肯定会在做)。

样本“XLS”文件:

<?xml version="1.0" standalone="yes"?>    
<report_rows>          
    <row>            
    <NAME>Test Data</NAME> 
    <COUNT>345</COUNT>     
    </row> 
    <!-- many more row elements... --> 
</report_rows> 

有什么办法来添加标记到该文件暗示到Excel应该如何导入和处理文件?理想情况下,最终用户应该能够像直接从Excel创建的电子表格一样打开和保存文件。

这甚至可能吗?

UPDATE:

我们正在运行Office 2003在这里。

UPDATE:

从sqlplus的脚本生成的XML,没办法用C#/。NET这里。

+0

您能否将XML生成为Office XML文件格式? (不过,需要Excel 2007或更高版本。) – 2010-04-07 20:01:28

+0

@Richard Morgan:我喜欢这个想法,但我们仍然在这里运行Office 2003。 – FrustratedWithFormsDesigner 2010-04-07 20:07:17

回答

1

对于Excel 2003和2007,使用SpreadSheet XML(XMLSS),就是这样。你会发现它很容易,有很多支持和图书馆可用。而且,由于您已经生成了XML,所以您只需创建转换样式表或修改代码即可。您不需要Excel来创建XMLSS。

+0

如果您使用的是C#,请参阅此问题以获取有关此更多讨论:http://stackoverflow.com/questions/151005/create-excel-xls-and-xlsx-file-from-c – 2010-04-07 20:38:08

+0

@Richard Morgan:Nope ,输出来自sqlplus脚本。 – FrustratedWithFormsDesigner 2010-04-07 20:41:30

+0

其实理查德摩根的链接是一个很好的参考。它包括一些很好的资源链接。 – AMissico 2010-04-07 21:19:29

0

我在工作之前遇到过这个问题,我发现将多个XML文件转换为Excel文件的最佳方式是使用Visual Basic(VBA)宏。如果您很少或没有使用VBA的经验,则有许多教程和资源在线,例如http://www.anthony-vba.kefra.com/index.htm

'Create an instance of the FileSystemObject 
Set objFSO = CreateObject("Scripting.FileSystemObject") 

'Get the folder object 
Set objFolder = objFSO.GetFolder("C:\Sem-o_Archive\XML") 

'loops through each file in the directory and prints their names and path 
For Each objFile In objFolder.Files 
cutting = Left(objFile.name, 15) 
Workbooks.Add 
ActiveWorkbook.XmlImport URL:="C:\path\to\files\" & objFile.name,  ImportMap:=Nothing, _ 
        Overwrite:=True, Destination:=range("$A$1") 
ActiveWorkbook.SaveAs "C:\path\to\save\location" & cutting & "xls" 
ActiveWorkbook.Close True 
Next objFile 

上面的代码转换指定文件夹中的所有XML文件,并在指定的文件夹保存他们,但是使用此代码,您将需要修复的切割变量,以便它包含XML文件的名称。

希望这有助于。