:::
開發者討論區

由文字檔匯入calc

discuss pic 2007-01-31 23:14:26
我常常需要把有規律的文字檔報表匯入試算表中作分析整理。一直覺得在這方面,excel提供了很好的方式來處理這個問題,他可以讓我設定每筆資料的欄位大小,即使有空白資料的欄位也沒有問題。可是calc的匯入處理方式遇到有空白資料欄位就會出問題。

以前我都是用漢書作前置處理,用區塊標示為每一筆資料的每個欄位間加上分隔符號,再匯入。只是到了xp時代沒有再付費更新,以至於無法使用。最近發現一個NOTEPAD++的編輯器(GPL)可以作精確的作空白格的搜尋並全部一次加上記號,可以方便的找到空白欄位,這樣配合起來,就可以彌補一些缺憾。

不曉得有沒有人知道如何讓calc能有像excel一樣的匯入方式?

-- 2/10 補充
Madedit 也是GPL 的編輯器,也不錯。
1067943249
discuss pic 2007-02-03 00:22:04
參照:

ichichang 寫道:
我常常需要把有規律的文字檔報表匯入試算表中作分析整理。一直覺得在這方面,excel提供了很好的方式來處理這個問題,他可以讓我設定每筆資料的欄位大小,即使有空白資料的欄位也沒有問題。可是calc的匯入處理方式遇到有空白資料欄位就會出問題。

你能提供個兩三行的"規律的文字檔報表"讓大家看, 然後告訴我們你預期匯入後長什麼樣?但是卻看到什麼?
1095412750
discuss pic 2007-02-03 17:08:35
小弟想ichichang指的應該是格式化輸出的文字檔。這個要匯入calc絕對是沒有問題的。請在匯入檔案時,選擇csv檔,然後再根據你文字檔的格式(固定欄位位址,還是空白或是逗號分開,有沒有重複分隔符號),做適當的選擇就可以了。這個功能用gnumeric更方便,只要複製貼上時就會自動叫出精靈,真希望將來Calc也能夠把這個功能納入。
1087306547
discuss pic 2007-02-03 22:44:17
參照:

kg64 寫道:
你能提供個兩三行的"規律的文字檔報表"讓大家看, 然後告訴我們你預期匯入後長什麼樣?但是卻看到什麼?
圖來了,不曉得大家是否有看出端倪?最後一張是excel的精靈所呈現出來的樣子。很明顯的一個中文佔兩個位元的位置,且所有的space都忠實的呈現。但是calc似乎會把中文一個字當一個位元來顯示。
1067943249
discuss pic 2007-02-04 00:07:42
我知道你的問題了,我想這也許是 ooo 的 bug 也許不是,因為好像沒有規定中文字一定是英文字母的兩倍寬。不過為何你一定要用固定欄寬的 csv?你有直接編輯 csv 檔的需求嗎?如果沒有,你把檔案存成有欄位分隔符分開的 csv 比較好,ooo 從分隔符號就知道你有幾個欄位了,不用再去手動指定欄位,這樣就不會有你說的問題了。

原先用固定欄寬的方式存,要改成以分隔符號存時,要在儲存對話窗裡勾「編輯篩選設定」。

我還是很好奇,是否可以說一下為何要存成固定欄寬的 csv?
1095412750
discuss pic 2007-02-04 06:53:03
參照:

kg64 寫道:
我還是很好奇,是否可以說一下為何要存成固定欄寬的 csv?
如果是我存的檔案就沒問題了,這是軟體公司設計出的報表。原本是直接要列印出來的,後來從善如流,改印成文字檔,我自己拿來運用的。
話說資料庫的欄位大小以1個中文字來說絕對是佔有2byte,所以我一直認為這個轉換有問題。因為即使我在尺標上按照設定資料庫欄位一樣的欄位寬設定作分隔,還是無法順利分割好。
1067943249
discuss pic 2007-02-04 10:50:25
參照:

ichichang 寫道:
如果是我存的檔案就沒問題了,這是軟體公司設計出的報表。原本是直接要列印出來的,後來從善如流,改印成文字檔,我自己拿來運用的。
話說資料庫的欄位大小以1個中文字來說絕對是佔有2byte,所以我一直認為這個轉換有問題。因為即使我在尺標上按照設定資料庫欄位一樣的欄位寬設定作分隔,還是無法順利分割好。

山不轉路轉。以後要把固定欄位的 csv 匯入前先處理成用逗點隔開的 csv,如果在 linux 下就在 terminal 執行下面的 command:

sed 's/ \+/,/g' csvfile > newcsvfile

如果你是用 MS Windows,我建議你先下載 'Sed for Windows'。
http://gnuwin32.sourceforge.net/packages/sed.htm
'Sed for Windows' 我沒用過,我想應該跟 linux 上的一樣。

如果你有需要每個欄位加上雙引號,就用下面的 command:

sed 's/\([^ ]\+\)/"\1"/g;s/ \+/,/g' csvfile > newcsvfile

我想,用 sed 應該比你用漢書改要快,匯入 ooo 也比較簡單。
1095412750
discuss pic 2007-02-04 18:05:27
參照:

kg64 寫道:
山不轉路轉。以後要把固定欄位的 csv 匯入前先處理成用逗點隔開的 csv,如果在 linux 下就在 terminal 執行下面的 command:

sed 's/ \+/,/g' csvfile > newcsvfile

如果你有需要每個欄位加上雙引號,就用下面的 command:

sed 's/\([^ ]\+\)/"\1"/g;s/ \+/,/g' csvfile > newcsvfile

我想,用 sed 應該比你用漢書改要快,匯入 ooo 也比較簡單。
謝謝指點,我以為需要用perl寫程式來處理。sed 看來需要好好的研究才會用。因為這個指令就像天書一樣。
1067943249
discuss pic 2007-02-04 20:56:20
參照:

kg64 寫道:
我知道你的問題了,我想這也許是 ooo 的 bug 也許不是,因為好像沒有規定中文字一定是英文字母的兩倍寬。


中文字是英文的兩倍寬的假定,僅在 Big5 或 GB 等舊式編碼系統才成立。而 OO.o 的國際化與本地化以 Unicode 實踐,對舊式編碼的支援並不多。所以這不算是 OO.o 的 bug,只能說它向下相容的程度有限。
Hao
:::

誰在線上

11人線上 (6人在瀏覽互動討論區)

會員: 0
訪客: 11

更多…