以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  以下代码Foxtable中有替代方法吗?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=78456)

--  作者:jspta
--  发布时间:2015/12/9 15:10:00
--  以下代码Foxtable中有替代方法吗?
这个是VBA中借QueryTable功能进行查询,Foxtable中有没有类似的方法?
该功能主要是访问网站时,网站返回一个csv文件,我需要自动下载该文件,读取内容或者保存。

Sub test()
Dim myQuery As QueryTable
Dim sht_Data As Worksheet, sht_URL As Worksheet, wb As Workbook
Dim rng As Range
Set sht_URL = ThisWorkbook.Worksheets("Sheet1") \' 定义网址列表所在工作表
Set wb = Workbooks.Add  \' 新建临时工作簿
Set sht_Data = wb.Worksheets(1) \' 定义数据工作表
sht_Data.Activate      \' 显示数据工作表
   
    \' 添加一个外部查询定义
Set myQuery = ActiveSheet.QueryTables _
    .Add(Connection:="URL;" & sht_URL.[A1], _
    Destination:=sht_Data.[A1])
myQuery.BackgroundQuery = False \' 禁止后台更新查询
Application.DisplayAlerts = False   \' 关闭提示窗口,防止保存文件时要求覆盖确认搜索
With sht_URL
    For Each rng In .Range(.Range("A1"), .Range("A65536").End(xlUp))    \' 遍历所有网址
        If UCase(Left(rng, 7)) = "HTTP://" Then \' 仅处理网址数据
            sht_Data.Cells.ClearContents    \' 清除原有数据
            myQuery.C & rng   \' 定义新的外部数据源
            myQuery.Refresh \' 更新获取数据
            
            \' 保存为CSV格式的文件
            sht_Data.SaveAs Filename:=Trim(Mid(rng, InStr(rng, "s=") + 2, 99)) & ".xls", FileFormat:=xlExcel8
         
        End If
    Next rng
End With
wb.Close savechanges:=False \' 关闭临时工作簿
Application.DisplayAlerts = True    \' 恢复提示窗口
End Sub

--  作者:大红袍
--  发布时间:2015/12/9 15:22:00
--  

汗,你直接用webbrowser读取网页,或者用get、post请求,都行。


--  作者:jspta
--  发布时间:2015/12/9 15:40:00
--  
用get、post请求,都行。这个要怎么做?

代码中的这部分挺方便的,Foxtable中能否实现类似功能
sht_Data.Cells.ClearContents    \' 清除原有数据
            myQuery.C & rng   \' 定义新的外部数据源
            myQuery.Refresh
这样我就能够避免下载文件后打开了,我只需要读取文件内容,不需要保存文件。


--  作者:大红袍
--  发布时间:2015/12/9 15:42:00
--  

要下载什么啊?网址啊,你要做什么功能啊?


--  作者:jspta
--  发布时间:2015/12/9 15:47:00
--  
http://table.finance.yahoo.com/table.csv?s=000001.sz 
下载这个网址上数据导入数据库。

--  作者:大红袍
--  发布时间:2015/12/9 16:01:00
--  

呃,直接下载不行?

 

Network.DownloadFile("http://table.finance.yahoo.com/table.csv?s=000001.sz", "d:\\temp.csv","" ,"" ,True, 100000, True)

 

直接读取也可以啊

 

Dim rqst As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("http://table.finance.yahoo.com/table.csv?s=000001.sz")
Dim rsps As System.Net.HttpWebResponse = rqst.GetResponse
Dim stm As System.IO.Stream = rsps.GetResponseStream()
Dim reader As New System.IO.StreamReader(stm)
Dim str As String
Do
    str = reader.ReadLine
    output.show(str)
Loop While str > Nothing
stm.Dispose()
reader.close

 

 


--  作者:jspta
--  发布时间:2015/12/9 16:27:00
--  
晕死,原来测试怎么没办法读取,谢了。