返回列表 上一主題 發帖

請問這個網頁如何用WEB查詢輸入excel

請問這個網頁如何用WEB查詢輸入excel

http://portal.sw.nat.gov.tw/PPL/pages/integration/layout.jsp?appId=APGQAGB315

出口報單號碼:BE  02XE580024

希望能將查詢結果,匯入EXCEL中,
小弟已經做了一個iqy,如下所示,但還是無法顯示,請各位先進幫忙,感激不盡!
----------------------------------------------------------------------------------------------
WEB
1
http://portal.sw.nat.gov.tw/PPL/pages/integration/layout.jsp?appId=APGQAGB315declNo=BE  02XE580024

Selection=1
Formatting=None
----------------------------------------------------------------------------------------------
Hi~

呵呵,謝謝您的回覆,被說的好像是不懂爬文的小白~~
之前小弟寫這種WEB匯入也不下10個(或許那些網頁比較適合自己粗淺的功力),
在發文之前也爬過文,實在找不到解決的方法才求救大家的。

不曉得高手如您是否有更具建議性的回覆,在此多謝。
Hi~

TOP

本帖最後由 c_c_lai 於 2013-11-16 15:15 編輯
http://portal.sw.nat.gov.tw/PPL/pages/integration/layout.jsp?appId=APGQAGB315

出口報單號碼:BE  0 ...
jewayy 發表於 2013-11-15 22:02

出口報單號碼:BE  02XE580024 試試成 BE%2002XE580024
  1. http://portal.sw.nat.gov.tw/PPL/pages/integration/layout.jsp?appId=APGQAGB315declNo=BE%2002XE580024
複製代碼

TOP

謝謝您的回覆,不過好像還是沒有反應。

小弟再描述清楚一下,出口報單號碼"BE  02XE580024",BE與02XE中間是必須有兩個空格才能查詢成功。
畫面查詢結果如下:


再麻煩各位給予支援,謝謝。
Hi~

TOP

本帖最後由 c_c_lai 於 2013-11-16 17:36 編輯
謝謝您的回覆,不過好像還是沒有反應。

小弟再描述清楚一下,出口報單號碼"BE  02XE580024",BE與02XE中 ...
jewayy 發表於 2013-11-16 17:28

那就改成    BE%20%2002XE580024
  1. http://portal.sw.nat.gov.tw/PPL/pages/integration/layout.jsp?appId=APGQAGB315declNo=BE%20%2002XE580024
複製代碼

TOP

回復 5# jewayy
我試過直接給網址似乎網站並不會正常顯示資料,
另外從輸入資料後按查詢按紐時,
上方的網址也並沒有因而變動.

或許你應該改成用程式在 出口報單號碼: 旁的輸入框輸入資料,
然後模擬按下 查詢 按紐較易成功查詢到資料.

不過因為我也不太懂 Excel VBA 讀取網頁相關方式,
這就需要其他人來解答了.

TOP

http://portal.sw.nat.gov.tw/APGQ/GB315!query?declNo=BE++02XE580024

內容是json格式
{"msg":"[執行成功]","transTypeCd":"海","totGrossWeight":49376,"destCd":"VNCLI","totPackQty":"32","declType":"G5","relDate":"102\/09\/17","totPackQtyUnit":"PLT","declNo":"BE  02XE580024","vslSign":"BKHC","examRelNote":"Y","voyageFlightNo":"1084-186S","marketMftNote":"Y","status":"ok","vslName":"UNI-PROSPER                        "}




可能要下xmlhttp下載
可果要用excel   web查詢,我試過會亂碼,可能還要會轉碼

就要用ie法找到tag按下去,從裏面找table

提供兩個網頁參考:
http://club.excelhome.net/forum.php?mod=viewthread&action=printable&tid=939881

http://blog.csdn.net/a814153a/article/details/9071577

TOP

