Board logo

標題: [發問] 匯入外部資料的問題(資料被用標註的) [打印本頁]

作者: yanto913    時間: 2010-10-9 18:17     標題: 匯入外部資料的問題(資料被用標註的)

本帖最後由 yanto913 於 2010-10-9 18:25 編輯

我想要匯入一個外部資料然後作分析,之前我都是用EXCEL上面功能表匯入網頁資料,可是現在遇到一個問題
在EXCEL一般區有先進說沒辦法處理只能用VBA,這是我設計的一個範例(比較沒有網頁侵權的問題),
請先進下載回去開啟
https://sites.google.com/site/yanto913/data/Question.htm
指著學號"23"會出現各科成績
我想要匯入的資料就是各科成績
可是用EXCEL只能匯入可見到的資料
這個問題不知道該如何解決
作者: GBKEE    時間: 2010-10-10 07:17

回復 1# yanto913
此網址 https://sites.google.com/site/yanto913/data/Question.htm 須下載到你的電腦中存為 Question.htm
下列程序會將Question.htm 的資料下載到活頁簿作用中的工作表
  1. Sub Ex()
  2. Dim ie As New InternetExplorer, Rng As Range, i, ii, s
  3. Set Rng = ActiveSheet.[A1]
  4. With ie
  5. .Navigate ("D:\TEST\Question.htm")  '下載到你的電腦中存為 Question.htm
  6. For i = 0 To .Document.all.Length - 1
  7. If .Document.all(i).tagName = "TD" Then
  8. Rng.Value = .Document.all(i).innerText
  9. If .Document.all(i).innerText = "評語" Then
  10. Set Rng = ActiveSheet.[A2]
  11. Else
  12. Set Rng = Rng.Offset(, 1)
  13. End If
  14. End If
  15. If .Document.all(i).tagName = "A" Then
  16. If .Document.all(i).Title Like "*國文*" Then
  17. s = Split(.Document.all(i).Title, Chr(10))
  18. For ii = 0 To UBound(s) - 1
  19. ActiveSheet.Cells(1, 5 + ii).Resize(2) = Application.Transpose(Split(s(ii), ":"))
  20. Next
  21. End If
  22. End If
  23. Next
  24. .Quit
  25. End With
  26. End Sub
複製代碼

作者: yanto913    時間: 2010-10-10 13:33

謝謝GBKEE 版主
註解一下,要去工具>設定引用項目> 把 Microsoft Internet Controls及Microsoft HTML Object Library打勾
不過還是要下載下來喔,因為我那個網頁是舉例的,實際上要分析的網頁變更速率還蠻快的
總不能要看的時候還要下載一次,因為我想能直接載入然後再加上迴圈達到即時更新的目的
作者: GBKEE    時間: 2010-10-10 16:59

回復 3# yanto913
唉沒辦法! 功力不夠啊!,從網頁抓下來的全是一堆亂碼,只有從網頁抓下來存檔後 才有辦法不是亂碼.
此程式只適用 此網頁的.並不是所有網頁都適用 特殊的程序都要量身製作的.
作者: yanto913    時間: 2010-10-11 01:12

本帖最後由 yanto913 於 2010-10-11 01:14 編輯

抱歉造成版主的困擾!因為我做的那個網頁是放在檔案夾,
所以點的時候會變成下載,而不是開啟。
我換用網頁的方式,
https://sites.google.com/site/yanto913/home/page
可是我不知道為什麼傳到google網頁上它後面沒有檔案加副檔名page.html
然後我去找能放網頁的免費空間都找不太到,大部分都要付費的
所以先傳到我這個網頁空間,然後再用版主的程式測試
把("D:\TEST\Question.htm")改成("https://sites.google.com/site/yanto913/home/page")
可是會出現系統錯誤,在隨便找個奇摩新聞測試(後面有HTML名稱)的一樣也不行
然後我在GOOGLE找到兩篇文章,
請各位先進在GOOGLE貼上[摘取網頁資料 - getElementsByName]收尋後第一個網站就是了(怕被說盜連)

另外一篇是舊麻辣上面的(共三頁)
http://gb.twbts.com/index.php?PHPSESSID=arhg8hul1cucn9e1gega2m99j1&topic=11352.0

我試著去改這兩篇的程式可是弄了兩個多小時還是改不成功(功力不夠的是我啊!!)
所貼上來請各位先進幫忙,謝謝!
作者: GBKEE    時間: 2010-10-11 09:10

回復 5# yanto913
https://sites.google.com/site/yanto913/home/page  可以直接 下載了 可是Ex 程序又要修改
會出現系統錯誤  加上下三列紅色的程式碼  修正
Sub Ex()
Dim ie As New InternetExplorer, Rng As Range, i, ii, s
Set Rng = ActiveSheet.[A1]
With ie
   .Navigate ("https://sites.google.com/site/yanto913/home/page")
    Do While .Busy = True
    Loop
    DoEvents
    Set Rng = ActiveSheet.[A1]
    For i = 0 To .Document.all.Length - 1
        If .Document.all(i).tagName = "TD" And Len(.Document.all(i).innerText) > 0 And Len(.Document.all(i).innerText) <= 20 Then
            Rng.Value = .Document.all(i).innerText
            If .Document.all(i).innerText = "評語" Then
                Set Rng = ActiveSheet.[A2]
            Else
                Set Rng = Rng.Offset(, 1)
            End If
        End If
        If .Document.all(i).tagName = "A" Then
            If .Document.all(i).Title Like "*國文*" Then
                s = Split(.Document.all(i).Title, " ")
                For ii = 0 To UBound(s)
                    ActiveSheet.Cells(1, 5 + ii).Resize(2) = Application.Transpose(Split(s(ii), ":"))
                Next
            End If
        End If
    Next
    .Quit
End With
End Sub
作者: yanto913    時間: 2010-10-11 23:10

謝謝版主,可以用了!!
但偶而會出現Automation 錯誤(如下圖)

作者: yanto913    時間: 2010-11-11 12:12

謝謝版主的程式
之前比較忙沒仔細研讀其含意(只看懂一點點)
目前想把程式應用到工作中發現有其問題產生
https://sites.google.com/site/yanto913/home/page
是能否能只抓四年乙班(特)和四年丙班(特)內的資料(我記得office 2000匯入外部資料
可以規定要從第幾個Block開始擷取,此範例網頁是第二和第三Block),
或者能否利用 註:導師王小明返回置頂↑當作一個擷取的起始以及終了,
之前版主的程式應該是收尋從第幾格開始,但是會遇到四年甲班格數變動有可能有學生轉出或轉入導致會變成五列或七列,
以及一般班級表格內容都是8行,但是特殊班級表格會多一格關心度也就是9行,
另外我的註解其實是往下的不知道為什麼傳到我的網頁上就被刪除了,
所以另外上傳我原本的網頁檔給各位先進,希望能夠幫我解決這個惱人的問題




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)