中程度のサイズの CSV ファイル (195,000 行) があります。何らかの理由で、Excel で開いたときに数値の列を通貨としてフォーマットしようとすると、何も起こりません。ファイルを編集して、ファイル内の行のサブセットを小さく (10 ~ 20 行) 残すと、列をフォーマットできます。
これは Excel の既知の問題ですか? もちろん、実際の Excel スプレッドシート ファイルとして保存すればすべて正常に動作しますが、とにかく何が起こっているのかを知りたいです。
答え1
はい、これは Excel の既知の動作です。
Excel では CSV のインポートを設定できないため、前述の方法で影響を与えることはできません。これが問題が発生する原因です。もし可能であれば、問題が発生することはありません。
問題について説明しますが、私が言及したことを実行するための詳細はありません。インターネットで入手できますが、見つけるのに時間がかかったことを覚えています。現在、その情報がありません。その部分についてはお詫び申し上げます。
問題は、Excel が CSV などのファイルをインポートするときに、インポート時に列をどのようにフォーマットするかを決定するために、実際には各データ列の最初の 16 レコードのみを参照することです。そうです。195,000 行または 100 万行の予想されるロードであっても、16 レコードです。
これには良い点がいくつかあります。データでは、行が適切に代表的であることが多く、また、データ セット全体を読み取り、列をインポートする方法を決定する際のメモリと速度への影響も考慮する必要があります。(私自身は、その打撃を受けるでしょうが...)
しかし、1、2 か月前に私がここで遭遇した例を考えてみましょう。その例では、時間が時間と分、あるいは分と秒の形式で入力されていました。データは、実際には時間で、あるいは作成方法によって並べ替えられていた可能性が高いため、もちろん、1、2 分と数秒が開始レコードでした。これは機能的ではありませんね。
列の書式設定方法を決定する前に、Excel に任意の数のレコードを参照するように指示する方法があり、これは調査すべきことです。これが、この問題に対するプログラム内ソリューションです。
(Excel で TXT ファイルのように書式設定を強制できる場合は、事実上この側面を制御できるようになりますが、ご存知のとおり、Excel ですから...)
他のソリューションは Excel の外部にあります。たとえば、必要な書式設定を強制するフォーム/マテリアルを持つ行を先頭に追加するなどです。後で削除します。または、編集して、行の束を中央から先頭に移動します。このようなことです。まったく問題ありませんし、比較的簡単ですが、プログラム内のソリューションを好まない人はいないでしょう。
Excel には、CSV ファイルを開くだけでなく、さまざまなインポート方法が用意されています。そのうちの 1 つがニーズに合う可能性があり、必要な制御が可能になるようです。
ちなみに、独自のデータを取得して、数式と書式設定を完備した Excel スプレッドシートを作成するプログラムが直面している問題を調べていたときに、この投稿を見つけました。一部の人は、すべてのプログラミングを自分で書くのではなく、ある程度 Excel 自体を使用しているようです。確かにその通りですが、そうすると Excel の欠点の犠牲になります。もちろん、欠点ではなく機能のことですが...