質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

意見交換

クローズ

8回答

7098閲覧

Excelに「CSV書き出し時にダブルクオーテーションで囲む」オプションが無いのはなぜでしょうか

koburon

総合スコア31

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

0グッド

0クリップ

投稿2023/05/09 08:44

0

0

前提

VBAのマクロで作成したCSVファイルを、PostgreSQLのテーブルにCOPYコマンドでインポートする作業をしています。

発生している問題

COPYコマンドを使用するためには、CSVファイルの時点で全ての値に「全ての入力値をダブルクォーテーション( ” )でくくらないといけない」という問題があります。
それならばとExcelでCSVで書き出そうとしても、Excelには「CSV書き出し時にデータをダブルクオーテーションで囲む」オプションがありません。

対応策

以下のURLを参考にして、全ての値がダブルクオーテーションで囲まれたCSVを作成しました。

テストに役立つ機能紹介 – Excelで全ての値にダブルクオーテーションが付いたCSVを作る方法

  1. 「セルの書式設定」でユーザー定義:「!”G/標準!”;!”G/標準!”;!”G/標準!”;!”G/標準!”」を入力する
  2. 「名前を付けて保存」で「CSV (コンマ区切り) (*.csv)」で保存する
  3. テキストエディタ(今回は「NewQx」)でCSVファイルを開き、コマンドで「 “”” 」を「 ” 」に置換する
  4. 「空白データにも『””』を定義しないといけない」ので、コマンドで「 ,, 」を「 ,””, 」に置換する
  5. もう1回、4を実行する (1回だけだと全部が置換されないため)

実現したいこと

今回は目的通りのCSVを作成できましたが、テキストエディタを使用する手間がどうしてもかかります。
今後もデータベースにCSVファイルを差し込む作業は続くので、もっと簡単にダブルクオーテーションで囲まれたCSVファイルを作成できたらいいなと思っています。
また、この他のwebアプリでCSVファイルを使用する際、「全ての値をダブルクオーテーションで囲まれた」ものでなければならない場合がしばしばあるようです。
そもそもこうした機能に対して需要が無い、というのが現状なのかもしれませんが、実装されない何か事情があるのか気になっています。
ご意見をいただけると幸いです。
よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

PC:Windows11
Excelのバージョン:Microsoft 365
QxEditorのバージョン:α 0.90

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答8

#1

Zuishin

総合スコア28662

投稿2023/05/09 09:02

編集2023/05/09 09:04

Excelに「CSV書き出し時にダブルクオーテーションで囲む」オプションが無いのはなぜでしょうか

そこまでサポートする必然性を感じなかったんでしょうね。
書き出した後のファイルを加工すると良いと思います。

PowerShell なら Import-Csv と Export-Csv を使うと簡単です。
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/import-csv?view=powershell-7.3
https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/export-csv?view=powershell-7.3

具体的には Import-Csv old.csv | Export-Csv new.csv で変換できます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

umimi

総合スコア504

投稿2023/05/09 15:09

編集2023/05/09 15:58

[香車]東上☆あらし☆海美「
VBA で『CSV書き出し時にダブルクオーテーションで囲む』プログラムを書けばよいのでは ?
2023(R05)-05-10 追記
やっと、有意義な意見交換が出来たみみ。
VBA は、ほとんど使ったことがないので、貴重な意見ありがとうございました。
『マクロをファイルごとにコピペしなければならない』や『他のファイル開く』は、『LiberOffice とか Google Document を使う』とかでも、回避不可能でしょうか ?

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

Zuishin

総合スコア28662

投稿2023/05/09 15:27

VBA だと Excel ファイル毎にマクロをコピペしなきゃいけなくなりませんか?
そうしない場合は全然関係ない Excel ファイルを開かなきゃいけなかったり。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

shiketa

総合スコア4041

投稿2023/05/10 00:24

発生している問題
COPYコマンドを使用するためには、CSVファイルの時点で全ての値に「全ての入力値をダブルクォーテーション( ” )でくくらないといけない」という問題があります。

そう、ですか?

sql

1create table test (id int, name text);

みえないかもしれないけれど、区切りはタブ文字。

shell

1$ cat Book1.txt 2id name 31 aaa 42 bbb

shell

