Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA将html表格数据复制到excel工作表_Excel_Vba - Fatal编程技术网

VBA将html表格数据复制到excel工作表

VBA将html表格数据复制到excel工作表,excel,vba,Excel,Vba,我需要一个VBA脚本,可以提取本地html表数据到Excel工作表。我有一些代码(在web上的某个地方找到的)可以通过使用URL链接来工作,但我想要的是能够使用本地存储的html文件来完成。错误是我得到的是“应用程序定义或对象定义错误” 将HTML_表_分为_Excel() 作为对象的Dim htm 作为对象的Dim Tr 将Td作为对象 将选项卡1设置为对象 '替换要下载的网页的URL Web_URL=”http://espn.go.com/nba/" '创建HTMLFile对象 设置HTM

我需要一个VBA脚本,可以提取本地html表数据到Excel工作表。我有一些代码(在web上的某个地方找到的)可以通过使用URL链接来工作,但我想要的是能够使用本地存储的html文件来完成。错误是我得到的是“应用程序定义或对象定义错误”

将HTML_表_分为_Excel()
作为对象的Dim htm
作为对象的Dim Tr
将Td作为对象
将选项卡1设置为对象
'替换要下载的网页的URL
Web_URL=”http://espn.go.com/nba/" 
'创建HTMLFile对象
设置HTML\u Content=CreateObject(“htmlfile”)
'将网页内容获取到HTMLFile对象
使用CreateObject(“msxml2.xmlhttp”)
.打开“获取”,网址,假
.发送
HTML_Content.body.innerHTML=.responseText'这是错误的突出显示部分
以
列\u Num \u To \u Start=1
iRow=2
iCol=列的开始数量
iTable=0
'循环浏览每个表,并以适当的格式将其下载到Excel
对于HTML_Content.getElementsByTagName(“表”)中的每个选项卡1
使用HTML_Content.getElementsByTagName(“表”)(iTable)
对于每行中的每个Tr
对于Tr单元格中的每个Td
工作表(1).单元格(iRow,iCol).选择
表(1).单元格(iRow,iCol)=Td.innerText
iCol=iCol+1
下一个Td
iCol=列的开始数量
iRow=iRow+1
下一个Tr
以
iTable=iTable+1
iCol=列的开始数量
iRow=iRow+1
下表1
MsgBox“流程已完成”
端接头

我不确定是否遵循了约定,但我设法成功地将HTML表导出到excel。这是我的vb脚本。欢迎进行任何优化/更正!谢谢

Sub Export()
rowsLength =document.all.yourHTMLTableId.rows.length
cellLength= (document.all.yourHTMLTableId.Cells.length/rowsLength) 'Because i dont know how to get no.of cells in a row,so used a simple division 

 Set crr = CreateObject("WScript.Shell")

 fileNm= "Export"
 dir= crr.CurrentDirectory&"\"&fileNm&".xlsx"
 Set objExcel = CreateObject("Excel.Application")
 Set objWorkbook = objExcel.Workbooks.Add()
 Set objWorksheet= objWorkbook.Worksheets(1)
 i=0
 j=0

 do until i=rowsLength
   do until j=cellLength
   objWorksheet.cells(i+1,j+1).value =  document.all.yourHTMLTableId.rows(i).cells(j).innerHTML
   msgbox document.all.yourHTMLTableId.rows(i).cells(j).innerHTML 
   j= j+1
   Loop
 j=0    
 i=i+1
 Loop
 objWorkbook.SaveAs(dir)
 objWorkbook.close
 objExcel.Quit
 Set objExcel = Nothing

End Sub

我遇到了同样的问题,为了解决这个问题,我使用了问题的原始代码,但是我没有下载html,而是将html作为文本文件打开,结果被传递到对象html_Content.body.innerHtml。其余代码是相同的

Sub HTML_Table_To_Excel() 

Dim htm As Object 
Dim Tr As Object 
Dim Td As Object 
Dim Tab1 As Object
Dim file as String

'Replace the file path with your own 
file = "c:\your_File.html"

'Determine the next file number available for use by the FileOpen function
TextFile = FreeFile

'Open the text file
Open file For Input As TextFile

'Create HTMLFile Object 
Set HTML_Content = CreateObject("htmlfile") 
HTML_Content.body.innerHtml = Input(LOF(TextFile), TextFile)

Column_Num_To_Start = 1 
iRow = 2 
iCol = Column_Num_To_Start 
iTable = 0 

'Loop Through Each Table and Download it to Excel in Proper Format 
For Each Tab1 In HTML_Content.getElementsByTagName("table") 
    With HTML_Content.getElementsByTagName("table")(iTable) 
        For Each Tr In .Rows 
        For Each Td In Tr.Cells 
            Sheets(1).Cells(iRow, iCol).Select 
            Sheets(1).Cells(iRow, iCol) = Td.innerText 
            iCol = iCol + 1 
            Next Td 
            iCol = Column_Num_To_Start 
            iRow = iRow + 1 
        Next Tr 
    End With 

    iTable = iTable + 1 
    iCol = Column_Num_To_Start 
    iRow = iRow + 1 
Next Tab1 

MsgBox "Process Completed" 
End Sub

您是否尝试了
网站URL的
文件://
?例如,如果您的文件存储在~/User/abc.html中,您可以尝试:
WEB\u URL=”file:///Users/abc.html“
是。我尝试了
WEB\u URL=“file://C:/users/folder/test.html”
。它不起作用。出现相同错误。请尝试以下操作:若要使用正确的URL创建XHR,请将前缀
文件://
和文件的编码路径连接起来(使用
EncodeUriComponent()
函数like)。