iT邦幫忙

0

如何使用ExcelVBA達到自動連結FTP抓取最新的文字檔匯入

我知道Excel可以連結外部程式,如cmd.exe等
但是如何以dos 指令連進ftp之後判定最新的檔案後下載到指定資料夾呢?
我的盲點是server為unix系統,其檔名不是以日期來命名
如何讀取檔案的日期屬性判定為最新後下載呢?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
4
a4615175
iT邦新手 4 級 ‧ 2011-12-03 07:39:01
最佳解答

我的作法~
1.下載安裝 NetDrive (http://www.netdrive.net/download.html)
2.連線將FTP對應成磁碟機(如H:)
3.點選H磁碟機時,就會對應FTP的目錄.
4.再來就要看你怎麼做了.

xpresso iT邦新手 5 級 ‧ 2011-12-27 00:36:49 檢舉

可否讓EXCEL判斷某檔案為最新檔?

4
liurambo0911
iT邦高手 1 級 ‧ 2011-12-02 17:12:58

FTP似乎不像DOS可以做到進階搜尋功能
建議從UNIX端下手 將需被讀取的檔案固定放到某目錄下
然後FTP連上後 用LS倒出清單

6
ted99tw
iT邦高手 1 級 ‧ 2011-12-04 17:45:54

如何讀取檔案的日期屬性判定為最新後下載呢?

VBA對字串處理能力還不賴,建議VBA程式流程如下:

(1)執行dos batch file 1(先連FTP,執行 “ls -l”,將輸出導出至文字檔,例如"filelist.txt")
(2)在VBA內,做一副程式,對此文字檔"filelist.txt"的日期逐行比對,找出最新檔檔名(您也許需要在excel中某處,紀錄此歴史日期,以便未來比對)
(3)執行dos batch file 2,直接抓取該最新檔

以上希望能有幫助 ~

我自己是用手動方式以類似此方法
只是如果目錄下很多檔案時 FTP會抓很久
一般FTP設定某一段時間沒有回應就會被斷線
要做到完全自動化 似乎是從檔案源頭會最好

ted99tw iT邦高手 1 級 ‧ 2011-12-05 20:20:32 檢舉

通常會拉進EXCEL的檔案,命名會有一定規則,例如:
“yourdata_yyyy_mm_dd.xls”,就算不以日期當流水號,至少字尾是XLS,所以範圍也許可縮小至接受範圍內。

針對斷線問題,也許可在VBA內加一判斷,例如:“如果連線10秒鐘內成功產生filelist.txt,則進行後續字串處理,否則再連一次。”

邏輯上或許麻煩些,但如果樓主的主要目的是“自動化”,那在程式上施力,也許是條路子~

2
hart1458
iT邦新手 3 級 ‧ 2011-12-09 13:48:45

也許把放檔的目錄整個抓回來(UNIX 端設定該目錄超過幾天的檔案砍掉,不會抓太多檔案的),擋案建立日期排序可能會快些

xpresso iT邦新手 5 級 ‧ 2011-12-27 00:35:45 檢舉

請問要怎麼設定uNIX端某目錄超過幾天就砍檔

slime iT邦大師 1 級 ‧ 2011-12-27 01:43:09 檢舉

要先確定 unix 端有提供 shell (類似 Windows 的"命令提示字元")的權限.
如果有該權限, 可以下指令:

<pre class="c" name="code">find "目錄位置" ! -mtime "時間" -exec "執行刪除動作"

(找出最近多久內沒有異動過的檔案, 就刪除, 這語法要看主機上是否提供.)

xpresso iT邦新手 5 級 ‧ 2012-01-07 00:41:46 檢舉

請問可以用telnet的ftp命令進入unix某目錄後,讀取資料後用指令判定最新檔是哪個後,將該檔下載...

2
slime
iT邦大師 1 級 ‧ 2011-12-27 01:49:46

直接先問: 可以裝其他的程式嗎?
有程式: wget 等軟體可以直接下載指定的目錄, 加上參數就會自動把新檔案都下載回來了.

http://redhat.ecenter.idv.tw/bbs/showthread.php?threadid=39222

我要發表回答

立即登入回答