パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

CSVファイル経由で感染するウイルス(ただしExcel限定)が話題に」記事へのコメント

  • by Anonymous Coward on 2018年06月01日 15時56分 (#3418042)

    Excelって計算式を含むシート(やブック)をCSV形式で保存すると、全部、値として保存しちゃうから、読み込みも値だけなのかと思ってました。

    実は計算式や関数を含むCSVを読み込んで、評価してくれるんですね。

    今さらこれを知っても、何かに使える気はしないけど…。

    • by Anonymous Coward on 2018年06月01日 20時43分 (#3418200)

      Excelって計算式を含むシート(やブック)をCSV形式で保存すると、全部、値として保存しちゃうから、

      ・CSVはセルの書式を含まない

      ・CSVが読み込まれる際は大抵デフォルトで「標準」書式となる

      ・「標準」書式は数値や式として機能する

      故に
      「2,3,=a1*b1」こういうCSVだと
      C1は6になるのですよ

      ただし
      「2,3,"=a1*b1"」とした場合
      Cは「=a1*b1」という文字列になります

      あぶないよねー
      ぴたごらぴたごら

      親コメント
      • by Anonymous Coward on 2018年06月01日 20時44分 (#3418201)

        追伸
        LibreOfficeも同様です

        親コメント
      • by Anonymous Coward

        ダブルクォートで囲っていても、文字列ではなく標準書式として解釈されるのが納得いかん。

        • by Anonymous Coward

          ダブルクォートで囲っていても、文字列ではなく標準書式として解釈されるのが納得いかん。

          そんなときは「''」シングルクォーテーションで

        • by Anonymous Coward

          カンマ区切りの数値か、小数点がカンマな国でCSV形式で保存するにはダブルクォーテーションで囲むしか無いからだったりして。
          他AC氏も書いてるように表計算ソフトだと、文字列はシングルクォートだし。

    • EXCELに関数あるけどCで書かれたライブラリが見つからなかった時
      CSVに書き出して、EXCELで開いて保存、再読み込みとかしたことがある

      親コメント
    • by Anonymous Coward

      01
      のような頭の 0 が、ただの CSV だと消えてしまいますが、
      ="01"
      のように式で表現すると 01 と 0 つきで表示されます。

      多分こんな感じで他にも応用がありそう……

      • by Anonymous Coward

        内部的にはあくまで式で、文字列の 01 じゃないので使いたくないなぁ。

        • by Anonymous Coward

          まぁ、CSVで式とか保存しないで、表計算ソフトのファイルでありながらテキストなSYLKとか使う方が幸せになれますよ。
          ちゃんとデータ型も保持されますし。

        • by Anonymous Coward

          内部的にはあくまで式で、文字列の 01 じゃないので使いたくないなぁ。

          文字列で入れたいなら、`01 では?

          • by Anonymous Coward

            それだと区切り文字が入力できないんで="文字列"の形にした上で文字列内の二重引用符などをエスケープ(二重にすればいいんだったかな)するのが一番駄目文字の少ない方法だった気がする。
            Unicode文字への対応も含めると、カンマ区切りのCSVをUnicodeにしても駄目で、
            タブ文字区切りのTSVをUnicodeで保存して拡張子CSVにすれば一発で自動認識されるんだったかな。

            • Unicode対応は、先頭にBOMをいれるだけでいいよ。

              親コメント
              • by Anonymous Coward

                そうすると「,」がセパレータとして認識されないんスよ。
                新しいやつだと行けるのかもしれんけどOffice 2010あたりではそうなってた。
                今手元にあったOffice 2003(古っ)でも同じ。
                外部データの取り込みでやればいけるんだけど自動認識だと強制でタブ文字区切り。

                ファイルの保存で出てくる選択肢に準拠してるっぽくてキャラクタ系のこの選択肢は実は3つしか無い。
                「テキスト(タブ区切り)(*.txt)」「Unicodeテキスト(*.txt)」「CSV(カンマ区切り)(*.csv)」
                Unicode(BOM付き)の時点で拡張子は無視で「Unicodeテキスト」になってて
                「テキスト(タブ区切り)」のUnicode版だからタブ区切りな感じ。

                なのでBOMつけて、「U+0009」で区切って、各項目を文字列を示す式にして、式の中で適宜エスケープする必要がある。

      • by Anonymous Coward

        保存時は
        '="01"
        ってやんなきゃいけないバッドノウハウな奴ですね(しかも表計算ソフト専用)。
        ファイルのダブルクリック時に”必ず”自動で取り込むのやめればいいのに…。
        (って、「テキストウィザード」がレガシーになったバージョンは触ったことないけど)

      • by Anonymous Coward

        2E5みたいな十六進数もそうしないと化ける。

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

処理中...