1

マップ アプリケーションからデータをエクスポートするアプリケーションを作成しています。このアプリケーションは Silverlight を使用しており、Excel へのエクスポートを容易にするために、このライブラリを使用しています。デフォルトでは、すべてのデータが文字列で表されます。スプレッドシートに書き込むとき、各文字列を解析して、それがどのタイプであるかを確認しようとします。

string str = kvp.Value;
int i = 0;
long l = 0;
decimal dec = 0;
DateTime dt;
if (int.TryParse(str, out i))
    doc.Workbook.Sheets[0].Sheet.Rows[r].Cells[c].SetValue(i);
else if (decimal.TryParse(str, out dec))
    doc.Workbook.Sheets[0].Sheet.Rows[r].Cells[c].SetValue(dec);
else if (long.TryParse(str, out l))
    doc.Workbook.Sheets[0].Sheet.Rows[r].Cells[c].SetValue(l);
else if (DateTime.TryParse(str, out dt))
    doc.Workbook.Sheets[0].Sheet.Rows[r].Cells[c].SetValue(dt);
else
    doc.Workbook.Sheets[0].Sheet.Rows[r].Cells[c].SetValue(str);

これは、DateTime と、私の場合は 12 文字の長さの社会保障番号を解析しようとする場合を除いて、うまく機能します。

社会保障番号は 10 進数として解析され、Excel では科学形式で表示されます。私が読んで集めたものから、それはExcelの制限のようです。ただし、セルにマークを付けると、数式を記述できる上部のバーに正しい番号が表示されます。これまでのところ、この数字を文字列として単純に入力し、エンド ユーザーに処理させることでこの問題を解決しましたが、完成したドキュメントでは数字にしたいと考えています。これは可能ですか?

しかし、本当に頭がおかしくなるのは、DateTime です。日付の形式は、アプリケーションから次のようになります: 10/15/2013 1:10:00 AM。Excel ファイルでは次のようになります: 2455075。

日付の書式設定についてソース コードを確認しましたが、何か問題があるかどうかを確認するのに十分ではないようです。興味のある方は、こちらからご覧ください

SetValue 関数は、次のタイプを自動的に識別すると想定されています。

  • ブール
  • 日付時刻
  • 小数
  • 例外
  • SharedStringDefinition
  • ストリング

長文失礼します。要約すると、次の質問になります。

  • プログラムで指数表記を使用せずに長い数値を Excel で処理することはできますか?
  • DateTime がこのような奇妙な形式で出力されるのはなぜですか?
4

1 に答える 1