Delphi8でExcelを操作するには?

解決


開けエクセル  2004-10-20 07:04:53  No: 11441

Delphi6では、Excelからの読み込み、Excelへの書き込みができたのですが、
Delphi8では、コンパイルが通りません。
あまりにも初歩的な質問で申し訳ありませんが、
Delphi8でのExcelの起動方法、読み込み、書き込みの例を教えていただけないでしょうか?
その際、Uses節や、typeなどにも記述しなければならないものがあれば全て教えてください。よろしくお願いします。


bob  2004-10-22 00:20:29  No: 11442

Delphi8は.NETのフレームワークを使うか、VCLを使うかで処理がわかれます。
どちらをお使いですか?


開けエクセル  2004-10-22 19:03:31  No: 11443

bobさん
VCLフォームアプリケーションで作成しています。
Delphi6ではCreateOleObject('Excel.Application')で呼び出せたのですが、Delphi8になり、CreateOleObjectが使えないようなので、CreateComObjectという関数を使えばよいのか?、と途方にくれています。
CreateComObjectの引数を'Excel.Application'とすると、

[エラー] Unit1.pas(32): 'Guid' と 'string' には互換性がありません

となってしまいます。

解決方法をご存知でしたら、教えてください。よろしくお願いします。


bob  2004-10-22 22:58:28  No: 11444

D8は家にしか無いので、土日に試してみます。


開けエクセル  2004-10-23 05:04:54  No: 11445

bobさん
ありがとうございます。よろしくお願いいたします。


bob  2004-10-24 02:20:40  No: 11446

やっと出来た。めんどくせー^^;
一応意図したとおりに、動きましたが合ってるか不明

環境:D8Pro + Office2003 + XP + .NET Framework 1.1

手順:
1.新規VCLフォームアプリケーションを作成
2.[参照の追加]-[COMインポート]で"Microsoft Excel 11 Object Library"を選択
3.Formにボタンを貼り付け
4.usesにComObjとExcelを追加
5.ボタンのクリックイベントに以下のソースを割り当て
−−−
procedure TForm1.Button1Click(Sender: TObject);
Var
  objExcel: Tobject;
  objApp: Excel.Application;
  objBook: Excel.Workbook;
  objSheet: Excel.Worksheet;
begin
  objExcel := CreateComObject(ProgIDToClassID('Excel.Application'));
  objApp := (objExcel as Excel.Application).Application;
  objBook := objApp.Workbooks.Add(system.Type.Missing);
  objSheet := objBook.Worksheets.Add(system.Type.Missing, system.Type.Missing,
                                     system.Type.Missing, system.Type.Missing);
  objSheet.Cells[TObject(1), TObject(2)] := 'test';
  (objApp as Excel.Application).Quit;
  objExcel := Unassigned;
  objBook := Unassigned;
  objSheet := Unassigned;
end;
−−−

P.S.
ソース見ればわかると思いますが、ClassNameからGUIDを取得するにはProgIDToClassIDで出来ます。

でもヘルプには
> CreateComObject は,オブジェクトと情報をやり取りするために使用されるインターフェースへの参照を返します。CreateComObject の場合,このインターフェースは IUnknown 型です。IDispatch 型のインターフェースへの参照を返す OLE オブジェクトを作成するには,CreateOleObject を使用します。
って書いてあるから、CreateOleObjectがあってもいい気がするけどね^^;

参考:
http://www.microsoft.com/japan/msdn/officedev/vsto2003/ExcelObj.asp


開けエクセル  2004-10-26 18:50:08  No: 11447

bobさん

すごい!
できました。どうもありがとうございます。

度々、すみませんが指定ファイルを開く場合は
どうしたらよいのでしょうか。
応用がきかずにすみません。本当に初心者なのです。

下記のようにすると
objBook:=objApp.WorkBooks.Open(ExtractFilePath(ParamStr(0))+'test.xls');

[エラー] Unit1.pas(34): 指定された引数で呼び出すことのできるオーバーロード関数 'Open' が定義されていません
と怒られてしまいます。
簡単に解決するようでしたら、教えてください。
よろしくお願いいたします。


にしの  2004-10-26 20:58:05  No: 11448

Openメソッドの第2引数にfalseを指定してもダメですか?
# Delphi8を持っていないので確認できないですが


bob  2004-10-27 18:22:09  No: 11449

D8は、2月のカンファレで購入して以来、全然さわってなかったので試行錯誤の連続ですが、まぁ何となくわかってきました。

試していませんが、system.Type.Missingか、にしのさんのアドバイス通りFalseで試してみてください。

P.S.
VB.NETやC#のサンプルなら見つかると思いますが、基本的にVB.NETのサンプルの省略引数はC#ではType.Missingとなっています。
よってDelphiでもType.Missingでコンパイルが通るようです。


開けExcel  2004-10-28 23:57:31  No: 11450

bobさん にしのさん

アドバイスありがとうございました。
後ほど、試してみます。
勘でできてしまう、皆様がうらやましいです。


開けExcel  2004-11-01 18:21:43  No: 11451

bobさん、にしのさん、どうもありがとうございました。
大変助かりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加