我也遇到了同样的问题: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#方法。
创建一个新的 C# 项目。并在您的项目上鼠标右键,单击“添加引用”,选择“.Net”选项卡,然后选择“Microsoft.Office.Interop.Excel”(如果没有找到它,请检查您的Visual Studio是否安装了Office开发实用程序),单击“确定”。这样就可以在c#中操作excel了。
粘贴以下代码。注意“xApp.Workbooks.OpenXML()”方法,我们将“xlXmlLoadImportToList”选项传入其中,其作用与我将xml拖入excel并选择第一个选项操作相同。这是解释不同选项的链接
http://msdn.microsoft.com/zh-cn/library/microsoft.office.interop.excel.workbooks.openxml(v=office.11 ).aspx
将“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>