次の方法で共有

Excelが持つXMLマップの要素を列挙したい

Anonymous
2011-04-05T02:09:55+00:00

ExcelでXMLを利用しています。

ExcelのXMLソースウィンドウでXML対応付けの一覧とそのXML対応付けの階層構造が表示でき、その要素ひとつずつに対してどのセルに対応しているか確認が出来ます。

この処理をExcel VBAで記述して要素を列挙したいのですが可能でしょうか?

可能であればそのコードの例を教えていただけませんか?

よろしくお願いしたします。

Microsoft 365 と Office | Excel | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2011-04-05T07:03:17+00:00

こんにちは。

> また、ExcelでXML対応付け以下の一覧が表示できるのであれば、XMLMap オブジェクト以下に適当なメソッドがありそうなものですが存在しません。

> Visual Studio Tools for Office で XmlMappedRange オブジェクトを利用する方法もありそうですが、製品が手元にないので確認が出来ません。

私も見てみましたが、たしかにXmlMap以下にはそれらしいプロパティやメソッドは

ありませんでしたが、下記ページを見るとVBAからでもアクセスできるListObject

オブジェクトでも各種情報(DataBodyRangeプロパティ等)を取得できるのではないかと思います。

(試していないので不確かなのですが…)

「Office ソリューションにおける XML スキーマの概要」

http://msdn.microsoft.com/ja-jp/library/3y61fk74%28v=vs.80%29.aspx

最悪は、XML Mapper(私は使用したことが無いので分かりません)をWM_COMMAND投げるなり

IAccessible経由で操作するなりで自動化することができるのではないかと思いますが、

効率はすさまじく悪くなりそうです…。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2011-04-05T12:53:57+00:00

    回答ありがとうございました。

    とりあえず、MSXML2.DOMDocumentを使ってくみ上げました。

    リスト形式のXML対応付けはXTRファイルが出力できるようになりました。

    ご回答頂いたListObjectsも検討はしたのですが、取得方法が難しそうだったのであきらめていました。(任意のブックにあるListObjectをリストアップする方法がなさそう)

    ですが、もう一度やり直ししたら次の方法で取れそうです。

    Public Sub test()

        Dim sheet       As Worksheet

        Dim objLO       As Excel.ListObject

        Dim objLC       As Excel.ListColumn

        For Each sheet In ActiveWorkbook.Worksheets

            For Each objLO In sheet.ListObjects

                For Each objLC In objLO.ListColumns

                    Debug.Print objLC.XPath

                Next

            Next

        Next

    End Sub

    ですが、全部のXML対応付けがごっちゃで取得になるので後の仕分けが大変そうです。

    こちらの方法ももうちょっと調査して、良い方を使ってみたいと思います。

    ありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2011-04-05T06:06:52+00:00

    やりたいことはExcelのデータをデータベースに取り込みたいということです。

    現在は手順として下記の方法で行っております。

    1. ExcelのデータをXMLファイルとしてエクスポート
    2. スキーマ情報をXSDファイルとして保存
    3. XSDファイルをembarcaderoさん独自のXSLT?であるXTRファイルを作成
    4. Delphiのコンポーネントでデータベースへ

    このとき、3)の手順でXML Mapperというソフトを利用するのですが、GUIのツールしか提供されていないので自動化できず、Excel VBAを使って自作してしまうということを考えています。

    Excel VBAでスキーマ情報は出力できるので、それからMSXML2.DOMDocumentを使って拾い上げていくことで一応列挙が出来るのですが、XSDをXMLドキュメントとして取り扱い属性を拾い上げていくのは回りくどい方法のような気がしています。

    また、ExcelでXML対応付け以下の一覧が表示できるのであれば、XMLMap オブジェクト以下に適当なメソッドがありそうなものですが存在しません。

    XML対応付け一覧からエレメントをクリックすると対応しているセルがわかるので、そのセルからXPathを取得できればもうちょっとスマートに記述できそうなのですが、マクロ記録でもこのあたりの情報を保存することが出来なかったのでご質問させていただいております。

    Visual Studio Tools for Office で XmlMappedRange オブジェクトを利用する方法もありそうですが、製品が手元にないので確認が出来ません。

    以上、よろしくお願いいたします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2011-04-05T04:50:12+00:00

    こんにちは。

    くろねこさんがされたい処理は具体的にどういったものなのでしょうか?

    (XMLの要素を列挙したい、各要素がどの列に割り当てられているかを知りたい等)

    単に要素を列挙するだけならXMLHttpRequestオブジェクトを使った方が

    早いのではないかと思います。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません