私も同じ問題に直面しています: 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] を選択します (見つからない場合は、ビジュアル スタジオに Office 開発ユーティリティがインストールされているかどうかを確認してください)。 「OK」をクリックします。これにより、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>