6

Delphi 2010 を使用して Excel スプレッドシートを読み書きする必要があります。異なるシートの特定のセルと範囲から値を読み書きするだけです。Excel をインストールせずに動作し、Excel 2007 をサポートする必要があります。

私が見たいくつかのこと:

  • シート全体のすべてを選択するのに問題なく機能するADOを使用してみましたが、特定のセルまたは範囲を読み取るのはあまりうまくいきませんでした。

  • NativeExcelは有望に見えましたが、活発な開発が行われていないようで、電子メールに応答しません。

  • Axolotにはいくつかの製品があります。主な製品は非常に機能的であるように見えますが、高価です. 軽量版もありますが、Delphi 2010 には対応していません。

推奨事項はありますか?無料は素晴らしいことですが、信頼性が高く、十分にサポートされている限り、商用ソリューションを受け入れます。

4

10 に答える 10

7

Excel シートがかなり単純な行/列レイアウトであれば、私は ADO で非常に幸運でした。

私が見つけた ADO を使用する際の鍵は、Excel シートをデータベースのように扱うことです。Excel シートが主に直線的な行と列のレイアウトである場合は、行をデータベース レコードとして扱い、列をフィールドとして扱います。最初に特定の列 (フィールド) 値 (できれば一意のもの) を検索して目的の行に移動し、次に列名であるフィールドを参照してその行の目的のセルを読み取ります。

Excel シートがより自由な形式である場合、それはより困難になります。

于 2010-03-17T20:11:16.483 に答える
7

TMS Flexcel - Excel のレポート コンポーネントのように見えますが (これは非常にうまく機能し、ツールキットに含めると非常に便利なツールです)、Excel ファイルを読み取って表示するためのコンポーネントも含まれています。Adrian Gallero が Excel 2007 を含む Excel API に精通しているように見えることに、私は非常に感銘を受けました。

http://www.tmssoftware.com/site/flexcel.asp

もちろん無料ではありませんが、75 ユーロでお得だと思います。

于 2010-03-17T19:49:50.600 に答える
3

http://www.scalabium.comの SMImport / SMExport をお勧めします

マイクはいつも本当に役に立ち、迅速に対応してくれました。

于 2010-03-22T11:53:29.077 に答える
3

NativeExcel を軽視しないでください。私はそれを数年間使用しており、優れた結果が得られています。高速で用途が広いです。私はそれを使用して、固定されたペイン、セル内の数式、クライアントのデータベースからのデータを含む適切にフォーマットされた複数ページのスプレッドシートを作成し、クライアントが入力に使用してから私に送り返します. クライアントは、私から最初のスプレッドシートを受け取ったとき、ワークロードが大幅に削減され、かなり直感的に使用できるため、非常に感激しました。

過去 2 年間にパッケージを少なくとも数回更新したため、なぜ彼らがあなたに応答しなかったのかわかりません。免許が切れたら、必ず更新するつもりです。

于 2010-03-17T21:12:13.723 に答える
2

本当に役立つのは、Excelファイルのレイアウトをなんらかの方法で制御できるかどうかです。

データとテストコントロールがすべてExcelスプレッドシートに含まれている、ユニット全体と受け入れテストフレームワークを構築しました。

私はすべてをADOで行いました。ADO SQLクエリをシート全体、名前付き範囲、または問題の任意の範囲に制限できます。私の意見と経験では、この方法は非常に強力です。

私にいくつかの問題を引き起こした2つのこと:1。シートの名前に応じて、ADOはそれらを表示する場合と表示しない場合があります(ここでも、レイアウトを制御できる場合は素晴らしいです!)2.ADOが返すデータ型に注意してくださいデータを読み取るとき、つまり数値が文字列として表示される場合があります。これは、ADOがIIRCで、最初の数行に基づいてデータ型を推測しようとするためです。

免責事項:私は上記のツールのいずれも使用したことがありません。ADOが私に代わってトリックを行い、フレームワークのコードを記述したので、よりコントロールしやすくなりました(ADOの部分は明らかに保存してください...)。

于 2010-03-18T02:12:33.013 に答える
2

Bruce さん、私は Axolot XLSReadWriteII コンポーネントを 10 年間使用してきました。それは非常にうまくいっているし、彼らのサポート フォーラムは (コンテンツは少ないが) よく監視されているようだ. XLSReadWriteII2 バージョンは非常に高速で、チャートやグラフィック、名前付き範囲、オンザフライでの数式の追加、セルの書式設定 (境界線と陰影、セルのマージ、垂直方向と水平方向の配置、自動幅の列のサイズ変更など) など、あらゆる種類のものをサポートしています。など)。

Excel XP 形式のファイルを引き続き使用できるため、最新バージョンにアップグレードしていません (まだ XLSReadWriteII2 を使用しています)。また、XLSMini はまったく使用していません。ただし、完全な製品については本当に良いことを言うことができます。実際、私はこの 1 週間、いくつかのデータベース エクスポートに使用しました。

あなたがその道を行くことに決めたなら、役立つかもしれないさまざまなことを行う方法についてのメモがたくさんあります。それらが必要な場合は、メモをドロップしてください。また、さまざまな書式設定と配置を行う方法を示すだけの Delphi 2007 アプリもあります。私は実際に、既存のかなり複雑なレポートを Excel で再現しました。すべての形式、罫線などを完備しており、喜んで同様に提供させていただきます。

免責事項: 私は Axolot やその従業員とは何の関係もありません。前職でこの製品を知り、今の仕事を始めた時に感銘を受けて購入した、とても幸せなお客様です。

于 2010-03-18T13:00:36.063 に答える
1

オプションを含めるよりもhttp://www.connectionstrings.com/excelのような ADO 接続文字列を使用できます (ADO 接続文字列の 3 番目のタブ)。

Extended Properties=Excel 8.0;HDR=Yes;IMEX=0  

セキュリティ上の理由から、Microsoft は変更を防止します (IMEX=1 を使用) http://support.microsoft.com/kb/904953/en サンプル SQL (括弧を忘れないでください):

SELECT * FROM [Sheet1$]

あなたができない唯一のことは、削除です: http://support.microsoft.com/kb/257819/en したがって、行を削除するには、行を空にします! ADO 経由で SQL を使用してエクスポートすることもできます。

YourADOConnection.Execute('SELECT * INTO aSheet IN "'+ExtractFilePath(ParamStr(0))+'Exported.xls" "Excel 8.0;" FROM YourTable');
于 2012-02-08T20:37:20.900 に答える
1

幸運なことに、私はここ数年 Axolot を使用しています。サポート フォーラムにはメッセージがあふれているわけではありませんが、それはサポート フォーラムがうまく機能しているからでしょうか?

于 2010-03-17T20:42:30.670 に答える
1

Axolot の XLSMini (lite) バージョンは気にしないでください。どちらもまだ購入していませんが、2008 年の初めに Excel 2007 のサポートについて尋ねたところ、Lars は、XLSMini は XLSReadWriteII に基づいており、両方とも Excel 2007 のサポートで同時に更新されると教えてくれました。XLSReadWriteII は、2008 年 4 月から Excel 2007 をサポートしています。XLSMini にはまだありません。

于 2010-03-17T19:28:13.530 に答える
0

マシンに Excel をインストールする必要がないオプションを選択することをお勧めします。Excel をインストールしなくても、1 つのシートにいくつかのデータを簡単に入力できるコンポーネントを使用したことがあります。また、Excel シート自体でほとんどの Excel 作業を行います。コンポーネントを使用して、シートにデータを入力するだけです。

私の2カラット。

于 2010-03-18T08:10:31.080 に答える