回復 4# jewayy

  1. Option Explicit
  2. Dim IE As Object
  3. Sub 出口報單放行資料查詢()
  4.     Dim 出口報單號碼 As String, n As Object
  5.         出口報單號碼 = InputBox("出口報單號碼", "出口報單放行資料查詢", "BE  02XE580024")
  6.         If 出口報單號碼 = "" Then Exit Sub
  7.         With CreateObject("InternetExplorer.Application")
  8.            .Visible = True
  9.             .Navigate "http://portal.sw.nat.gov.tw/APGQ/GB315?request_locale=zh_TW&declNo=" & 出口報單號碼
  10.             Do While .Busy = True
  11.         DoEvents
  12.         Loop
  13.         For Each n In .document.getelementsbytagname("INPUT")
  14.            If n.Value = "查詢" Then
  15.                 n.Click                        '網頁按下 查詢
  16.                 Exit For
  17.            End If
  18.         Next
  19.         Application.Wait (Time + TimeValue("0:00:03"))  '依網頁下載速度調整等待秒數
  20.         Set IE = .document
  21.         查詢結果
  22.         .Quit
  23.     End With
  24. End Sub
  25. Private Sub 查詢結果()
  26.     Dim Ar(1 To 7), SH As Worksheet
  27.     '***** 網頁的原始檔案的本文
  28.     '<tbody><tr><td colspan="4" class="resultHeader">查詢結果</td></tr>
  29.     '<td class="resultHeader">海空運別</td><td class="result" id="transTypeCd">海</td>
  30.     '<td class="resultHeader" width="25%">出口報單號碼</td><td width="25%" class="result" id="declNo">BE  02XE580024</td>
  31.     '<td class="resultHeader" width="25%">報單類別</td><td width="25%" class="result" id="declType">G5</td>
  32.     '<td class="resultHeader" width="25%">總件數</td><td width="25%" class="result" id="totPackQty">32</td>
  33.     '<td class="resultHeader" width="25%">目的國家代碼</td><td width="25%" class="result" id="destCd">VNCLI</td>
  34.     '<td class="resultHeader" width="25%">總件數單位</td><td width="25%" class="result" id="totPackQtyUnit">PLT</td>
  35.     '<td class="resultHeader" width="25%">報單放行註記</td><td width="25%" class="result" id="examRelNote">Y</td>
  36.     '<td class="resultHeader" width="25%">總毛重</td><td width="25%" class="result" id="totGrossWeight">49376</td>
  37.     '<td class="resultHeader" width="25%">放行日期</td><td width="25%" class="result" id="relDate">102/09/17</td>
  38.     '<td class="resultHeader" width="25%">船舶名稱(海)/航機名稱(空)</td><td width="25%" class="result" id="vslName">UNI-PROSPER                        </td>
  39.     '<td class="resultHeader" width="25%">銷艙註記</td><td width="25%" class="result" id="marketMftNote">Y</td>
  40.     '<td class="resultHeader" width="25%">船舶航次(海)/航機班次(空)</td><td width="25%" class="result" id="voyageFlightNo">1084-186S</td>
  41.     '<td class="resultHeader" width="25%">船舶呼號(海)</td><td width="25%" class="result" id="vslSign">BKHC</td>
  42.     '<input id="statusMsg" type="text" class="msgText uppercase" readonly="readonly" style="width: 775px; color: red;">
  43.      Set SH = ActiveSheet                                 '指定顯示資料的工作表 'ActiveSheet->作用中的工作表
  44.     If InStr(IE.getElementById("statusMsg").Value, "[執行成功]") = 0 Then
  45.         SH.[b2].Resize(7, 1) = Application.WorksheetFunction.Transpose(Ar)
  46.         SH.[d2].Resize(7, 1) = Application.WorksheetFunction.Transpose(Ar)
  47.         Exit Sub
  48.     End If
  49.     Ar(1) = IE.getElementById("transTypeCd").innertext      '海空運別
  50.     Ar(2) = IE.getElementById("declNo").Value               '出口報單號碼
  51.     Ar(3) = IE.getElementById("totPackQty").innertext       '總件數
  52.     Ar(4) = IE.getElementById("totPackQtyUnit").innertext   '總件數單位
  53.     Ar(5) = IE.getElementById("totGrossWeight").innertext   '總毛重
  54.     Ar(6) = IE.getElementById("vslName").innertext          '船舶名稱 (海) / 航機名稱(空)
  55.     Ar(7) = IE.getElementById("voyageFlightNo").innertext   '船舶航次 (海) / 航機班次(空)
  56.     SH.[b2].Resize(7, 1) = Application.WorksheetFunction.Transpose(Ar)
  57.     Ar(1) = ""
  58.     Ar(2) = IE.getElementById("declType").innertext         '報單類別
  59.     Ar(3) = IE.getElementById("destCd").innertext           '目的國家代碼
  60.     Ar(4) = IE.getElementById("examRelNote").innertext      '報單放行註記
  61.     Ar(5) = IE.getElementById("totGrossWeight").innertext   '放行日期
  62.     Ar(6) = IE.getElementById("marketMftNote").innertext    '銷艙註記
  63.     Ar(7) = IE.getElementById("vslSign").innertext          '船舶呼號 (海)
  64.     SH.[d2].Resize(7, 1) = Application.WorksheetFunction.Transpose(Ar)
  65.     SH.Columns.AutoFit
  66. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 8# GBKEE
  1. Ar(2) = IE.getElementById("declNo").Value                   '出口報單號碼
