Board logo

主題: [求助] [求助]word 轉 Execl [打印本頁]

發表人: bearchu    時間: 2006-3-28 05:43 AM     主題: [求助]word 轉 Execl

各位大大...小弟有個問題向各位請教...
WORD文件內容如下:<.. 每列都是34個字
0000011234567890123456000000050100000076239137         
0000023698521478963258000000100205844444466354
0000031478523698745632000000150254552155565644
..
..
..
想要轉成execl為
_______________________________________________________
  |    A    |          B              |      C     | D |         E           |   F
_______________________________________________________
1|000001|1234567890123456|00000005|01|00000076239137|
_______________________________________________________
2|000002|3698521478963258|00000010|02|05844444466354|
_______________________________________________________
3|000003|1478523698745632|00000015|02|54552155565644|
_______________________________________________________
..
..
即是
將該列第1個字到6個字放入EXECL之A內
將該列第7個字到22個字放入EXECL之B內
將該列第23個字到30個字放入EXECL之C內
將該列第31個字到32個字放入EXECL之D內
將該列第33個字以後放入EXECL之E內

請問如何完成
因為資料上千筆........
發表人: shiuh    時間: 2006-3-28 09:02 AM

這個其實並不難喔 聽我說來

你先把你這些Word檔 做另存的動作,選到下方的"純文字",把編碼改成MS-DOS之後就按下確定

然後關掉Word 開啟你的execl 做開啟所有的檔案類型, 把剛剛那個文字檔叫進去 ,在匯入精靈第一步的地方選(固定寬度)然後下一步
步驟二的地方 這個第方就開始點你要切開的地方 在這個第方去點那個刻度的地方,就可以把資料用這種方法切開 ,完成後按下一步
看一下步驟三是不是你要的結果 , 然後選取每一個間格(它會反黑),去右上角的地方把它改成是文字,就可以按下"完成"

[shiuh 在 2006-3-28 10:56 AM 作了最後編輯]
發表人: dlc007    時間: 2006-3-28 10:01 AM

就像上面的大大講的, 使用excel, 開啟文字檔, 選擇固定寬度即可,
資料格式請全部選成本文, 以免格式亂掉

[dlc007 在 2006-3-28 10:05 AM 作了最後編輯]
發表人: bearchu    時間: 2006-3-28 10:13 PM

謝謝shiuh及dlc007 兩位大大的解釋幫忙
發表人: bearchu    時間: 2006-3-30 11:31 AM

經過shiuh及dlc007 兩位大大的幫忙,已經完成了
但是新的問題又來了.
就是..
B欄為16個字 而有些資料是 " 由字+空白 "組成
帶入後"空白"就不見了
如何將"空白"留下,成為16個字
發表人: alexanita    時間: 2006-3-30 11:39 AM

全部選為文字格式(TEXT),
這樣應該就不會當成數字而把前面的0拿掉了。

發表人: bearchu    時間: 2006-3-30 11:58 AM

alexanita大大可能會錯意了
不是0不見
是空白不見

123456789
123     789
匯入成  A及 B 兩欄
  A               B
123456       789  

而第二列之A欄想匯成  123+"3個空白格"
但是實際匯成123而已  後面3個空白格無匯入
發表人: shiuh    時間: 2006-3-30 12:08 PM

這...我覺的寫個小Marco可以解決啦...
不過.....應該還有其他的簡單方法可以做...

下午不在 沒辦法幫你找...待我再想想..
發表人: bearchu    時間: 2006-4-1 06:44 AM

shiuh大大..............:icons6:icons6
等您的好消息......
發表人: AGC    時間: 2006-4-2 12:49 AM

你的原始資料長度每行都一樣嗎?
若是,用UE的行列模式在你要分項的地方插入固定字,如 |。
在匯入時分隔字元就填 | ,就可了
發表人: bearchu    時間: 2006-4-2 05:02 AM

一,二 千筆資料要在全部分項的地方插入固定字
發表人: dlc007    時間: 2006-4-2 10:29 PM

試過, 用macro去讀取檔案來做分割一樣空白會消失,
好像是資料進到excel之後會被excel自動處理掉,
建議還是寫個小程式比較快
發表人: bearchu    時間: 2006-4-3 05:24 AM

