【问题标题】:How can you programmatically import XML data into an Excel file?如何以编程方式将 XML 数据导入 Excel 文件?
【发布时间】:2012-08-06 17:39:23
【问题描述】:

以下代码应该可以帮助我从 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”来手动导入文件一样。

谁能告诉我怎么做?

【问题讨论】:

    标签: c# .net xml excel


    【解决方案1】:

    我也遇到了同样的问题: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>
    

    【讨论】:

      【解决方案2】:

      使用相同的系统,和 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-10
        • 1970-01-01
        • 2011-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-06
        相关资源
        最近更新 更多