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 のインポート] をクリックしてファイルを手動でインポートするのと同じように、XML データを Excel にインポートするのに役立つコードを探しています。

誰かがそれを行う方法を教えてもらえますか?

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] を選択します (見つからない場合は、ビジュアル スタジオに Office 開発ユーティリティがインストールされているかどうかを確認してください)。 「OK」をクリックします。これにより、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 Web サイトを使用します。次のリンクを見つけるのに非常に短い時間がかかりました。

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

Excel Interop 内の XmlMap に関連するメソッド。その特定のリンクは、url (filePath) を受け取り、xml データをインポートする XmlMap.Import 関数へのリンクです。

そのページには関数へのリンクもありImportXml()、URL を使用するのではなく、xml 文字列を関数への直接入力として受け入れることができます。

コードは、これらの両方について、XmlMap が既に定義されていることを前提としています。私自身、インターフェイスを介してExcelドキュメントでXmlMapをプログラムで定義する方法を知りません。

于 2012-08-06T18:36:39.137 に答える