寫個小程式對我這只會MS-DOS的 "LKK"是負擔,,應該說是不可能.

發表人: shiuh    時間: 2006-4-3 09:57 AM

我試試看寫一個小程式給你喔 規格我就照第一篇下去做
如上面那個樣子不對 你要提早說....

有點小忙 不過撥個空幫你一下無妨
發表人: shiuh    時間: 2006-4-3 12:44 PM

to bearchu

小程式我寫好了...不過 你能提供你的 文字檔給我嗎?
我直接幫你轉
發表人: shiuh    時間: 2006-4-3 12:45 PM


引用:
bearchu寫到:
shiuh大大..............:icons6:icons6
等您的好消息......

順帶一提...我忘記好幾天了...

還有 你幹麻對我比中指...
發表人: dlc007    時間: 2006-4-3 03:26 PM


引用:
shiuh寫到:

引用:
bearchu寫到:
shiuh大大..............:icons6:icons6
等您的好消息......

順帶一提...我忘記好幾天了...

還有 你幹麻對我比中指...



他應該是要比大拇指吧
發表人: bearchu    時間: 2006-4-4 05:54 AM


引用:
shiuh寫到:

引用:
bearchu寫到:
shiuh大大..............:icons6:icons6
等您的好消息......

順帶一提...我忘記好幾天了...

還有 你幹麻對我比中指...



shiuh大大...........抱歉..
我一直以為那個圖形是用手指摳腦袋瓜.....所以造成誤會
望大人有大量...
另謝謝dlc007大大為小的解危....

本人之資料外傳有些 "麻煩"
故無法E-mail 還望見量..
還要道聲抱歉的是....資料格式為下
A欄:  6位
B欄: 16位
C欄:  8位
D欄:  2位
E欄: 14位
謝謝幫忙...
發表人: shiuh    時間: 2006-4-4 08:55 AM

mail被退...
發表人: shiuh    時間: 2006-4-7 10:56 AM

給你東西後 問題解決了嗎?
發表人: bearchu    時間: 2006-4-10 03:56 PM

處理中..謝謝幫忙...
發表人: shiuh    時間: 2006-4-11 12:07 PM

你後面給我這些東西 是用我的資料轉出來就這樣?
還是你自己分的?

文字檔中的空隔已經不見 所以轉進去一定不會有
如果你要找到你的"釣竿",我建議你去找點Excel VBA的書
或者VB的書 利用VB的一些功能 去幫你檢查每一格的位元數對不對..不對的自動捕空隔
發表人: terry    時間: 2006-4-11 12:15 PM

其實用替換功能吧空格全部轉為某一個資料中沒有用到的特定符號
然後再轉入excel
最後在excel中吧特定符號替換回空格就好了



假設資料如下

00000112345678901234560     050100000076239137         
0000023698521478963258  0000100205844444466354
000  31478523698745632000000150254552155565644

注意,資料裡面有空格

使用文字編輯器的替換功能
吧空格替換為絕對不會出現的字元 如 "~" 字元

替換完畢之後

資料看起來會是
00000112345678901234560~~~~050100000076239137         
0000023698521478963258~~0000100205844444466354
000~~31478523698745632000000150254552155565644



按照前面的方法轉成execl就會變成
_______________________________________________________
  |    A    |          B              |      C           | D |         E           |   F
_______________________________________________________
1|000001|1234567890123456|00~~~~05| 01 |00000076239137|
_______________________________________________________
2|000002|3698521478963258|~~000010|02|05844444466354|
_______________________________________________________
3|000~~3|1478523698745632|00000015|02|54552155565644|
_______________________________________________________

這個時候再用 excel 的替換功能吧 "~"替換為空格即可
PS 儲存格要先轉換為文字格式,否則空格或者0會自動被省略

轉好之後應該會像是

  |    A    |          B              |      C           | D |         E           |   F
_______________________________________________________
1|000001|1234567890123456|00    05| 01 |00000076239137|
_______________________________________________________
2|000002|3698521478963258|  000010|02|05844444466354|
_______________________________________________________
3|000  3|1478523698745632|00000015|02|54552155565644|
_______________________________________________________


