我有一些报告是针对我的数据库运行的,最终需要以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创建的任何电子表格一样打开和保存文件。
这甚至可能吗?
更新
我们在这里运行Office 2003。
更新
XML是从sqlplus脚本生成的,没有在这里使用C#/ .NET的选项。
答案 0 :(得分:1)
对于Excel 2003和2007,使用SpreadSheet XML(XMLSS),就是这样。您会发现它很容易,并且有很多支持和库可用。此外,由于您已经在生成XML,所以您真正需要做的就是创建转换样式表或只修改代码。您不需要Excel来创建XMLSS。
答案 1 :(得分: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文件的名称。
希望这会有所帮助。