2012-08-17 10 views
5

私はCxDBGridからExcelファイルにデータをエクスポートしています。 ファイルを作成してその中にデータをコピーできますが、列の書式設定に問題があります。私はDBからデータを取り出すので、スプレッドシートにNUMBER、VARCHAR2、DATEなどの型を反映させたいと思います。私は視覚的にマクロを作成し は、VBAコードを探しに行き、Delphiのプロジェクトでそれを複製し:Excelの列の種類と書式を設定するにはどうすればよいですか?

sheet.Columns[K+2].NumberFormat := '0,000'; //Number 
sheet.Columns[K+2].NumberFormat := '@'; //Text 
sheet.Columns[K+2].NumberFormat := 'm/d/yyyy'; //Date 

番号の書式作品OK回のほとんどを、しかし、他の2つはありません。 生成されたファイルを開くと、テキスト列が「カスタム」タイプとして表示され、すべてのセルに「-64」と表示されます。セルを編集する場合は、実際に正しい値が表示されます。 日付は別の問題です:DBのフォーマットはdd/mm/yyyyです。そのままExcelにフィードすると、すべてがうんざりになります。私は正しい形式を設定しようとしましたが、Excelはそれを認識しません。

手がかりはありますか?

また、列幅も設定しています。それは完璧に動作します。

+0

Developer Expressコンポーネントを参照していると思われる場合は、cxDbGridといいます。その場合は、Developer Expressが提供するExportGridToExcel()プロシージャを使用してExcelにエクスポートしていますか? –

+0

私はそれを試みましたが、データ型の設定に問題があります。だからこそ私は手動でやりたいものです。 – asg2012

+0

ExportGridToExcel()は、エクスポート時にデータ型や書式設定に関連する問題なく、いくつかの場所を使用します。あなたのコードを見ることなく、それがあなたのためにうまくいかなかった理由を理解することは困難です。独自のエクスポートを作成する手間を覚えるのではなく、Developer Expressサポートサイトでお手伝いできることをお伺いします。彼らのサポートは素晴らしく、通常はソリューションを手早く手に入れることができます。 –

答えて

3

「あなたは手動で何をやっているのか」という言葉は、あなたがしていることを完全に推測しなければならないということです。私はこのコンポーネントでestensive経験を持っているあなたが開発者エクスプレス からExpressのスプレッドシートコンポーネントを使用していると仮定した場合

  1. :だからここに私の野生の推測です。任意の数値形式はサポートしていません。ちょうど2桁の小文字の "money"形式(0.00)をサポートしています。 3つまたは1つの小数点以下の桁数はサポートされていません。 これは、Expressスプレッドシートの設計上の既知の問題です。

  2. 上記の「シート」がOLEオブジェクトであり、OLEオートメーションを介してExcel自体と通信していることを手動で指定した場合は、CELLSを個別に、または列ではなく範囲としてフォーマットする必要がありますオブジェクト。私は列のオブジェクトの形式は、セルの値をオーバーライドする方法は、まったくない場合は、私はよく分かりません。細胞のフォーマットは、通常、細胞物質による細胞であり、そのように扱われなければならない。

  3. これが正しく動作するようにするには、OLEオートメーションでExcelを使用しないでください。適切なExcel XLSフォーマット対応のライティングライブラリが用意されています。私はCX(DevEx)dbグリッドから適切な結果を直接得ることができると確信していましたが、ここではなくフォーラムで質問します。通常のDBグリッドでは、Jedi JVCLに付属のTJvDBGridExcelExportを使用するだけで、通常のVCL DB Gridで動作します。

4

問題は、割り当てられた値がUnicode文字列であることです。これを試してみてください:

sheet.Columns[K+2].NumberFormat := AnsiChar('@'); 
sheet.Columns[K+2].NumberFormat := AnsiString('m/d/yyyy'); 
関連する問題