Officeの問題
CSVファイルをオフィスに読み込む際の困った問題とその解決法
NDBS
はデータベースから任意の項目データを
CSV形式
のテキストデータに出力することができます。また、汎用の
RDBMS
やテキストエディタ、メモ帳などでも
CSV形式
のテキストデータを作成することができます。しかし、これらのテキストデータを
Excel
や
Word
などのオフィスソフトにインポート(読み込ませる)させた場合、違ったデータに変換されてしまうなど、注意しなければならない問題があります。
データ処理に
Excel
だけお使いの方には関係ありません。
A
数字を書き込んだデキストファイルを読み込んだ Excel の文字化けの問題
メモ帳などのテキストエディタを使用して次の2項目2行の文字列を入力し、
CSV形式
で保存します。
秋田県潟上市天王字 ,長沼28−4
秋田県潟上市天王字長沼 ,28−4
このファイルを
Excel
に読み込みますと次のように表示されます。
秋田県潟上市天王字 長沼28−4
秋田県潟上市天王字長沼 4月28日
なんと2行目、2桁目のデータ
28−4
が
4月28日
に変わってしまいました。
対策
メモ帳などのテキストエディタを使用して次の2項目2行の文字列を入力し、
X1.CSV
のファイル名で保存しました。
このファイルは項目間を半角カンマで区切ってありますので
CSVファイル
とよばれ、
データベースや表計算ソフトから自動出力されるファイル形式の一つです。
秋田県南秋田郡天王町天王字 ,長沼28−4
秋田県南秋田郡天王町天王字長沼 ,28−4
作成されたファイル
X1.CSV
をエクスプローラでダブルクリックしますと
Excel
が起動し、
Excel
の画面に次のように表示されます。
秋田県南秋田郡天王町天王字 長沼28−4
秋田県南秋田郡天王町天王字長沼 4月28日
なんと2行目、2桁目のデータ
28−4
が
4月28日
に変わってしまいました。
NDBS
では集計や出力結果を
CSVファイル
に出力するのでこれは大変困った問題です。
この現象は
Sun
の
StarSuite
の表計算ドキュメントに読み込んだ場合にも起こります。
同じ表計算ソフトでも
Lotus1-2-3
に読み込んだ場合はこのよう困ったことは起こりません。
作成した通りに表示されます。
文字列をダブルコーテーションで囲んでも同じ現象になります。
ファイル形式(拡張子)を
CSV
でなく
TXT
としてもデフォルトでは同じ現象になります。
Excel
で読み込みの際は
拡張子を
TXT
とし、
その列のデータ形式をデフォルトの
G/標準(G)
でなく、
文字列(T)
に変更してから読み込むと正しく表示されます
文字列の前にシングルコーテーションを付けると防げますがシングルコーテーションも印刷されてしまいます。
そこでいろいろ調べてみましたら次のように規則性があることがわかりました。
|
−で区切られた数字の文字化けの例 |
元の文字列
|
Lotus1-2-3
|
Excel
|
StartSuite7
|
0−1
|
0−1
|
0−1
|
1月1日
|
0-1
|
0-1
|
0-1
|
1月1日
|
1−1
|
1−1
|
1月1日
|
1月1日
|
1-1
|
1-1
|
1月1日
|
1月1日
|
47−7
|
47−7
|
Jul-47
|
7月1日
|
47-7
|
47-7
|
Jan-47
|
7月1日
|
47−12
|
47−12
|
Dec-47
|
12月1日
|
47-12
|
47-12
|
Dec-47
|
12月1日
|
47−13
|
47−13
|
47−13
|
47−13
|
47-13
|
47-13
|
47-13
|
47-13
|
47−123
|
47−123
|
47−123
|
47−123
|
47-123
|
47-123
|
47-123
|
47-123
|
秋田47−7
|
秋田47−7
|
秋田47−7
|
秋田47−7
|
A47−7
|
A47−7
|
A47−7
|
A47−7
|
Excel
では、
−
の前後に、ある特定の数字がある場合、日付に変わってしまうことが解りました。
特定の数字とは西暦の下2桁と月の場合です。文字が半角でも同じ現象になります。
CSVファイル
や
TXTファイル
を
Excel
に読み込む場合は気を付けてください。
なお、データを最初から
Excel
のセルに入力する場合は、
47−7という文字列を入力しようと思っても直ちに日付に変換されて表示されますので、
直ぐ異常に気づきます。
この文字化けの問題を避けるには次のようにします。
1
外部データとして読み込む
多少手続きが面倒ですが次の手順で外部データとして読み込むと正しく
Excel
に読み込むことができます。
(1)
Excel
を起動し、新規作成で開いておきます
(2)
メニューバー
で
データ
を選びます
(3)
外部データとして読み込む
を選びます
(4)
テキストファイル
を選びます
(5)
読み込みたい
CSV
ファイルを開きます
(6)
項目の区切りとして
半角カンマ
を選びます
(7)
項目の中で文字化けの起こる項目のデータ形式を
文字列
に指定します
2
CSVファイルの作成に配慮する
1
の方法は操作が煩雑です。
Excel
に読み込みたい
CSV
ファイルをダブルクリックするだけで自動的に文字化けなく
Excel
に読み込むためには、
CSV
ファイルの作成にあたって次のようなことに留意します。
(1)
項目の最初の文字に数字を使わない
28−4
とせず
長沼28−4
のように、数字の前に漢字や英文字を記述します。
この例題で住所の記述を
秋田県南秋田郡・・
と
28−4
の二つの項目に分けたのには理由があります。
これは長い表記の住所をラベルに出力する場合、ラベルの右端からはみ出させないための仕組みです。
したがって住所を長い表記のまま印刷して良い場合は二つに分けた住所を連結してしまえば良いのです。
具体的な方法としては、
CSVファイル
をエディタに読み込み、
住所上と住所下の間の
","
を削除します。
レコード数が多い場合、1レコードづつ削除することは時間もかかる上間違いも生じます。
NDBS
のデータを
NDBS No.18 絞込・任意項目出力
で出力させる場合は、
主力開始の前に
末尾空白削除なし
を選んでから出力しますと、
全レコードで各項目の記録位置が揃いますので、
Mifes
など、矩形カットのできるエディタで、一気に矩形カットができます。
この後、置換のできるエディタで、空白文字を一斉に削除します。
(2)
数字と数字の間の−を他の文字に変える
28−4
とせず
28ー4
とか
28の4
に変える
(3)
Excel
で読み込みの際は読み込むファイルの
拡張子を
TXT
とし、
その列のデータ形式をデフォルトの
G/標準(G)
でなく、
文字列(T)
に変更してから読み込むと正しく表示されます。
表計算ソフトに
Lotus1-2-3
を使用した場合はこのような問題は起りません。
3
Excel
を使わない
(1)
Lotus 1-2-3
に読み込む
(2)
文書作成ソフトに読み込む
Excel
を使用せず、
Word
や
エディタ
などの文書作成ソフトに読み込んだ場合は文字化けを起こしません。
単に印刷したい場合や差し込み印刷したい場合は
CSVファイル
を直接文書作成ソフトに読み込みます。
(3)
NDBSからHtml文書に直接出力
NDBS
のデータを
NDBS No.18 絞込・任意項目出力
で出力させる場合は、
デフォルトで
xtable.csv
と
xtable.htm
が自動的に作成されます。
これらのファイルの中では文字化けは起こしていません。
したがって作成された
htm
形式のファイルをホームページとして出力させた場合は正しく表示されます。
B
郵便番号を書き込んだデキストファイルをExcelに読み込んだとき、先頭の 0 が消える問題
メモ帳などのテキストエディタを使用して次の2項目2行の文字列を入力し、
CSV形式
で保存します。
1,002-8071,札幌市北区
2,0028071,札幌市北区
3,〒011-0946,秋田市土崎港
4,0110946,秋田市土崎港
5,011-0946,秋田市土崎港
6,"0110946","秋田市土崎港"
このファイルを
Excel
に読み込みますと次のように表示されます。
1,002-8071 札幌市北区
2,
28071
札幌市北区
3,〒011-0946 秋田市土崎港
4,
110946
秋田市土崎港
5,011-0946 秋田市土崎港
6,
110946,
秋田市土崎港
2,4,6
のケースのように郵便番号の先頭が半角の
0
であった場合は
0
が消えてしまいます。
6 のケースのように
0110946
をダブルコーテーション " で囲んだ場合でも、同じく先頭の 0
が消えます。
6 のケースの場合、表計算ソフト
Lotus 1-2-3
や、
三四郎
を使用した場合は 0
が消えません。
対策は
CSV形式
のファイルを
Excel
に読み込んだ後、
画面上部郵便番号の列番号をクリックしてその列全体をアクティブにしてから、
セルの書式設定 -> 表示形式 -> ユーザー定義
で、
0
を選択し、
種類(T)
の直ぐ下の枠に
0000000
と入力して、
OK
をクリックしますと先頭の
0
が表示されます。
7桁の半角郵便番号の先頭に
〒
や
'
などの文字を付けた場合は
0
は消えませんが文字数が多くなります。
また、
Excel
のバージョンによっては、
Excel
に読み込んだ後、
画面上部郵便番号の列番号をクリックしてその列全体をアクティブにしてから、
セルの書式設定 -> 表示形式 -> ユーザー定義
で、
その他
を選択し、
郵便番号
を選択して
OK
をクリックしますと先頭の
0
が表示されます。
7桁の半角郵便番号だけを記録したデータを
Excel
に読み込む場合は注意しましょう。
C
先頭が空白である文字列を Word の文書に差し込むと先頭の空白が消える問題
個人情報と年会費を記録した
NDBS
のデータベースから出力された会費納入コードを、自作の
C言語
で作成したプログラムで納入コードを
◎
印に変換して次のような
CSVファイル
を自動作成しました。
"0100101","秋田県土崎・・","一交太郎",H15 H16 H17 , ◎
この会員は 平成15年度分の会費は未納でしたが平成16年度分の会費は納入しています。このデータの後ろの2項目を
Word
の差し込み印刷を利用して振替用紙に印刷した場合、正しくは次のよう印刷されて欲しいのです。
納入年度 H15 H16 H17
納入状況 ◎
しかし実際には次のように差し込まれて印刷されてしまいます。
納入年度 H15 H16 H17
納入状況 ◎
つまり、15年度分の会費は納入で平成16年度分の会費は未納となってしまいます。
この原因はテキストデータの<
◎
>を
Word
に差し込む際に、
Word
は
◎
の前の空白を無視して読み飛ばしたことによります。
半角の空白でも全角の空白でも同じです。
文字列の前の空白を無視してはならない場合の対策は、その
文字列全体をダブルコーテーションで囲む
ことです。
例えば前記
CSVファイル
の場合は次のように作成すれば良いことになります。
"0100101","秋田県土崎・・","一交太郎","H15 H16 H17 ",2 ◎ "
Word 文書に差込データをエディタやプログラムで作成する場合は注意しましょう。