2

以下代码应该可以帮助我从 Excel 导出 XML 数据:

 Excel.Application application = new Excel.Application();
            application.Workbooks.Open(excelFilepath,
                                    Missing.Value,
                                    Missing.Value,
                                    Missing.Value,
                                    Missing.Value,
                                    Missing.Value,
                                    Missing.Value,
                                    Missing.Value,
                                    Missing.Value,
                                    Missing.Value,
                                    Missing.Value,
                                    Missing.Value,
                                    Missing.Value,
                                    Missing.Value,
                                    Missing.Value);

        string data = null;
        application.ActiveWorkbook.XmlMaps[1].XmlExport(out data);

现在我正在寻找可以帮助我将 XML 数据导入 Excel 的代码就像我通过单击“开发人员”选项卡然后单击“导入 XML”手动导入文件一样。

有人可以告诉我该怎么做吗?

4

2 回答 2

2

我也遇到了同样的问题:XmlMaps[1].Import() 不起作用,它只是崩溃了,我不知道如何定义所需的 XmlMaps。我找到了 XmlMaps.Add(string schema) 方法,但我没有要传递给它的 xml 架构。我手里只有一个xml文件。

这是我的情况:我有一个xml,我可以通过将xml文件拖到excel2007中来手动将xml导入excel2007。然后它会弹出一个对话框,问我如何打开xml。有 3 个选项:作为 xml、作为只读 excel 工作表、作为 xml 源。选择第一个选项,我的xml数据就自动导入excel了。

然后我尝试通过 c# 做同样的事情,但是我找到的每个方法都没有用。

我坚持了3个小时。

非常幸运的是,我终于找到了解决方案:您不需要使用 XmlMaps,只需使用 OpenXml() 即可。

这是将合法xml导入excel的c#方法。

  1. 创建一个新的 C# 项目。并在您的项目上鼠标右键,单击“添加引用”,选择“.Net”选项卡,然后选择“Microsoft.Office.Interop.Excel”(如果没有找到它,请检查您的Visual Studio是否安装了Office开发实用程序),单击“确定”。这样就可以在c#中操作excel了。

  2. 粘贴以下代码。注意“xApp.Workbooks.OpenXML()”方法,我们将“xlXmlLoadImportToList”选项传入其中,其作用与我将xml拖入excel并选择第一个选项操作相同。这是解释不同选项的链接 http://msdn.microsoft.com/zh-cn/library/microsoft.office.interop.excel.workbooks.openxml(v=office.11 ​​).aspx

  3. 将“xml”和“xlsx”变量替换为您自己的文件路径,如“d:\my.xml”“d:\my.xlsx”

然后你的 xml 被保存为 xlsx。祝你好运!

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Reflection;
    using Microsoft.Office.Interop.Excel;
    using Microsoft.Office.Interop;
    using System.IO;

    namespace SaveXmlAsExcel
    {
        class Program
        {
            static void Main(string[] args)
            {
                string xml  = args[0];
                string xlsx = args[1];

                if (false == File.Exists(xml))
                {
                    Console.WriteLine("{0} file not exist", xlsx);
                    return;
                }

                Microsoft.Office.Interop.Excel.Application xApp = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbook excelWorkBook = xApp.Workbooks.OpenXML(xml, Type.Missing, Microsoft.Office.Interop.Excel.XlXmlLoadOption.xlXmlLoadImportToList);

                excelWorkBook.SaveAs(xlsx, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange);

                excelWorkBook.Close();
                xApp.Workbooks.Close();
            }
        }
    }

这是我的xml:它必须具有excel可以成功解析的合法格式。

<AwardProps xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <AwardPropRecord>
    <g_AwardProps>
      <entry>
        <Id>0</Id>
        <IsElite>0</IsElite>
        <GoldCost>0</GoldCost>
        <Exp>0</Exp>
      </entry>
      <entry>
        <Id>255</Id>
        <IsElite>255</IsElite>
        <GoldCost>255</GoldCost>
        <Exp>255</Exp>
      </entry>
    </g_AwardProps>
  </AwardPropRecord>
</AwardProps>
于 2013-12-01T16:02:02.147 回答
1

使用相同的系统,和 MSDN 网站。我花了很短的时间才找到以下链接:

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xmlmap.import%28v=office.14%29

Excel 互操作中与 XmlMap 相关的方法。该特定链接指向 XmlMap.Import 函数,该函数采用 url (filePath) 并导入 xml 数据。

该页面上还有一个指向ImportXml()函数的链接,它可以接受 xml 字符串作为函数的直接输入,而不是使用 URL。

对于这两种情况,代码假定 XmlMap 已经定义。我自己不知道如何通过接口以编程方式在 Excel 文档中定义 XmlMap。

于 2012-08-06T18:36:39.137 回答