Копирование содержимого Excel с использованием VBA в таблицу веб-страниц - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь ввести значения из таблицы Excel в таблицу HTML на веб-сайте. Я получил доступ к элементу таблицы с помощью td.innertext, но как только я скопировал их, содержимое ячейки в таблице HTML стало недоступно для редактирования. Я не уверен, почему это происходит. Кто-нибудь может мне помочь?

Я пытаюсь скопировать строки с 1 по 8 и столбцы с 2 по 5 в таблицу

For tr_id = 1 To 8
    For td_id = 1 To 4
    Set TD = .Document.getElementById("table_data").getElementsByTagName("tr")(tr_id).getElementsByTagName("td")(td_id)
    TD.innerText = Sheet1.Cells(row, col).Value
    col = col + 1
    Next
    col = 1
       row = row + 1
Next

Адрес веб-сайта - https://datatables.net/examples/api/form.html

Я не уверен, почему содержимое, вставленное на сайт (таблица HTML, выглядит как текстовое поле), становится недоступным для редактирования после копирования чисел из Excel. Есть ли что-то еще, на что я должен смотреть?

Ответы [ 2 ]

1 голос
/ 23 января 2020

В тегах td есть входные теги. Вы должны заполнить их значения. Если вы устанавливаете внутренний текст тегов td, вы перезаписываете входные теги (я думаю).

Я не тестировал следующий код:

Sub InsertText()

Dim IE As Object
Dim nodeTable As Object
Dim nodesAllTr As Object
Dim nodeOneTr As Object
Dim nodesAllInput As Object
Dim nodeOneInput As Object
Dim url As String
Dim row As Long
Dim col As Long

  row = 2
  col = 1
  url = "https://datatables.net/examples/api/form.html"

  'Initialize Internet Explorer, set visibility,
  'call URL and wait until page is fully loaded
  Set IE = CreateObject("internetexplorer.application")
  IE.Visible = True
  IE.navigate url
  Do Until IE.ReadyState = 4: DoEvents: Loop

  'Get the table for data input
  Set nodeTable = IE.document.getElementByID("example")
  'Get all rows in the table
  Set nodesAllTr = nodeTable.getElementsByTagName("thead").getElementsByTagName("tr")

  'Go through all rows
  For Each nodeOneTr In nodesAllTr
    'Get all input tags from current row
    Set nodesAllInput = nodeOneTr.getElementsByTagName("input")
    'Go through all input tags
    For Each nodeOneInput In nodesAllInput
      'Enter value to current input tag
      nodeOneInput.Value = Sheet1.Cells(row, col).Value
      col = col + 1
    Next nodeOneInput
    col = 1
    row = row + 1
  Next nodeOneTr
End Sub
1 голос
/ 23 января 2020

Я должен сделать некоторые предположения, поскольку я не вижу весь ваш код.

Если они верны, то это должно сработать:

For tr_id = 1 To 8
    For td_id = 1 To 4
    Set TD = .Document.getElementById("table_data").getElementsByTagName("tr")(tr_id).getElementsByTagName("td")(td_id).getElementsByTagName("input")(0)
    TD.Value = Sheet1.Cells(row, col).Value
    col = col + 1
    Next
    col = 1
       row = row + 1
Next

Критическая часть - .getElementsByTagName("input")(0).Value = Sheet1.Cells(row, col).Value

Вы не хотите изменять .innerText элемента данных таблицы, поскольку это все равно, что пытаться жестко закодировать значение в веб-страницу путем изменения ее исходного кода (и вы потеряете тег ввода)

Скорее вы хотите изменить значение атрибута этого входного тега.

enter image description here

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