【備忘録】MS AccessのテーブルにUTF-8のCSVをインポートするときに生じる不具合コンボの切り抜け方2
前回は、MS AccessがCSVのインポート時に、自動判別してくれるはずの「長いテキスト」を判別してくれず、インポートエラーになった。というお話をしました。
自動判別してくれないのなら、しかたがないから自分でフィールドのデータ型を設定しましょう。
テキストインポートウィザードで文字化けを解消するところまでは、前回と同じです。
以下の画面に遷移したら、スクロールバーで右にスクロールさせていき、データ型を変更するフィールドが表示されたら、フィールド名をクリックして選択します。
[データ型]のコンボボックスで「長いテキスト」を選択します。→さらに右にスクロールさせます。
数字や金額のフィールドが表示されたので、このフィールドも選択します。
というのも、Accessはダブルクォーテーションで囲まれたデータを、数値であっても全て「テキスト」と認識してしまうからです。
[データ型]のコンボボックスで「長整数型」を選択します。→以下、右スクロールしながら、上述の作業を繰り返します。
「研究開始時の研究の概要」フィールドを「長いテキスト」に変更して、さらに右へ・・・・・ あれっ!?
なんと、これより右に行くことができません!
CSVの項目はまだまだ続いているのに、ですよ?
そう、これが第2の謎なんです。
テキストインポートウィザードでCSVの項目全てが表示されないという。
ちなみに、メモ帳で開いたCSVをむりやりANSI規格で保存しなおしてから、
インポートしてみると、以下のようにきっちり最後まで表示されますので、
しかしここで解決策が一つ見つかりましたね。すなわち、CSVをANSI規格で保存しなおしてからインポート、です。
ただし、このやり方はひとつ難点があります。メモ帳でANSI規格で保存する際に、以下のメッセージが表示されるのです。
フィールドのデータ型は正しく、文字列の切り捨てもなくインポートできますが、もしかしたらどこかで文字化けしているかもしれない。これはちょっといただけません。
じゃあ、一度Excelで開いて、Excelブックとして保存してからインポートしてみたら?
手順としては、
しておいて、Accessで[外部データ]→インポートのほうの[Excel]をクリック。
保存したExcelファイルを選択して、【OK】をクリック。
[先頭行をフィールド名として使う]にチェックを入れ、【次へ】をクリック。
右へスクロールしながら、255文字以上のフィールドについてデータ型を「長いテキスト」に変更していきます。
ANSIのCSVと同様に、最後のフィールドまで表示されました。→【完了】をクリック。
インポート成功です。データ型は正しく、フィールドの切り捨てもされていません。
この第2の解決策:UTF-8(ボム付)のCSVをExcelで開いてExcel形式で保存してからインポートは、お手軽ですしインポートエラーもないので、これでOKのようにも思えます。
しかし、2つ気がかりがあります。
ひとつは、上述の手順でCSVをExcelで開くと、文字列扱いの数値も強制的に数値に変換されてしまうので、001とか011などのレフトゼロが消去されてしまうことです。こういう文字列扱いの数値はたいていコードだったりするので、インポート後、コード表とリレーションするときに面倒なことになります。*3
もうひとつは、Excelの動作が重いことです。今回はCSVのファイルサイズが16.2MB程でしたから(ちょっと遅いな)くらいで済みましたが、ファイルサイズが大きくなると我慢できないほど待たされるかもしれません。
この第2の解決策は、これでバッチリ!とまでは言えないのです。
とういわけで、あと1回続けます。