複製代碼
要改成
  1. Ar(2) = IE.getElementById("declNo").innertext            '出口報單號碼
複製代碼
才不會產生 438的錯誤訊息。
很棒的詮釋!順帶請教一下,如果我要連同每個標題 (如:查詢結果、海空運別、出口報單號碼等)
一併下載,應該要如何處理?
謝謝您!

TOP

本帖最後由 GBKEE 於 2013-11-17 09:06 編輯

回復 9# c_c_lai
EXCEL 2003, IE 8  或許是版本不同  declNo=>tagname("INPUT") 要用 VALUE
IE8   Ar(2) = IE.getElementById("declNo").innertext      '出口報單號碼  會傳回 空字串
要連同每個標題嗎 我@*#@*#@*#

參考7# joey0415  給的網址 http://portal.sw.nat.gov.tw/APGQ/GB315!query?declNo=BE++02XE580024
可捨去8#的程式碼 ,  如在 8# 圖片的工作表,這程式碼就簡便了.
  1. Option Base 1
  2. Sub Ex()
  3.     Dim Ar, AA(), 出口報單號碼 As String, Sh As Worksheet
  4.     出口報單號碼 = InputBox("出口報單號碼", "出口報單放行資料查詢", "BE  02XE580024")
  5.     If 出口報單號碼 = "" Then Exit Sub
  6.     Set Sh = ActiveSheet                                 '指定顯示資料的工作表 'ActiveSheet->作用中的工作表
  7.     With CreateObject("Microsoft.XMLHTTP")
  8.        .Open "GET", "http://portal.sw.nat.gov.tw/APGQ/GB315!query?declNo=" & 出口報單號碼, False
  9.         .send
  10.         Ar = Split(Replace(.responsetext, """", ""), ",")
  11.         AA = Array(1, 8, 4, 7, 2, 14, 11)           'A欗的標題內容 Ar中陣列對應之索引值
  12.         On Error GoTo Er                            '出口報單號碼 不正確會有錯誤:
  13.         For i = 1 To UBound(AA)
  14.             Sh.Cells(1 + i, "B") = Split(Ar(AA(i)), ":")(1)  'B欗
  15.        Next
  16.        AA = Array(5, 3, 10, 6, 12, 9)                 'C欗的標題內容 Ar中陣列對應之索引值
  17.        For i = 1 To UBound(AA)
  18.             Sh.Cells(2 + i, "D") = Split(Ar(AA(i)), ":")(1)  'D欗
  19.             If AA(i) = 6 Then Cells(2 + i, "D") = Replace(Cells(2 + i, "D"), "\/", "/")
  20.        Next
  21.     End With
  22.     Exit Sub
  23. Er:
  24.     Sh.[b2].Resize(7, 1) = ""
  25.     Sh.[d2].Resize(7, 1) = ""
  26. End Sub
  27. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 做好事不能少我一人,做壞事不能多我一人。
返回列表 上一主題