Таблицы и значения матрицы утроены - PullRequest
0 голосов
/ 13 мая 2019

Я не могу получить матрицу массива в одну таблицу HTML. По какой-то причине таблицы и значения матрицы утроены, и я не знаю почему.

Выход:

enter image description here

Sub writeTable(arrData)
    Dim intCount
    For intCount = LBound(arrData) To UBound(arrData)
        document.write "<!DOCTYPE html>"
        document.write "<html>"
        document.write "<head>"
        document.write "<style>"
        document.write "table, th, td {"
        document.write "border: 1px solid black;"
        document.write "border-collapse: collapse;"
        document.write "}"
        document.write "</style>"
        document.write "</head>"
        document.write "<body>"
        document.write "<p>Test</p>"
        document.write "<table style='width:50px'>"
        document.write "<tr>"
        document.write "<td>"& arrData(0, intCount) &"</td>"
        document.write "<td>"& arrData(0, intCount) &"</td>"
        document.write "<td>"& arrData(2, intCount) &"</td>"
        document.write "</tr>"
        document.write "<tr>"
        document.write "<td>"& arrData(0, intCount) &"</td>"
        document.write "<td>"& arrData(1, intCount) &"</td>"
        document.write "<td>"& arrData(2, intCount) &"</td>"
        document.write "</tr>"
        document.write "<tr>"
        document.write "<td>"& arrData(0, intCount) &"</td>"
        document.write "<td>"& arrData(1, intCount) &"</td>"
        document.write "<td>"& arrData(2, intCount) &"</td>"
        document.write "</tr>"
        document.write "</table>"
        document.write "</body>"
        document.write "</html>"
    Next
End Sub

1 Ответ

1 голос
/ 13 мая 2019

Код, который вы опубликовали, создает полный HTML-документ с таблицей из трех строк для каждой строки массива. Следующий фрагмент выведет одну строку:

document.write "<td>"& arrData(0, intCount) &"</td>"
document.write "<td>"& arrData(1, intCount) &"</td>"
document.write "<td>"& arrData(2, intCount) &"</td>"

Повторение этого фрагмента 3 раза повторяет строку 3 раза в выводе.

document.write "<td>"& arrData(0, intCount) &"</td>"
document.write "<td>"& arrData(0, intCount) &"</td>"
document.write "<td>"& arrData(2, intCount) &"</td>"
document.write "</tr>"
document.write "<tr>"
document.write "<td>"& arrData(0, intCount) &"</td>"
document.write "<td>"& arrData(1, intCount) &"</td>"
document.write "<td>"& arrData(2, intCount) &"</td>"
document.write "</tr>"
document.write "<tr>"
document.write "<td>"& arrData(0, intCount) &"</td>"
document.write "<td>"& arrData(1, intCount) &"</td>"
document.write "<td>"& arrData(2, intCount) &"</td>"

Только у вас есть опечатка во 2-м операторе, которая заставляет первое поле выводиться дважды в первой строке.

В основном есть 2 способа решения проблемы:

  • Выполните цикл только для строк таблицы, а не для всего документа, и выведите только одну строку в теле цикла:

    document.write "<!DOCTYPE html>"
    document.write "<html>"
    ...
    document.write "<p>Test</p>"
    document.write "<table style='width:50px'>"
    For intCount = LBound(arrData) To UBound(arrData)
        document.write "<tr>"
        document.write "<td>"& arrData(0, intCount) &"</td>"
        document.write "<td>"& arrData(0, intCount) &"</td>"
        document.write "<td>"& arrData(2, intCount) &"</td>"
        document.write "</tr>"
    Next
    document.write "</table>"
    document.write "</body>"
    document.write "</html>"
    

    Это рекомендуемый способ.

  • Удалить цикл и повторить операторы, увеличивая при этом индекс строки самостоятельно:

    document.write "<td>"& arrData(0, 0) &"</td>"
    document.write "<td>"& arrData(1, 0) &"</td>"
    document.write "<td>"& arrData(2, 0) &"</td>"
    document.write "</tr>"
    document.write "<tr>"
    document.write "<td>"& arrData(0, 1) &"</td>"
    document.write "<td>"& arrData(1, 1) &"</td>"
    document.write "<td>"& arrData(2, 1) &"</td>"
    document.write "</tr>"
    document.write "<tr>"
    document.write "<td>"& arrData(0, 2) &"</td>"
    document.write "<td>"& arrData(1, 2) &"</td>"
    document.write "<td>"& arrData(2, 2) &"</td>"
    

    Я не рекомендую такой подход, потому что он не может обрабатывать различное количество строк в массиве без изменения кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...