XML to Excel (2007) 使用 Windows XP 和 C#.Net 的想法
题
我有一个数据集,已将其修改为 xml 文档,然后使用 xsl 工作表转换为 Excel xml 格式,以便允许从我的应用程序以编程方式打开数据。我遇到了两个问题:
Excel 不是打开 Excel 文件的默认 Windows 应用程序,因此当运行 Program.Start("xmlfilename.xml") 时,会打开 IE,并且 XML 文件的可读性不太好。
如果您将该文件重命名为 .xlsx,您会收到一条警告:“这不是 Excel 文件,您希望继续吗”。这对于客户来说并不理想。
理想情况下,我希望 Windows 在 Excel 中打开文件,而不修改打开 Excel 文件的默认操作系统设置。Office 互操作是一种可能性,但对于此应用程序来说似乎有点大材小用。有人有什么想法可以让这项工作成功吗?
解决方案是在 .Net/C# 中,但我愿意接受其他可能性来创建一个干净的解决方案。
解决方案
Process.Start(@"C:\Program Files\Microsoft Office\Officexx\excel.exe", "yourfile.xml");
话虽这么说,您仍然会收到消息框。我想您可以使用互操作性,但我不确定它对您的效果如何。
其他提示
如果将以下内容插入 XML 的第二行,它将指示 Windows 使用 Excel 打开
<?mso-application progid="Excel.Sheet"?>
如果将文件另存为 xlsx(XML-Excel 的扩展名)会怎样?
正如 Sam 提到的,xlsx 文件扩展名可能是一个不错的选择。然而,除了将 xml 文件保存为 xlsx 之外,还涉及更多内容。xlsx 实际上是一个 zip 文件,文件夹内有一堆 xml 文件。我找到了一些很好的示例代码 这里 尽管我个人还没有尝试过,但这似乎给出了一些很好的解释。
提前为插入第三方库道歉,我知道它不是免费的,但我使用 FlexCel工作室 来自 TMS 软件。如果您想要做的不仅仅是转储数据(格式化、动态交叉表等),那么它非常有效。我们使用它每周生成数百份报告。
FlexCel 接受强类型数据集,它可以根据关系对数据进行分组,并且生成的 Excel 文件看起来比从 Crystal Reports Excel 导出中获得的文件干净得多。我已经完成了水晶报告和 OLE 自动化的工作。FlexCel 价格为 125 欧元,非常便宜。
希望这可以帮助。
MSDN 中的 OpenXML - http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.openxml(v=office.11).aspx
using Excel = Microsoft.Office.Interop.Excel;
string workbookPath= @"C:\temp\Results_2013Apr02_110133_6692.xml";
this.lblResultFile.Text = string.Format(@" File:{0}",workbookPath);
if (File.Exists(workbookPath))
{
Excel.Application excelApp = new Excel.Application();
excelApp.Visible = true;
Excel.Workbook excelWorkbook = excelApp.Workbooks.OpenXML(workbookPath, Type.Missing, Excel.XlXmlLoadOption.xlXmlLoadPromptUser);
}
else
{
MessageBox.Show(String.Format("File:{0} does not exists", workbookPath));
}