如何以编程方式将XML数据导入Excel文件?

时间:2012-08-06 17:39:24

标签: c# .net xml excel

以下代码可以帮助我从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的代码,就像我通过单击“Developer”选项卡然后“Import XML”手动导入文件一样。

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

2 个答案:

答案 0 :(得分:1)

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

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

Excel Interop中与XmlMap相关的方法。该特定链接是XmlMap.Import函数,它接受url(filePath)并导入xml数据。

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

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

答案 1 :(得分:1)

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

这是我的情况:我有一个xml,我可以通过将xml文件拖放到excel2007中手动将xml导入excel2007。然后它会弹出一个对话框,问我如何打开xml。有3个选项:作为xml,作为readonly 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”

  4. 然后您的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>