Board logo

標題: [發問] 如何將TEXT轉成自訂的EXCEL檔 [打印本頁]

作者: wsx24680    時間: 2010-6-15 16:06     標題: 如何將TEXT轉成自訂的EXCEL檔

請問各位前輩:
如下列附件,如何將"文字文件.txt"轉成"文件.xls"中的樣式?

[attach]1286[/attach]

還請各位前輩指教。
作者: GBKEE    時間: 2010-6-15 16:34

回復 1# wsx24680
[attach]1287[/attach]
作者: wsx24680    時間: 2010-6-15 18:35

回復 2# GBKEE


GBKEE前輩:
不好意思…可能是我表達上有問題,我的意思是能夠變成像"文件.xls"中的排列方式,
並不只是單純的用excel來打開txt檔;而是打開txt檔後能夠將裡面的資料排列成"文件.xls"中的樣子,
所以附件中"文件.xls"是算是答案,是將txt檔轉換後的結果。

感謝GBKEE前輩指點,可惜跟我想要達成的結果不一樣。
作者: GBKEE    時間: 2010-6-15 21:04

回復 3# wsx24680
  1. Sub Ex()
  2.     Dim MyString, C%, R%, Ar
  3.     C = 2: R = 1
  4.     Open "D:\TEST\文字文件.TXT" For Input As #1    ' 開啟輸入檔案。
  5.   Do While Not EOF(1)    ' 執行迴圈直到檔尾為止。
  6.         Input #1, MyString ',將資料讀入MyNumber變數中。
  7.             If InStr(MyString, "=") Then
  8.                 Ar = Split(MyString, Chr(9))
  9.                 Cells(R, C) = Ar(0)
  10.                 Cells(R, C + 1) = Split(Ar(1), "=")(0)
  11.                 Cells(R, C + 2) = "="
  12.                 Cells(R, C + 3) = Split(Ar(1), "=")(1)
  13.                 R = R + 1
  14.                 If R >= 20 Then R = 1: C = C + 6
  15.             End If
  16.     Loop
  17.     Close #1    ' 關閉檔案。
  18. End Sub
複製代碼

作者: q88007    時間: 2010-6-16 07:09

請問一下Cells(R, C) = Ar(0)  是什麼意思,因為我依GBKEE前輩所告知之巨集進行測試後,
出現階段執行錯誤'1004',???
作者: GBKEE    時間: 2010-6-16 07:17

回復 5# q88007


    程式碼有修改嗎?  如有請附上
作者: wsx24680    時間: 2010-6-17 14:41

回復 4# GBKEE

GBKEE版大:
十分抱歉,小弟剛剛才注意到附錯檔案了,對不起,
之前附上的是有修改過的內容,剛剛測試時才發現,
原始的TEXT中的內容如附件。
[attach]1309[/attach]

還有幾點想請教一下,
1.檔路徑可以用選的嗎?像開啟舊檔那樣…
2.If R >= 20 Then R = 1: C = C + 6,如果資料長度不一定,
但用------來判斷的話是改成
If InStr(MyString, "----") Then R = 1: C = C + 6,這樣嗎?

另外剛剛小弟有想試著修改程式,但不知為何抓不到"="跟後面的值,
第一次MyString抓到"3"後來"AAA-AA"、"11"、後來就變抓到"22"了跳過了"11"後面的"=10"
不知為何?還請版大解惑?

再次感謝版大的幫忙
作者: Hsieh    時間: 2010-6-17 20:03

本帖最後由 Hsieh 於 2010-6-18 08:26 編輯

回復 7# wsx24680
  1. Sub Ex()
  2. Dim Ar(), Mystr$, a$, s&, k%, fs$
  3. Cells = ""
  4. fs = Application.GetOpenFilename("Text Files (*.txt), *.txt")
  5. If fs = "False" Then MsgBox "請選擇文字檔": Exit Sub
  6. k = 2
  7. Open fs For Input As #1
  8. Do While Not EOF(1)
  9.     Line Input #1, Mystr
  10.     If Mystr <> "" And Not IsDate(Mystr) Then
  11.       If InStr(Mystr, "=") = 0 And InStr(Mystr, "---") = 0 Then
  12.       a = Mystr
  13.       ElseIf InStr(Mystr, "=") > 0 Then
  14.       ReDim Preserve Ar(s)
  15.       Ar(s) = Array(a, Split(Mystr, "=")(0), "=", Split(Mystr, "=")(1))
  16.       s = s + 1
  17.       ElseIf InStr(Mystr, "---") > 0 Then
  18.       Cells(1, k).Resize(s, 4).Value = Application.Transpose(Application.Transpose(Ar))
  19.       k = k + 6: s = 0: Erase Ar
  20.       End If
  21.     End If
  22. Loop
  23. If s > 0 Then Cells(1, k).Resize(s, 4).Value = Application.Transpose(Application.Transpose(Ar))
  24. Close #1
  25. End Sub
複製代碼

作者: GBKEE    時間: 2010-6-18 07:04

本帖最後由 GBKEE 於 2010-6-18 07:22 編輯

回復 8# Hsieh
Hsieh 板主 你宣告fs$ 為字串型態  
If fs = False Then MsgBox "請選擇文字檔": Exit  Sub  
會產生 [型態不符] 的錯誤 修正如程式碼
  1. Dim Ar(), Mystr$, a$, s&, k%, fs$
  2. Cells = ""
  3. fs = Application.GetOpenFilename("Text Files (*.txt), *.txt")
  4. If fs = "False" Then MsgBox "請選擇文字檔": Exit Sub
複製代碼
回復 7# wsx24680
請參考另一個開啟檔案的寫法
  1. Sub Ex()
  2.     Dim Ar(), Mystr$, a$, s&, k%, fs$
  3.     With Application.FileDialog(msoFileDialogOpen)
  4.         .Title = "尋找文字檔"
  5.         .AllowMultiSelect = False   '只準許選取一個檔案
  6.         .ButtonName = "開啟Txt檔"
  7.         .InitialFileName = "d:\test\*.txt"  '設定檔案所在的資料夾 及副檔名
  8.         If .Show = False Then
  9.             MsgBox "請選擇文字檔": Exit Sub
  10.         Else
  11.             fs = .SelectedItems(1)
  12.         End If
  13. End With
  14. k = 2
  15. Open fs For Input As #1
  16. Do While Not EOF(1)
  17. '
  18. '
  19. Loop
  20. If s > 0 Then Cells(1, k).Resize(s, 4).Value = Application.Transpose(Application.Transpose(Ar))
  21. Close #1
  22. End Sub
複製代碼

作者: wsx24680    時間: 2010-6-18 09:48

回復 9# GBKEE


   
感謝GBKEE版大及Hsieh版大的幫忙,
目前程式執行沒有問題,結果也正確。
內容我還要研究一下,
若有發現其它問題,再來向各位請教。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)