6

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

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

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

手がかりはありますか?

列幅も設定しています。それは完璧に機能します。

4

2 に答える 2

6

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

sheet.Columns[K+2].NumberFormat := AnsiChar('@');
sheet.Columns[K+2].NumberFormat := AnsiString('m/d/yyyy');
于 2014-06-04T09:49:07.577 に答える
3

あなたは「手動で物事をどのように行っているか」を述べていません。つまり、人々はあなたが何をしているのかを完全に推測する必要があります。だからここに私の野生の推測があります:

  1. Developer Express の Express Spreadsheet コンポーネントを使用していると仮定すると、私はこのコンポーネントについて豊富な経験を持っています。任意の数値形式はサポートしていません。小数点以下 2 桁の「money」形式 (0.00) をサポートしています。3 桁、1 桁、またはその他の小数点以下の桁数はサポートされていません。その場合、これは Express スプレッドシートの設計上の既知の問題です。

  2. 上記の「シート」が OLE オブジェクトであり、OLE オートメーションを介して Excel 自体と通信していることを手動で意味する場合は、列オブジェクトではなく、セルを個別にまたは範囲としてフォーマットする必要があります。列オブジェクトのフォーマットがセルの値をオーバーライドする方法がまったくわかりません。セルの書式設定は、通常、セルごとの問題であり、そのように処理する必要があります。

  3. これを正しく機能させたい場合は、OLE オートメーション経由で Excel を使用しないでください。適切な Excel XLS フォーマット対応の書き込みライブラリを取得します。CX (DevEx) db グリッドから直接適切な結果が得られると確信していましたが、ここではなくフォーラムで質問します。通常の DB グリッドでTJvDBGridExcelExportは、Jedi JVCL に含まれていて、通常の VCL DB グリッドで動作するものを使用します。

于 2012-08-18T17:36:26.403 に答える