- 帖子
- 2035
- 主題
- 24
- 精華
- 0
- 積分
- 2031
- 點名
- 0
- 作業系統
- Win7
- 軟體版本
- Office2010
- 閱讀權限
- 100
- 性別
- 男
- 註冊時間
- 2012-3-22
- 最後登錄
- 2024-2-1
|
99#
發表於 2016-9-12 18:09
| 只看該作者
回復 98# zyzzyva
非常感謝你的詳細說明。
手頭上有一現成的 Excel 範例,我將其日期訂為 105年09月08日,
應用 IE 物件去抓取該日的 "信用交易統計"。我非常希望能藉由此範例
使用 Python 來達成,一方面增長智慧、另一方面得以增進 Python 的學習,
及進一步之了解與應用。先行謝謝你囉!- Sub 信用交易統計()
- Dim i As Integer, j As Integer
- Dim ie As Object, E As Object, Sh As Worksheet
-
- Set ie = CreateObject("InternetExplorer.Application")
-
- With ie
- .Visible = True
- .navigate "http://www.twse.com.tw/ch/trading/exchange/MI_MARGN/MI_MARGN.php"
-
- Do While .Busy Or .readyState <> 4: DoEvents: Loop
-
- .document.getElementById("date-field").Value = Format("2016/9/8", "EE/MM/DD") ' 填入
-
- .document.all("selectType").SelectedIndex = 1 ' 1 全部; 7 水泥工業; 8 食品工業
- .document.all("query-button").Click
-
- Do While .Busy Or .readyState <> 4: DoEvents: Loop
-
- ' Set Sh = ActiveSheet
- Set Sh = Sheets("信用交易統計") ' 工作表單名稱
- Sh.UsedRange.Clear
- ' Sh.[A:A].NumberFormatLocal = "G/通用格式" ' 解決 "0050" -> "50" (不理想)
- ' Sh.[A:A].NumberFormatLocal = "@" ' 解決 "0050" -> "50" (左上角會有三角形)
-
- i = 0
- With .document
- For Each E In .all.tags("table")(3).Rows
- i = i + 1 '
- For j = 0 To E.Cells.Length - 1
- If j = 0 And Left(E.Cells(j).innerText, 1) = "0" Then ' 改以 .Formula 的方式處理
- Sh.Cells(i, j + 1).Formula = "=""" & E.Cells(j).innerText & """"
- Else
- Sh.Cells(i, j + 1) = E.Cells(j).innerText
- End If
- Next
- Next
-
- i = i + 1 ' 間隔出一空白行,易於上下區隔辨識
- For Each E In .all.tags("table")(4).Rows
- i = i + 1 '
- For j = 0 To E.Cells.Length - 1
- If j = 0 And Left(E.Cells(j).innerText, 1) = "0" Then
- Sh.Cells(i, j + 1).Formula = "=""" & E.Cells(j).innerText & """"
- Else
- Sh.Cells(i, j + 1) = E.Cells(j).innerText
- End If
- Next
- Next
- End With
-
- .Quit
- With Sh
- .[A:A].HorizontalAlignment = xlLeft ' A 欄值全數靠左
- .Select
- End With
- End With
- End Sub
複製代碼
信用交易統計.rar (51.88 KB)
|
|