- ベストアンサー
数値データを書式毎に表示結果を加工する処理方法について
開発環境は、VisualC++6(SP3)です。 【数値データ】を書式毎に表示結果を加工する処理について、 独自処理PGを作成しました。 (Excelセル書式の表示書式-ユーザ定義で「#,###」等の様に、 指定された書式へ変換する事) が、不具合が多く困っております。 (独自PGということもありパターンによってはExcel通りに動かない) これを、独自処理などではなく、例えば、 MFCのクラスとかAPIなどその他を使って、 正確にExcelの表示書式に近い加工処理を行うPGの方法について あるいはヒントなどございましたら、ご教示くださいませ。 (変換例(1)) 書式 :#,###.# 実データ: 1987.65 ↓ 加工後 :1,987.7 (Excelと同じ動き) (変換例(2)) 書式 :#,##0.00 実データ:-20000 ↓ 加工後 :-20,000.00 (Excelと同じ動き)
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
qwertyさんの解説にあるように、VBのFormat関数の機能が使えそうですね。 そうすると、(開発中のMFCのプロジェクトにもよるのですけど) VBで作成したActiveXDLLをVC側から利用することができるので、 VBのFormat関数の機能をエクスポートするDLLを作ってしまいましょう。 ただし私は、「時間がない自信がない」などのときに、 最後の手段としてこの手段を使います。 何故かっていうと、とてもアクが強いというか..使いづらいのです。 まあ経験なんでしょうけどね。 ・ActiveXの仕様を熟知して、さらに、こちらのプロジェクトをあわせなければいけない。 ・一度VCにタイプライブラリとしてインポートしてしまうと、VB側で発生した変更点をVCに反映する際に面倒くさい。 (これは、ClassWizardがオートでいろいろやってくれますので、変更反映の際は、 依存関係をすべて切り離さないといけません。) ・配布のときのライブラリ依存が複雑になるかも。(VBランタイムだけかな..?) などなど..つまり、処理を外出しする分、外覧が増えることが最大の欠点ですね。 長所としては、VB標準のランタイムを使うので、 処理的なバグに悩むことは、ほぼなくなります。 Excel準拠で確実さ・安定性を求めるなら、お勧めします。 まあ自分で処理を書かずに楽するわけですから、我慢すれば使えます。 参考URLで使い方からサンプルまで、懇切丁寧に書いてありますよ。 参考になれば幸いです。
その他の回答 (2)
- qwerty
- ベストアンサー率43% (20/46)
こんにちは。 できそうな気がしますなんて、無責任なコメントでした。 平謝りでございます。 CStringのFormat()メンバ関数はprintf()ですもんね・・・。 桁区切りのカンマは入れられないですね。 すっかりVBのFormat関数と混同しておりました。 数年前にVC5.0で作ったと思っていたものは、 実はVB5.0で作成していたようです。 大反省です。 申し訳ありませんでした(汗) ただ、専門家の方ならぼくの思いつかない方法をご存知かもしれませんので、 その方々にご登場頂けることをご一緒にお祈り申し上げます。
- qwerty
- ベストアンサー率43% (20/46)
おはようございます。 おやりになりたいことは、 CStringクラスのFormatメンバ関数で出来そうな気がしますが・・・。
補足
以下のように処理をしてみましたが、 結果は「#,###.#」になってしまいました。 <処理内容> CString str = "1987.65"; str.Format("#,###.#", str); 結果が「1,987.7」にするためには、 どのようにすればよいでしょうか?
お礼
分かりやすいご回答、ありがとうございました♪ VBのDLLで対応する案、とても参考になりました。 今後のプロジェクトにて、検討しようと思います。 (今回は、諸事情があって、現状のままの仕様となりました。ToT;)