Delphi4でExcel2002のデータを読み込んでいますが、途中に時間指定の項目があると誤って読み込みます。
E_WorkSheet.Cells[A,B].Valueで文字形式として読み込んでいますが、読み込む前に項目指定を判断して、時間項目やユーザー指定のとき、形式を変更して読み込みたいのですが御教授お願いいたします。
時間が経過しているので,すでに解決済みかも知れませんが...
Delphi4(半角にしました)ではちょっと明確に分からないのですが.
>時間指定の項目があると誤って読み込みます
この誤ってという状況が不明なのでパス.
実際に動作する(エラーがあっても)コードがあればお役に立てるかも
知れません.
>読み込む前に項目指定を判断して 時間項目やユーザー指定のとき
時間や日付について言えば,多分無理だと思います.
なぜなら,日付時間は,内部的には単なる数値だからです(Delphiでは
Double型).それを日付として扱うか,数値として扱うかはアプリ次第
です.
もし,エクセルの書式に関係する情報であれば
Rangeオブジェクト(今回の場合は,
E_WorkSheet.Cells[A,B]
のNumberFormatあるいは,NumberFormatLocalプロパティで取得できます.
ともにOleVariant型です.
コードのA,Bが全角ななっていますが,Delphi4では全角の変数が使用可能?
ということはないですよね.今回は問題ないですが,コードを記述する際
は(特に質問される方は),コピペ可能にしておくといいですね.
レスする人が確認しやすいように.
Mr.XRAY 回答ありがとう御座います。どなたもコメントいただけないのであきらめていました。
>時間指定の項目があると誤って読み込みます
>この誤ってという状況が不明なのでパス.
エラーが発生するわけではなく、読み込んだ結果が0.375とか0.70833・・・とかになりエクセル画面では、9:00:00や17:00:00の時間項目です。エクセルのセルの書式の表示形式を文字型に変更しても読込結果と同じ状態になるため、時間項目のセルを時間データとして読み込みたいと考えてみますた。
>コードのA,Bが全角ななっていますが
すみません、変数名が長かったので書き換えました。実際はセルの場所を指定する変数名です。
E_WorkSheet.Cells[LNO,KNO+PNO].Valueでデータを読み込んでいますが、Valueの代わりにStateのようなもので時間項目と判定して時間データを文字形式で読みたいのですが、そのような方法はないのですか。
> 読み込んだ結果が0.375とか0.70833・・・とかになりエクセル画面では、9:00:00や17:00:00の時間項目です。
1日を1として計算するとよいかと思います。
1/24*9=0.375
1/24*17=0.7083...
確か単純にこういうことだったかと。
>結果が0.375とか0.70833・・・とかになりエクセル画面では、9:00:00や17:00:00の時間項目です
残念ですが,これは正常な結果なんです.
にしのさんのレスの通りなんです.
Delphiの日付型は,小数点以下が時刻,整数部分が日単位となっています.
したがって,
エクセルと同じ表示にしたければ,Sを取得した値として
FormatDateTime('hh:nn:ss ',S);
時分秒で表示したければ
FormatDateTime('hh時nn分ss秒 ',S);
ということになります.
にしのさん、Mr.XRAY 回答ありがとう御座いました。
お礼の返事遅くなってすみません。
ツイート | ![]() |