0

大家好,我正在重新制定问题,我得到一个带有 tidhttp 的 html,并以这种方式在 TWebBrowser 中工作这个 html:

(WebBrowser.Document as IHTMLDocument2).body.innerHTML := xHtml;
ovTable := WBT.OleObject.Document.all.tags('TABLE').item(1);

其中 ovTable 是 OleVariant;

我想在不必使用 TWebBrowser 的情况下做同样的事情,因为它在创建时会消耗大量内存,我正在尝试这个:

  Idoc := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
  try
    IDoc.designMode := 'on';
    while IDoc.readyState <> 'complete' do
      Application.ProcessMessages;
    v := VarArrayCreate([0, 0], VarVariant);
    v[0] := xHtml;
    IDoc.Write(PSafeArray(System.TVarData(v).VArray));
    IDoc.designMode := 'off';
  finally
    IDoc := nil;
  end;

现在,如何使用 IDoc 从表中获取数据?

ovTable := Idoc.??

谢谢!

4

2 回答 2

1

现在,如何使用 IDoc 从表中获取数据?

IDoc是一个IHTMLDocument2接口,和WebBrowser.Document(它只是被包裹在一个 中OleVariant)一样,所以你可以使用类似的搜索代码。您只需要考虑到您的方法是在编译时通过静态接口类型IDoc使用早期绑定TWebBrowser,而您的方法是在运行时使用后期绑定:OleVariant

Idoc := CreateComObject(Class_HTMLDocument) as IHTMLDocument2;
try
  IDoc.designMode := 'on';
  while IDoc.readyState <> 'complete' do
    Application.ProcessMessages;
  v := VarArrayCreate([0, 0], varVariant);
  v[0] := xHtml;
  IDoc.Write(PSafeArray(System.TVarData(v).VArray));
  IDoc.designMode := 'off';
  ovTable := (IDoc.all.tags('TABLE') as IHTMLElementCollection).item(1, 0) as IHTMLTable; // <-- here
finally
  IDoc := nil;
end;
于 2015-06-16T20:24:51.593 回答
0

工作:

ovTable := (iDoc.all.tags('TABLE') as IHTMLElementCollection).item(1, 0);
于 2015-06-16T20:22:42.580 回答