アカウント名:
パスワード:
Excelって計算式を含むシート(やブック)をCSV形式で保存すると、全部、値として保存しちゃうから、読み込みも値だけなのかと思ってました。
実は計算式や関数を含むCSVを読み込んで、評価してくれるんですね。
今さらこれを知っても、何かに使える気はしないけど…。
Excelって計算式を含むシート(やブック)をCSV形式で保存すると、全部、値として保存しちゃうから、
・CSVはセルの書式を含まない
・CSVが読み込まれる際は大抵デフォルトで「標準」書式となる
・「標準」書式は数値や式として機能する
故に「2,3,=a1*b1」こういうCSVだとC1は6になるのですよ
ただし「2,3,"=a1*b1"」とした場合Cは「=a1*b1」という文字列になります
あぶないよねーぴたごらぴたごら
追伸LibreOfficeも同様です
ダブルクォートで囲っていても、文字列ではなく標準書式として解釈されるのが納得いかん。
そんなときは「''」シングルクォーテーションで
カンマ区切りの数値か、小数点がカンマな国でCSV形式で保存するにはダブルクォーテーションで囲むしか無いからだったりして。他AC氏も書いてるように表計算ソフトだと、文字列はシングルクォートだし。
EXCELに関数あるけどCで書かれたライブラリが見つからなかった時CSVに書き出して、EXCELで開いて保存、再読み込みとかしたことがある
01のような頭の 0 が、ただの CSV だと消えてしまいますが、="01"のように式で表現すると 01 と 0 つきで表示されます。
多分こんな感じで他にも応用がありそう……
内部的にはあくまで式で、文字列の 01 じゃないので使いたくないなぁ。
まぁ、CSVで式とか保存しないで、表計算ソフトのファイルでありながらテキストなSYLKとか使う方が幸せになれますよ。ちゃんとデータ型も保持されますし。
文字列で入れたいなら、`01 では?
それだと区切り文字が入力できないんで="文字列"の形にした上で文字列内の二重引用符などをエスケープ(二重にすればいいんだったかな)するのが一番駄目文字の少ない方法だった気がする。Unicode文字への対応も含めると、カンマ区切りのCSVをUnicodeにしても駄目で、タブ文字区切りのTSVをUnicodeで保存して拡張子CSVにすれば一発で自動認識されるんだったかな。
Unicode対応は、先頭にBOMをいれるだけでいいよ。
そうすると「,」がセパレータとして認識されないんスよ。新しいやつだと行けるのかもしれんけどOffice 2010あたりではそうなってた。今手元にあったOffice 2003(古っ)でも同じ。外部データの取り込みでやればいけるんだけど自動認識だと強制でタブ文字区切り。
ファイルの保存で出てくる選択肢に準拠してるっぽくてキャラクタ系のこの選択肢は実は3つしか無い。「テキスト(タブ区切り)(*.txt)」「Unicodeテキスト(*.txt)」「CSV(カンマ区切り)(*.csv)」Unicode(BOM付き)の時点で拡張子は無視で「Unicodeテキスト」になってて「テキスト(タブ区切り)」のUnicode版だからタブ区切りな感じ。
なのでBOMつけて、「U+0009」で区切って、各項目を文字列を示す式にして、式の中で適宜エスケープする必要がある。
保存時は'="01"ってやんなきゃいけないバッドノウハウな奴ですね(しかも表計算ソフト専用)。ファイルのダブルクリック時に”必ず”自動で取り込むのやめればいいのに…。(って、「テキストウィザード」がレガシーになったバージョンは触ったことないけど)
2E5みたいな十六進数もそうしないと化ける。
>2E5みたいな
16進数でなく 2×105 と読みそうになった.
実際そう認識されるから文字列にする必要がある
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
吾輩はリファレンスである。名前はまだ無い -- perlの中の人
保存時は値にしちゃうけど (スコア:0)
Excelって計算式を含むシート(やブック)をCSV形式で保存すると、全部、値として保存しちゃうから、読み込みも値だけなのかと思ってました。
実は計算式や関数を含むCSVを読み込んで、評価してくれるんですね。
今さらこれを知っても、何かに使える気はしないけど…。
Re:保存時は値にしちゃうけど (スコア:1)
Excelって計算式を含むシート(やブック)をCSV形式で保存すると、全部、値として保存しちゃうから、
・CSVはセルの書式を含まない
・CSVが読み込まれる際は大抵デフォルトで「標準」書式となる
・「標準」書式は数値や式として機能する
故に
「2,3,=a1*b1」こういうCSVだと
C1は6になるのですよ
ただし
「2,3,"=a1*b1"」とした場合
Cは「=a1*b1」という文字列になります
あぶないよねー
ぴたごらぴたごら
Re:保存時は値にしちゃうけど (スコア:1)
追伸
LibreOfficeも同様です
Re: (スコア:0)
ダブルクォートで囲っていても、文字列ではなく標準書式として解釈されるのが納得いかん。
Re: (スコア:0)
ダブルクォートで囲っていても、文字列ではなく標準書式として解釈されるのが納得いかん。
そんなときは「''」シングルクォーテーションで
Re: (スコア:0)
カンマ区切りの数値か、小数点がカンマな国でCSV形式で保存するにはダブルクォーテーションで囲むしか無いからだったりして。
他AC氏も書いてるように表計算ソフトだと、文字列はシングルクォートだし。
Re:保存時は値にしちゃうけど (スコア:1)
EXCELに関数あるけどCで書かれたライブラリが見つからなかった時
CSVに書き出して、EXCELで開いて保存、再読み込みとかしたことがある
Re: (スコア:0)
01
のような頭の 0 が、ただの CSV だと消えてしまいますが、
="01"
のように式で表現すると 01 と 0 つきで表示されます。
多分こんな感じで他にも応用がありそう……
Re: (スコア:0)
内部的にはあくまで式で、文字列の 01 じゃないので使いたくないなぁ。
Re: (スコア:0)
まぁ、CSVで式とか保存しないで、表計算ソフトのファイルでありながらテキストなSYLKとか使う方が幸せになれますよ。
ちゃんとデータ型も保持されますし。
Re: (スコア:0)
内部的にはあくまで式で、文字列の 01 じゃないので使いたくないなぁ。
文字列で入れたいなら、`01 では?
Re: (スコア:0)
それだと区切り文字が入力できないんで="文字列"の形にした上で文字列内の二重引用符などをエスケープ(二重にすればいいんだったかな)するのが一番駄目文字の少ない方法だった気がする。
Unicode文字への対応も含めると、カンマ区切りのCSVをUnicodeにしても駄目で、
タブ文字区切りのTSVをUnicodeで保存して拡張子CSVにすれば一発で自動認識されるんだったかな。
Re:保存時は値にしちゃうけど (スコア:2)
Unicode対応は、先頭にBOMをいれるだけでいいよ。
Re: (スコア:0)
そうすると「,」がセパレータとして認識されないんスよ。
新しいやつだと行けるのかもしれんけどOffice 2010あたりではそうなってた。
今手元にあったOffice 2003(古っ)でも同じ。
外部データの取り込みでやればいけるんだけど自動認識だと強制でタブ文字区切り。
ファイルの保存で出てくる選択肢に準拠してるっぽくてキャラクタ系のこの選択肢は実は3つしか無い。
「テキスト(タブ区切り)(*.txt)」「Unicodeテキスト(*.txt)」「CSV(カンマ区切り)(*.csv)」
Unicode(BOM付き)の時点で拡張子は無視で「Unicodeテキスト」になってて
「テキスト(タブ区切り)」のUnicode版だからタブ区切りな感じ。
なのでBOMつけて、「U+0009」で区切って、各項目を文字列を示す式にして、式の中で適宜エスケープする必要がある。
Re: (スコア:0)
保存時は
'="01"
ってやんなきゃいけないバッドノウハウな奴ですね(しかも表計算ソフト専用)。
ファイルのダブルクリック時に”必ず”自動で取り込むのやめればいいのに…。
(って、「テキストウィザード」がレガシーになったバージョンは触ったことないけど)
Re: (スコア:0)
2E5みたいな十六進数もそうしないと化ける。
Re:保存時は値にしちゃうけど (スコア:1)
>2E5みたいな
16進数でなく 2×105 と読みそうになった.
Re: (スコア:0)
実際そう認識されるから文字列にする必要がある