none
【HTA】Span内のTableデータの取得方法【VBS】 RRS feed

  • 質問

  • 【VBS】動的な表作成【HTA】

    https://social.technet.microsoft.com/Forums/ja-JP/7a82a085-3993-480c-b0f8-64432b5b6be0/vbshta?forum=internetexplorerja#84e2699e-9066-4f8a-97a0-1b6c24d3037d

    上記で質問した内容の続き?になります。

    [テキストボックス][検索ボタン]

    <span id=TableArea>
    <table id=TABLEALLDATA cellpadding="0" border=1 style="font-size:20px;">
    <span id=gyou1><TR><TD>1</TD><TD></TD><TD></TD></TR>
    <span id=gyou5><TR><TD>5</TD><TD></TD><TD></TD></TR>
    <span id=gyou3><TR><TD>3</TD><TD></TD><TD></TD></TR>
    <span id=gyou4><TR><TD>4</TD><TD></TD><TD></TD></TR></table></span> 

    [テキストボックス2][行追加ボタン]

    表は動的に変動します。

    行追加、行削除を行うことでテーブル内容が変わります。

    ここで分からないのが、このテーブルデータの取得方法です。

    TEST=Document.all.getelementById("TableArea")
    ALLDATA=TEST.getelementById("TABLEALLDATA")
    Msgbox ALLDATA.Rows(1).cells(1).innerHTML

    こんな風にやれば取得できるかと思ったのですが、できませんでした。

    どのようにすれば、テーブル内のデータを取得できますか?

    今は一列目の1,5,3,4等のデータが取得できれば良いと思っています。

    テーブル内のデータ取得方法を教えて下さい。よろしくお願いいたします!

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

    2016年7月4日 6:14

回答

  • こんにちは。

    RowsとCellsは0オリジンだと思うので、gyou1 の1列目を取得する場合は以下でいけると思います。
    (その他の要件が分からないのでとりあえず最低限動くはずのもので書いています)

    Set ALLDATA = Document.getelementById("TABLEALLDATA")
    Msgbox ALLDATA.Rows(0).cells(0).innerHTML



    きよくらならみ

    • 回答としてマーク さろるん 2016年7月5日 4:14
    2016年7月4日 8:07
  • > TEST=Document.all.getelementById("TableArea")
    (1) getElementById メソッドを持っているのは、all コレクションではなく document オブジェクトです。
    (2) VBScript は、オブジェクトの代入に Set ステートメントを用いる必要があります。

    すなわち、

    Set TEST = document.getElementById("TableArea")

    と書くのが正しいです。

    > ALLDATA=TEST.getelementById("TABLEALLDATA")
    (3) Table オブジェクトに、getelementById というメソッドはありません。document.getElementById を使いましょう。
    (4) 直下にある最初の子要素を取得したい場合には firstChild プロパティを使うこともできます。

    ゆえにこの場合は、

    Set ALLDATA = document.getElementById("TABLEALLDATA")

    もしくは

    Set ALLDATA = TEST.firstChild

    のように記述してみてください。

    > Msgbox ALLDATA.Rows(1).cells(1).innerHTML
    (5) Kiyokura さんが指摘されていますように、コレクション(tBodies, rows, cells など)のインデックスは 0 から始まります。

    もし、1,5,3,4等のデータを取得したいのであれば、下記のようにします。

    For r = 0 To ALLDATA.rows.length - 1
      Msgbox ALLDATA.rows(r).cells(0).innerText
    Next

    > <table id=TABLEALLDATA cellpadding="0" border=1 style="font-size:20px;">
    > <span id=gyou1><TR><TD>1</TD><TD></TD><TD></TD></TR>

    <table> タグの直下に <span> タグを配置してはいけないことになっています。
    それに、そもそも <span> に対応する </span> の数が足りていませんよね。

    今回の場合、行単位に id を振る必要も無さそうに思えますが、もし id も必要なのであれば、せめて <TR id="gyou1">のようにしてみては如何でしょう。

    • 回答としてマーク さろるん 2016年7月5日 4:14
    2016年7月4日 14:33

すべての返信

  • こんにちは。

    RowsとCellsは0オリジンだと思うので、gyou1 の1列目を取得する場合は以下でいけると思います。
    (その他の要件が分からないのでとりあえず最低限動くはずのもので書いています)

    Set ALLDATA = Document.getelementById("TABLEALLDATA")
    Msgbox ALLDATA.Rows(0).cells(0).innerHTML



    きよくらならみ

    • 回答としてマーク さろるん 2016年7月5日 4:14
    2016年7月4日 8:07
  • > TEST=Document.all.getelementById("TableArea")
    (1) getElementById メソッドを持っているのは、all コレクションではなく document オブジェクトです。
    (2) VBScript は、オブジェクトの代入に Set ステートメントを用いる必要があります。

    すなわち、

    Set TEST = document.getElementById("TableArea")

    と書くのが正しいです。

    > ALLDATA=TEST.getelementById("TABLEALLDATA")
    (3) Table オブジェクトに、getelementById というメソッドはありません。document.getElementById を使いましょう。
    (4) 直下にある最初の子要素を取得したい場合には firstChild プロパティを使うこともできます。

    ゆえにこの場合は、

    Set ALLDATA = document.getElementById("TABLEALLDATA")

    もしくは

    Set ALLDATA = TEST.firstChild

    のように記述してみてください。

    > Msgbox ALLDATA.Rows(1).cells(1).innerHTML
    (5) Kiyokura さんが指摘されていますように、コレクション(tBodies, rows, cells など)のインデックスは 0 から始まります。

    もし、1,5,3,4等のデータを取得したいのであれば、下記のようにします。

    For r = 0 To ALLDATA.rows.length - 1
      Msgbox ALLDATA.rows(r).cells(0).innerText
    Next

    > <table id=TABLEALLDATA cellpadding="0" border=1 style="font-size:20px;">
    > <span id=gyou1><TR><TD>1</TD><TD></TD><TD></TD></TR>

    <table> タグの直下に <span> タグを配置してはいけないことになっています。
    それに、そもそも <span> に対応する </span> の数が足りていませんよね。

    今回の場合、行単位に id を振る必要も無さそうに思えますが、もし id も必要なのであれば、せめて <TR id="gyou1">のようにしてみては如何でしょう。

    • 回答としてマーク さろるん 2016年7月5日 4:14
    2016年7月4日 14:33