【求助】請問匯入文字檔的技巧



贊助商連結


cinta3344
2003-04-28, 11:26 AM
小弟目前有將cobol資料庫(其實就是一堆文字檔)轉出
進RDBMS的需求,因此想借助EXCEL將欄位裁切出來
但目前匯入文字檔僅有「固定寬度」這個方法較能準確
將欄位切割(因為以字元辨識切割常會失敗,如果用COBOL
將分隔字元加在文字檔也是可以,但非常麻煩,需每個檔案
幫他寫一支轉文字檔,因此該方法不考慮)。
說了這麼說,其實我想做的就是寫一支可動態輸入欄寬的巨集
例如我在一個inputbox輸入"2,3,12,1......."或在儲存格a1~aX
輸入相關欄位寬度便可自動轉入,否則看著下圖一個一個切,小弟
可能會得亂視:eye:。
不知各位可有什麼好方法呢?小弟先行謝過了。

贊助商連結


leonchou
2003-05-04, 06:49 PM
cinta兄, 這樣看起來...
難道不是空白分隔嗎? 是的話
勾選"連續分隔字元視為單一分隔.."

cinta3344
2003-05-06, 12:26 PM
最初由 Leon Chou 發表
cinta兄, 這樣看起來...
難道不是空白分隔嗎? 是的話
勾選"連續分隔字元視為單一分隔.."

抱歉,我沒有把問題描述清楚∼
因為是早期的系統,所以連一個空格都捨不得浪費
所以由COBOL的公用程式匯出時不見得會有空格把兩
個欄位分開,如果要加入空格,還是要另外寫程式
可是一樣都是寫程式,用VBA會來的快很多
我曾觀察過匯入的巨集錄製如下:
array(x,x),array(x,x)

array(x,y,z,a,b,c......)
我目前暫時的solution是將欲分割的寬度寫在cell上
在逐一填入array(依欄位的多寡要常修改巨集),如:
array(cell(1,1),cell(2,1).....)
但LEO兄與沙拉油兄(應該都比我年輕吧;) )
屢屢有令人驚豔的解法,因此想到PCZONE來
請問各位高見,如有解法,還請不吝賜教,先行謝過囉!

leonchou
2003-05-07, 12:13 AM
這樣.. 你看合不合用吧--

Option Base 1
Public Sub import_text()
Dim Array1() As Variant
txtfile = "C:\temp\testdata.txt"
i = 1
While Cells(i, 1) <> ""
ReDim Preserve Array1(i)
Array1(i) = Array(Cells(i, 1), 1)
i = i + 1
Wend
Workbooks.OpenText txtfile, DataType:=xlFixedWidth, FieldInfo:=Array1
End Sub

請將欄寬(正確的說應該是每一欄的起始位置)
輸入在 A 欄, 要從 A1 開始。
注意: 若從第1個字元就要匯入, 則 A1 要輸入 0.
再改一下 txtfile 變數的值, 就可以Run了。

容我稍稍偷懶一下--
程式裡沒有對 A 欄資料做任何檢查,
你自個兒留意唄 ;)

leonchou
2003-05-07, 12:26 AM
不過.. 有點好奇的是,
你怎知道每次每欄切割的位置..
還得每次輸入...
那麼多欄, 難道一個一個算?

cinta3344
2003-05-12, 01:02 PM
最初由 Leon Chou 發表
不過.. 有點好奇的是,
你怎知道每次每欄切割的位置..
還得每次輸入...
那麼多欄, 難道一個一個算?

謝謝,正合所用呢。
比我土法所練出來的鋼好多了...;)

至於欄寬有FD表可以看啊
只要請工讀生一一輸入完
insert進TABLE就OK了....