@@以前幫女友弄會計申報資料常常再做這件事情

[terry 在 2006-4-11 12:20 PM 作了最後編輯]
發表人: shiuh    時間: 2006-4-11 12:29 PM

疑..
這個方法也挺好的說...
發表人: bearchu    時間: 2006-4-12 01:28 PM

謝謝各位大大
尤其是shiuh大大的幫助
最後terry大大點破迷思.....
發表人: dlc007    時間: 2006-4-12 02:25 PM


引用:
terry寫到:
其實用替換功能吧空格全部轉為某一個資料中沒有用到的特定符號
然後再轉入excel
最後在excel中吧特定符號替換回空格就好了
[terry 在 2006-4-11 12:20 PM 作了最後編輯]


其實這種方法我之前就想過, 也試過..
當然是可以成功轉換, 可是如果要轉換的字元是在結尾,
那結尾的字元在excel會被消除不會補空白喔..
這也是我說的為什麼需要靠程式來做了..
excel會自動把結尾為空白都給消除, 不管是從script,
或是開檔選固定長度, 甚至是取代的功能都會這樣..
發表人: terry    時間: 2006-4-12 02:43 PM


引用:
dlc007寫到:

引用:
terry寫到:
其實用替換功能吧空格全部轉為某一個資料中沒有用到的特定符號
然後再轉入excel
最後在excel中吧特定符號替換回空格就好了
[terry 在 2006-4-11 12:20 PM 作了最後編輯]


其實這種方法我之前就想過, 也試過..
當然是可以成功轉換, 可是如果要轉換的字元是在結尾,
那結尾的字元在excel會被消除不會補空白喔..
這也是我說的為什麼需要靠程式來做了..
excel會自動把結尾為空白都給消除, 不管是從script,
或是開檔選固定長度, 甚至是取代的功能都會這樣..



如果是excel無論如何把結尾的空白消除
那一點意義也沒有

因為他的最終文檔是excel而不是text File
所以如果excel會把空白消掉,那怎麼轉,都沒用的


如果TEXT File 每行的尾巴必須空白,意思ㄧ樣,倒過來轉換即可
雖說寫程式很簡單,但是要寫個萬用的轉換有點麻煩

但是不是每一個人都會寫程式,會寫程式的也沒辦法每次都這樣幫忙
活用工具即可

另外, 這跟釣竿雖然不是一隻好的釣竿,但是是可以完成任務的釣竿

補空格很簡單啊

  吧讀出來的字串 加一個空格寫回去就好了

Do while TextFile Not EOF
   My_Str = TextFile 中 讀出來的字串
   My_Str = My_Str & " "
  寫入 My_Str   
Loop

多簡單
  
但不會寫程式,就只好腦筋靈活點善用工具了
發表人: dlc007    時間: 2006-4-12 04:04 PM


引用:
因為他的最終文檔是excel而不是text File
所以如果excel會把空白消掉,那怎麼轉,都沒用的


這樣的話用固定長度就能讀出所要的資料喔

而版主之前後來補充的問題是


引用:

123456789
123     789
匯入成  A及 B 兩欄
  A               B
123456       789  

而第二列之A欄想匯成  123+"3個空白格"
但是實際匯成123而已  後面3個空白格無匯入

發表人: dlc007    時間: 2006-4-12 04:08 PM


引用:
雖說寫程式很簡單,但是要寫個萬用的轉換有點麻煩

但是不是每一個人都會寫程式,會寫程式的也沒辦法每次都這樣幫忙
活用工具即可


這只是針對某種特殊需求的程式, 即使萬用的轉換也不太可能可以達到每次不同的需求
會寫程式的確實沒辦法每次都這樣幫忙, 所以得靠工具
但是當工具無法達到需求的時候呢?


引用:
補空格很簡單啊

  吧讀出來的字串 加一個空格寫回去就好了


確實補空格很簡單, 難的是, 要補給個空格? 要在哪補空格?
或許會說, 那就加判斷式, 那這樣是否變成在寫程式呢?


引用:
但不會寫程式,就只好腦筋靈活點善用工具了


