MS Excelで開いたCSVドキュメントにデフォルトで設定を適用する

MS Excelで開いたCSVドキュメントにデフォルトで設定を適用する

私たちが開発中のシステムのエンドユーザーには、MS Excel で開く単純な CSV ファイルが提供されます。列の 1 つには、数値の文字列で構成されるエントリが含まれます。これらは数値ではなく識別子です。この列に適用されたデフォルトの書式設定により、エントリが大きな数値として解釈され、その後科学的記数法でレンダリングされることに気付きました。これはすでにユーザー エクスペリエンスを低下させていますが、さらに悲惨な状況になります。ファイルを保存すると、データは単精度浮動小数点値として解釈され、6 桁目以降のすべての桁が完全に切り捨てられます。ユーザーが保存前に列が正しく表示されるように書式設定を変更すると、Excel はこの動作を示さず、保存時にデータが破損することはありません。

(1) 列の形式を変更するか、(2) 数式の評価を無効にすると、両方の問題が発生しなくなることがわかりました。

さて、私の質問は、MS Excel で CSV タイプのファイルを開いたときに、上記のいずれかのアクション、または上記の問題を防ぐその他のアクションをデフォルトで実行することは可能でしょうか。エンド ユーザーが Excel 形式のファイルを含むすべてのファイルで数式の実行を無効にする必要があることをクライアントに納得してもらうのは、おそらく不可能に近いでしょう。グローバル設定を行う方法はありますか。特に CSV の処理方法を構成する方法はありますか。開かれたすべての CSV ファイルで実行されるマクロをユーザーの Excel インストールに配布する方法はありますか。

答え1

Excel アドインを作成することでこれを実現できることがわかりました。ワークブックを開いたときに、次の操作を実行できます。

// set format of everything to text
Wb.ActiveSheet.UsedRange.NumberFormat = "@";

// disable further formatting - may not be necessary
Wb.ActiveSheet.EnableFormatConditionsCalculation = "false";

// for any existing cells, overwrite the formatted data with the real data, e.g., the formula
Wb.ActiveSheet.UsedRange.Value = Wb.ActiveSheet.UsedRange.Formula;

これは Excel 2010 では機能します。

関連情報