1$ cat hoge.txt 2copy test from 'Book1.txt' csv header delimiter '(タブ文字)'; 3select * from test; 4 5$ psql < Book1.txt 6COPY 2 7 id | name 8----+------ 9 1 | aaa 10 2 | bbb 11(2 rows)

つまり、Excelから「タブ区切りテキスト」でエクスポートして、copyコマンドでdelimiterを「タブ文字」とすれば、全ての入力値ををダブルクォーテーションで囲む必要はないのでわ?

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#5

pippi19

総合スコア684

投稿2023/05/11 16:29

Excelに「CSV書き出し時にダブルクオーテーションで囲む」オプションが無いのはなぜでしょうか

実際の理由はMS社にしかわからないとテーマだと思います。

個人的な推測ですが、下記あたりだと思います。

  • 他の形式に完全対応すると開発コストがかかる(費用対効果面)
  • 当時いい加減に決めた仕様を引きずっている(MS製品ありがち)
  • ビジネス観点で独占したかった(MS製品以外でも開ける他の形式に完全出力させない)

要するに、エクセル形式以外の出力についてはあえて力を入れなかったのかと。
例えばPDF出力についてもいまだに完璧ではありません。

まだ出ていない案で思いつくのは、
下記のようにカラム追加してCSV出力ではなく、コピーすればTSV(タブ区切り)になるので、
タブを削除する1回の置換でいけますね。こっちの方が楽かどうかはご判断を。

イメージ説明

データにダブルクオーテーションがない前提ですが。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#6

SaitoAtsushi

総合スコア5675

投稿2023/05/12 07:33

CSV には標準がありません。 標準がないまま各ソフトウェアが似たような形式を CSV と称してきたという歴史があり、項目をダブルクウォートで囲むのも囲まないのもどちらが正しいというわけではありません。 エクセルの CSV は「エクセルの CSV」であり PostgreSQL の CSV は「PostgreSQL の CSV」というそれぞれの仕様があるだけです。

各項目をダブルクウォートで囲む以外にもエスケープ処理をどうするかだとか、要素内に改行を許すかどうか、文字コードとして何を採用するかなどの諸々で膨大なバリエーションがあるので様々なソフトウェアと互換性を持たせようとするとキリがないことになってしまいます。

強いて言えば 2005 年に発行された RFC 4180 が標準に近いのですが、分類としては Standard ではなく Informational であり、これは既存の情報をまとめた参考資料であることを意味します。 既存の実装で共通する部分を大まかにまとめたに過ぎず、標準化過程を経たものではありませんし、詳細は曖昧です。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#7

umimi

総合スコア504

投稿2023/05/13 04:59

編集2023/05/13 05:00

[香車]東上☆あらし☆海美「
隔月刊『日経ソフトウエア』で、
『Python(と、そのライブラリ)で、Excel ファイルをいじる』とか
やってるじゃないか。それを応用すれば、いいのでは ?

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#8

kaz.Suenaga

総合スコア2037

投稿2023/05/18 08:22

#6
全くの余談ですが

RFC4180 には RFC7111 という update が出ています。
またMSなどもそれを認識しており、静的ファイル: CSV コンテンツ タイプが標準準拠に変更されました といったような更新がかかっているようです。

ちなみに本題ですが、 psql のマニュアル を読むと

csv書式は RFC 4180で記述された引用規則を適用して、列の値をコンマで区切って書きます。 この出力はサーバのCOPYコマンドのCSV書式と互換性があります。 列名が書かれたヘッダ行は、tuples_onlyがonでなければ生成されます。 タイトルとフッタは出力されません。 各行はシステム依存の改行文字で終わります。改行文字は、Unix系のシステムでは典型的には単独の改行(\n)であり、Microsoft Windowsでは復帰と改行の並び(\r\n)です。 コンマ以外のフィールド区切り文字は\pset csv_fieldsepで選べます。

とあり、 RFC4180 ベースのCSVに対応しているようです。

なのでおそらくこの

COPYコマンドを使用するためには、CSVファイルの時点で全ての値に「全ての入力値をダブルクォーテーション( ” )でくくらないといけない」という問題があります。

という課題は、課題自体が偽で、

Excelに「CSV書き出し時にダブルクオーテーションで囲む」オプションが無いのはなぜでしょうか

は、RFC4180(もしくは RFC7111)に従ったCSVはその必要がないから、になりそうです。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問