2012-02-22 20 views
0

私はcfspreadsheetを使用してExcelシートを生成しています。そこの日付である列のカップルがあり、このように表示されていますspreadsheetFormatColumnを使用して列を日付としてフォーマットするにはどうすればよいですか?

1988-09-19 00:00:00.0 

私はM/D/yyyy形式で表示するには、それらをフォーマットしたいと思います。私はspreadsheetFormatColumnを使ってみました:

<cfset spreadsheetFormatColumn(s, {dataformat="m/d/yyyy"}, 8) /> 

しかし、何も変わりません。 ColdFusionを使用して列をフォーマットするにはどうすればよいですか?

+0

あなたの完全なCFのバージョンは何ですかあなたはどのようにシートにデータを入力していますか? – Leigh

+0

@Leigh - 私はCF9を使用しています。 "spreadsheetAddRows"とクエリオブジェクトを使用してシートに値を設定しています – froadie

+0

フルバージョン番号9.x.xとは何ですか?アップデート1にいくつかの変更がありました。それ以前は、必ずしもフォーマットを尊重していませんでした。したがって、回避策を使用する必要がありました。 (礼儀メモ、私は会議の権利に逃げなければなりません:)。 – Leigh

答えて

1

コメントに記載されているように、これはcoldfusionバグのようです。私はこれを回避するために、日付をSQLサーバ側のvarcharsに変換する(convert(varchar, myDateField, 101)を使用)。

0

これはバグではありませんスプレッドシート関数を使用してセルに入れた値はfloatでなければならず、「12/25/2012」のような日付文字列でなければなりません。

フロートは私の研究は、Excelが1/1/1900 00:00:00として1を扱うことがわかったエポック、からの日数を表している必要があります。しかし、other odd results out thereもありました。時には時代が時々、それの1日か2日だったと言われました。

私はto represent this in Oracleを見つけた方法は次のとおりです。

SELECT (TRUNC(inv_date) - TO_DATE('1899-12-30', 'yyyy-mm-dd')) 
      + TO_NUMBER(TO_CHAR(inv_date, 'SSSSS'))/86400 AS InvcDateAsFloat 

(あなた自身の日付列の名前に入れて、inv_dateで表される2つの場所があることに注意してください)

+1

私は同意しません。 OPが文字列ではなく日付/時刻オブジェクトを使用していたようです。 'now()'のような日付オブジェクトはすでに内部的に数値であり、POIでうまく動作します。したがって、理由はありません。*日付オブジェクト*は、CFを使用してすぐに使用できません。 – Leigh

+0

リー、おそらくあなたが正しいです。それはバグかもしれません。私は言葉を変えた。私はまた、OPと同じ行にあると思った私のdbの日付/時刻の列を使用していました。 – sugardaddy

+0

ええ、日付/時刻の値は「現状のまま」動くはずです(明らかにそうではありませんが)。 Btw、WindowsではExcelは1を「1/1/1900」と扱いますので、上記の日付ロジックを2回確認してください。私がMacの、[古いバージョン](http://support.microsoft.com/kb/303216)既定値は、1900の代わりに1904日付システムに既定値を読み取ったから。 – Leigh

関連する問題