非常同意..單純修改文字檔的內容, 有很多好用的工具..
尤其ultraedit等工具可以做到的事就很多
發表人: terry    時間: 2006-4-12 04:33 PM

的確,excel 會自己把空格去掉
剛發現了一些小問題

第一,  如果要替換, 不可以用這個"~"符號,excel會找不到資料 可以用 "#" 或者英文字母試試看
再來希望你的資料空格不是在結尾處

======================================
確實補空格很簡單, 難的是, 要補給個空格? 要在哪補空格?
或許會說, 那就加判斷式, 那這樣是否變成在寫程式呢?
======================================
判斷是必要的
隨者需求的不同,下的判斷當然不同
所以寫個萬用的很難

剛才想了一下,就算是用 Script 或者程式也沒辦法
如果再excel內用script的
原理是吧儲存格的長度讀出來然後再決定補幾個空格
但是有個空格補前面還是補後面的問題沒有Flag很難判斷

再來用程式去跑....除非你能讀出 XLS 檔案...
否則無用,因為TXT轉入Excel 還是會把空格吃掉

看你要不要問問神童吧

[terry 在 2006-4-12 04:41 PM 作了最後編輯]
發表人: dlc007    時間: 2006-4-12 04:54 PM


引用:
再來用程式去跑....除非你能讀出 XLS 檔案...
否則無用,因為TXT轉入Excel 還是會把空格吃掉

看你要不要問問神童吧


VB及ASP等都能讀出XLS檔案或是寫成XLS檔案
很多公司在導入ERP等商業軟體或是在做資料轉換時都會針對這類的需求去開發這類的程式

另外不知道版主大大是否真的需要轉換成excel檔?
或是只需要把檔案分開, 好讓其他程式能成功判斷及讀取?
發表人: shiuh    時間: 2006-4-12 05:55 PM

因為我這一陣子會很忙 我沒辦法再幫你寫東西...我把一些相關寫法給你 你自己搞定一下..
這些我是用VB的寫法

(這邊是宣告)
    Dim curWorkBook     As New Workbook
    Dim curSheet        As New Worksheet
    Dim SheetNAME       As String
(這邊是開Excel檔及開啟第一頁面)
        Set curWorkBook = Application.Workbooks.Open(FileName:="路徑及檔名", UpdateLinks:=0, ReadOnly:=False)
        SheetNAME = curWorkBook.Worksheets.Item(1).name
        Set curSheet = curWorkBook.Worksheets(SheetNAME)
        
        curSheet.Visible = True
(讀出A1的值)
        AllNumber = curSheet.Range("A1").Value

相對的你也可以這樣寫..
(把cowcolumn欄的東西..這邊你要自己先定義 可以用迴圈跑..A1.A2.A3..這樣..  一整行 或一整列的東西讀出來...讀到cowcolumnnumber中....)

cowcolumnnumber = curSheet.Range(cowcolumn).Value


讀出來之後要做啥??當然是要比對字元數夠不夠...我用17個做個範例,並且在後面加上空格..
temp = cowcolumnnumber
    If Len(cowcolumnnumber) < 17 Then
   
        For I = Len(cowcolumnnumber) To 17 Step 1
        
        temp=  temp& " "
        
        Next I
   
    End If
(比對完了當然要把資料放回去嘛....)
   cowcolumnnumber =temp

好了 我比完了 該把資料放回去了 放到剛剛的地方去
            curSheet.Range(cowcolumn).Value = cowcolumnnumber            

(今天大爺無聊..順便把行列大小自動排一下...)
            curSheet.Columns.AutoFit
            curSheet.Rows.AutoFit

全都比完了 該是存檔了吧...
            curWorkBook.Save


真的不好意思 這些資料希望對你有幫助....

我隨手key一下 可能有點小亂 看不懂再提問 不過我不一定有辦法很快回答了..忙....

[shiuh 在 2006-4-12 06:07 PM 作了最後編輯]
發表人: bearchu    時間: 2006-4-13 03:16 AM

shiuh 大大謝謝
解讀中.....




歡迎光臨 TWed2k (http://twed2k.org/) Powered by Discuz! 4.1.0