【问题标题】:XML to Excel (2007) Ideas using Windows XP, and C#.NetXML to Excel (2007) Ideas using Windows XP, and C#.Net
【发布时间】:2010-09-09 20:16:36
【问题描述】:

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

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

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

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

解决方案在 .Net/C# 中,但我愿意接受其他可能性来创建干净的解决方案。

【问题讨论】:

    标签: c# .net xml excel


    【解决方案1】:

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

    <?mso-application progid="Excel.Sheet"?>
    

    【讨论】:

      【解决方案2】:
      Process.Start(@"C:\Program Files\Microsoft Office\Officexx\excel.exe", "yourfile.xml");
      

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

      【讨论】:

      • 这很好用。没有弹窗,大概是因为扩展名还是.xml。
      【解决方案3】:

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

      【讨论】:

      • 啊,谢谢提醒。这实际上是我遇到显示错误消息的情况 #2 的地方。我现在就去编辑...
      • xslx 不是 xml excel,它是 office 2007 v. excel(将 xslx 重命名为 zip,你会发现它基本上只是一个包含所有内容的 zip 文件)
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          希望这会有所帮助。

          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));
                      }
          

          【讨论】:

            猜你喜欢
            • 2022-12-27
            • 2022-12-02
            • 2022-12-26
            • 2022-12-27
            • 2022-12-02
            • 1970-01-01
            • 1970-01-01
            • 2022-12-02
            • 2022-12-02
            相关资源
            最近更新 更多