我有一个数据集,已将其修改为 xml 文档,然后使用 xsl 工作表转换为 Excel xml 格式,以便允许从我的应用程序以编程方式打开数据。我遇到了两个问题:

  1. Excel 不是打开 Excel 文件的默认 Windows 应用程序,因此当运行 Program.Start("xmlfilename.xml") 时,会打开 IE,并且 XML 文件的可读性不太好。

  2. 如果您将该文件重命名为 .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));
            }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top