使用 VSTO 将 HTML 导入到 Excel
Importing HTML to Excel using VSTO
我有一些 html 个文件,我需要将数据导入 excel。我正在使用 VSTO (VB.NET) 来实现相同的目的。不幸的是,我遇到了一些错误。我是解析 html 的新手。有人可以告诉我下面的代码哪里出错了。
我试图从 HTML collection 中读取 header 2 文本,但它不起作用。谁能告诉我哪里出错了?
Dim doc As HtmlDocument, htmlTable As Object, htmlBody As
HtmlElementCollection
Dim wbrowser As New WebBrowser
Dim header2 as String
wbrowser.Visible = False
wbrowser.Navigate(InputHtmlFile)
'Do
'
'Loop Until Not wbrowser.IsBusy
doc = wbrowser.Document
htmlBody = doc.GetElementsByTagName("BODY")
htmlheadings = doc.GetElementsByTagName("H2")
header2 = htmlheadings(0).Innertext
下面是html代码
<HEAD>
<TITLE> SOME TITLE </TITLE>
</HEAD>
<BODY>
<H2> HEADER 2 TEXT </H2>
<HR NOSHADE>
<H3> <U>DATA</U> </H3>
<BLOCKQUOTE>
VERSION NUMBER X.X.XXX
</BLOCKQUOTE>
<HR SIZE = 5>
<H3> <U>DATA SET 2</U></H3>
<BLOCKQUOTE>
<H4>DATA SET 3 </H4>
<BLOCKQUOTE>
<TABLE border=1>
<TR> <TH> TableHeader1 </TH> <TH>TTableHeader2</TH>
<TH>TableHeader3</TH><TH>TableHeader4</TH><TH>TableHeader5</TH>
<TH>TableHeader6</TH></TR><TR ALIGN=CENTER><TD>1</TD><TD> 6.4</TD><TD>
StringData</TD><TD> No</TD><TD> </TD><TD> </TD> </TR></TABLE><BR>
</BLOCKQUOTE>
我希望 "HEADER 2 TEXT" 被分配给变量 header2 但我在
行收到以下错误
header2 = htmlheadings(0).Innertext
System.ArgumentOutOfRangeException:“‘0’的值对 'index' 无效。 'index' 应介于 0 和 -1 之间。
参数名称:index'
htmlheadings(0).InnerHtml = 'htmlheadings(0).InnerHtml' 引发了 'System.ArgumentOutOfRangeException'
类型的异常
另外 collections htmlBody 和 html 标题是空的。
您的 HTML 代码不正确 HTML。没有 标签,没有结束 标签,开始
标签多于结束标签等。我删除了不正确的内容:
<?xml version="1.0" encoding="utf-8" ?>
<html>
<head>
<title>SOME TITLE</title>
</head>
<body>
<h2>HEADER 2 TEXT </h2>
<h3>
<u>DATA</u>
</h3>
<blockquote>VERSION NUMBER X.X.XXX</blockquote>
<h3><u>DATA SET 2</u></h3>
<h4>DATA Set 3</h4>
<table border="1">
<tr><th>TableHeader1</th><th>TTableHeader2</th><th>TableHeader3</th><th>TableHeader4</th><th>TableHeader5</th><th>TableHeader6</th></tr>
<tr align="CENTER"><td>1</td><td>6.4</td><td>StringData</td><td>No</td><td></td><td></td></tr>
</table>
<br />
</body>
</html>
元素在浏览器控件的 DocumentCompleted 事件处理程序中工作正常(double-click 它生成事件处理程序):
Public Class Form1
Public Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
wbrowser.Visible = False
wbrowser.Navigate("C:\temp\foo.html")
End Sub
Private Sub wbrowser_DocumentCompleted(sender As Object, e As Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles wbrowser.DocumentCompleted
Dim doc = wbrowser.Document
Dim htmlBody = doc.GetElementsByTagName("BODY")(0)
Dim htmlheadings = htmlBody.GetElementsByTagName("H2")
Dim header2 = htmlheadings(0).InnerText
MsgBox(header2)
End Sub
End Class
我有一些 html 个文件,我需要将数据导入 excel。我正在使用 VSTO (VB.NET) 来实现相同的目的。不幸的是,我遇到了一些错误。我是解析 html 的新手。有人可以告诉我下面的代码哪里出错了。
我试图从 HTML collection 中读取 header 2 文本,但它不起作用。谁能告诉我哪里出错了?
Dim doc As HtmlDocument, htmlTable As Object, htmlBody As
HtmlElementCollection
Dim wbrowser As New WebBrowser
Dim header2 as String
wbrowser.Visible = False
wbrowser.Navigate(InputHtmlFile)
'Do
'
'Loop Until Not wbrowser.IsBusy
doc = wbrowser.Document
htmlBody = doc.GetElementsByTagName("BODY")
htmlheadings = doc.GetElementsByTagName("H2")
header2 = htmlheadings(0).Innertext
下面是html代码
<HEAD>
<TITLE> SOME TITLE </TITLE>
</HEAD>
<BODY>
<H2> HEADER 2 TEXT </H2>
<HR NOSHADE>
<H3> <U>DATA</U> </H3>
<BLOCKQUOTE>
VERSION NUMBER X.X.XXX
</BLOCKQUOTE>
<HR SIZE = 5>
<H3> <U>DATA SET 2</U></H3>
<BLOCKQUOTE>
<H4>DATA SET 3 </H4>
<BLOCKQUOTE>
<TABLE border=1>
<TR> <TH> TableHeader1 </TH> <TH>TTableHeader2</TH>
<TH>TableHeader3</TH><TH>TableHeader4</TH><TH>TableHeader5</TH>
<TH>TableHeader6</TH></TR><TR ALIGN=CENTER><TD>1</TD><TD> 6.4</TD><TD>
StringData</TD><TD> No</TD><TD> </TD><TD> </TD> </TR></TABLE><BR>
</BLOCKQUOTE>
我希望 "HEADER 2 TEXT" 被分配给变量 header2 但我在
行收到以下错误 header2 = htmlheadings(0).Innertext
System.ArgumentOutOfRangeException:“‘0’的值对 'index' 无效。 'index' 应介于 0 和 -1 之间。 参数名称:index'
htmlheadings(0).InnerHtml = 'htmlheadings(0).InnerHtml' 引发了 'System.ArgumentOutOfRangeException'
类型的异常另外 collections htmlBody 和 html 标题是空的。
您的 HTML 代码不正确 HTML。没有 标签,没有结束 标签,开始
标签多于结束标签等。我删除了不正确的内容:<?xml version="1.0" encoding="utf-8" ?> <html> <head> <title>SOME TITLE</title> </head> <body> <h2>HEADER 2 TEXT </h2> <h3> <u>DATA</u> </h3> <blockquote>VERSION NUMBER X.X.XXX</blockquote> <h3><u>DATA SET 2</u></h3> <h4>DATA Set 3</h4> <table border="1"> <tr><th>TableHeader1</th><th>TTableHeader2</th><th>TableHeader3</th><th>TableHeader4</th><th>TableHeader5</th><th>TableHeader6</th></tr> <tr align="CENTER"><td>1</td><td>6.4</td><td>StringData</td><td>No</td><td></td><td></td></tr> </table> <br /> </body> </html>
元素在浏览器控件的 DocumentCompleted 事件处理程序中工作正常(double-click 它生成事件处理程序):
Public Class Form1 Public Sub New() ' This call is required by the designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call. wbrowser.Visible = False wbrowser.Navigate("C:\temp\foo.html") End Sub Private Sub wbrowser_DocumentCompleted(sender As Object, e As Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles wbrowser.DocumentCompleted Dim doc = wbrowser.Document Dim htmlBody = doc.GetElementsByTagName("BODY")(0) Dim htmlheadings = htmlBody.GetElementsByTagName("H2") Dim header2 = htmlheadings(0).InnerText MsgBox(header2) End Sub End Class