2

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

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

  2. 如果您将该文件重命名为 .xlsx,您会收到一条警告,“这不是一个 excel 文件,您希望继续吗”。这对客户来说并不理想。

理想情况下,我希望 Windows 在不修改打开 Excel 文件的默认操作系统设置的情况下在 Excel 中打开文件。Office 互操作是一种可能性,但对于这个应用程序来说似乎有点过头了。有没有人有任何想法来完成这项工作?

解决方案在 .Net/C# 中,但我对创建干净解决方案的其他可能性持开放态度。

4

6 回答 6

4

如果将以下内容插入 XML 的第二行,它会指示 Windows 使用 Excel 打开

<?mso-application progid="Excel.Sheet"?>
于 2008-09-17T12:51:19.613 回答
1

如果将文件保存为 xlsx(XML-Excel 的扩展名)会怎样?

于 2008-09-16T23:12:43.277 回答
1
Process.Start(@"C:\Program Files\Microsoft Office\Officexx\excel.exe", "yourfile.xml");

话虽如此,您仍然会收到消息框。我想您可以使用 Interop,但我不确定它对您的效果如何。

于 2008-09-16T23:19:42.077 回答
0

正如 Sam 所提到的,xlsx 文件扩展名可能是一个不错的选择。但是,涉及的不仅仅是将 xml 文件保存为 xlsx。xlsx 实际上是一个 zip 文件,文件夹中有一堆 xml 文件。我在这里找到了一些很好的示例代码,虽然我没有亲自尝试过,但它似乎给出了一些很好的解释。

于 2008-09-16T23:21:36.017 回答
0

提前为插入第三方库道歉,我知道它不是免费的,但我使用TMS Software 的FlexCel Studio。如果您希望做的不仅仅是转储数据(格式化、动态交叉表等),它会非常有效。我们使用它每周生成数百份报告。

FlexCel 接受强类型数据集,它可以根据关系对数据进行分组,并且生成的 Excel 文件看起来比从 Crystal Reports excel 导出中获得的要干净得多。我已经完成了水晶报告的事情,以及 OLE 自动化的事情。FlexCel 的售价为 125 欧元。

于 2008-09-17T01:05:33.193 回答
0

希望这可以帮助。

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));
            }
于 2013-04-02T19:57:20.630 回答