Watch, Follow, &
Connect with Us

Please visit our new home
community.embarcadero.com.


Welcome, Guest
Guest Settings
Help

Thread: エクセルの指定したセルに画像を表示させるには?


This question is not answered. Helpful answers available: 2. Correct answers available: 1.


Permlink Replies: 7 - Last Post: May 16, 2017 4:26 AM Last Post By: igy kk
osamu nagao

Posts: 97
Registered: 3/22/04
エクセルの指定したセルに画像を表示させるには?  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Apr 7, 2017 11:32 PM
nagaoです。いつも教えて頂きありがとうございます。

下記のテストプログラムを実行すると、エクセルのC3のセルに文字が入力されることまでは確認しました。

しかし、"ファイルから画像を挿入"のサイト
http://blog.livedoor.jp/boon_net/archives/50713566.html
に記載されているコードに倣って、下記のテストプログラムの中の無効にしている所を有効にすると、
xlPicture := ExcelWorksheet1.Pictures.Insert('c:\test.jpg');
の行の中のInsertの所で未定義の識別子というエラーメッセージができます。

ExcelWorksheet.Pictures Propertyのページ
https://www.gemboxsoftware.com/spreadsheet/help/html/P_GemBox_Spreadsheet_ExcelWorksheet_Pictures.htm
を見ると、それらしきことが書いてありますが、具体的にどう修正したらよいのかわかりません。
どなたか教えて頂けないでしょうか?

なお、エクセルに表示させたい画像は、前もってビットマップフィルに変換することも可能ですが、表示サイズは
指定できることを希望します。

unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Excel2000, OleServer, Vcl.StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    ExcelApplication1: TExcelApplication;
    ExcelWorksheet1: TExcelWorksheet;
    ExcelWorkbook1: TExcelWorkbook;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
   xlPicture: Variant;
begin
  ExcelApplication1.Visible[0] :=  false; //エクセル表示
  ExcelWorkbook1.ConnectTo(   //ブック追加
       ExcelApplication1.Workbooks.Add(Null, 0));
  ExcelWorksheet1.ConnectTo(   //シートを ExcelWorksheetに接続
       ExcelWorkbook1.Worksheets['Sheet1'] as _Worksheet);
  ExcelWorksheet1.Range['C3', 'C3'].Value :='1111';
 
  {
  ExcelWorksheet1.Activate;
 
  // 貼り付けたい位置のセルを選択
  ExcelWorksheet1.Range['B3', 'B3'].Select;
 
  // 画像をファイルから挿入
  xlPicture := ExcelWorksheet1.Pictures.Insert('c:\test.jpg');
  xlPicture.Select;
 
  // 画像を自由に収縮(水平垂直とも0.5倍)
  xlPicture.ShapeRange.ScaleWidth(0.5, False);
  xlPicture.ShapeRange.ScaleHeight(0.5, False);
  }
 
  ExcelApplication1.Visible[0] :=  True; //エクセル表示
  ExcelApplication1.Cells.Select;                                  //すべてのセルを選択
  ExcelApplication1.Cells.EntireColumn.AutoFit;                    //オートフィット
end;
 
end.
igy kk

Posts: 129
Registered: 9/11/03
Re: エクセルの指定したセルに画像を表示させるには?  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Apr 8, 2017 6:18 AM   in response to: osamu nagao in response to: osamu nagao
試していませんが、

ExcelWorksheet1.Pictures.Insert('c:\test.jpg');

Pictures.Insertの代わりに、
ShapesオブジェクトのAddPicture メソッドを使うのは、いかがですか?

ExcelWorksheet1.Shapes.AddPicture('c:\test.jpg', ・・・・・);
osamu nagao

Posts: 97
Registered: 3/22/04
Re: エクセルの指定したセルに画像を表示させるには?  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Apr 8, 2017 3:04 PM   in response to: igy kk in response to: igy kk
igy kk さん、こんにちは。nagaoです。
レスくださいましてありがとうごいます。

ExcelWorksheet1.Shapes.AddPicture('c:\test.jpg', ・・・・・);
基本的なことですが、ExcelWorksheetクラスを解説したサイト
https://www.gemboxsoftware.com/spreadsheet/help/html/T_GemBox_Spreadsheet_ExcelWorksheet.htm
にShapesプロパティは見当たらないのですが、なぜですか?
igy kk

Posts: 129
Registered: 9/11/03
Re: エクセルの指定したセルに画像を表示させるには?  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Apr 8, 2017 3:19 PM   in response to: osamu nagao in response to: osamu nagao
osamu nagao wrote:
基本的なことですが、ExcelWorksheetクラスを解説したサイト
https://www.gemboxsoftware.com/spreadsheet/help/html/T_GemBox_Spreadsheet_ExcelWorksheet.htm
にShapesプロパティは見当たらないのですが、なぜですか?

GemBox社の製品に関しては、GemBox社に問い合わせてみるのが、よいかもしれませんね。

なお、DelphiからExcelを操作する処理に関しては、
マイクロソフトのサイトやVBAの解説をしているサイト、VBAのヘルプなど、
参考になるかと思います。

Shapes オブジェクト (Excel)
https://msdn.microsoft.com/ja-jp/library/office/ff841148.aspx

igy kk

Posts: 129
Registered: 9/11/03
Re: エクセルの指定したセルに画像を表示させるには?  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Apr 28, 2017 5:45 AM   in response to: igy kk in response to: igy kk
また、AddPicture メソッドの引数で、 Width と Height を -1 (既存ファイルのサイズを保持)でなく、
値を指定するなら、(後から Excelで開いて、「縦横比を固定して」リサイズすることがある場合は)
追加した画像のオブジェクトの LockAspectRatio プロパティを True にしておいたほうがよいかもしれませんね。
Makoto Saito

Posts: 24
Registered: 12/5/04
Re: エクセルの指定したセルに画像を表示させるには?  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Apr 29, 2017 4:13 AM   in response to: igy kk in response to: igy kk
また、AddPicture メソッドの引数で、 Width と Height を -1 (既存ファイルのサイズを保持)でなく、
サイズの話がでたので,位置の設定ですが,
セルの Range オブジェクトの Left, Topプロパティの値が利用できると思います.

Range オブジェクト (Excel)
https://msdn.microsoft.com/ja-jp/library/office/ff838238.aspx
igy kk

Posts: 129
Registered: 9/11/03
Re: エクセルの指定したセルに画像を表示させるには?  
Click to report abuse...   Click to reply to this thread Reply
  Posted: May 16, 2017 3:49 AM   in response to: igy kk in response to: igy kk
igy kk wrote:
GemBox社の製品に関しては、GemBox社に問い合わせてみるのが、よいかもしれませんね。

なお、GemBox.Spreadsheetに関しては、以前は、ComponentSource が取り扱っていたようですが、

GemBox.Spreadsheet(英語版)
https://www.componentsource.co.jp/product/gembox-spreadsheet

GemBox Software社の商品の取り扱いは終了いたしました。代わりに、同社のWebサイトをご利用ください。

とあり、現在は、取り扱っていないようですね。

また、GemBox.Spreadsheet は、.NET コンポーネントであり、GemBox Software社では、VCLコンポーネントは、
扱っていないようです。
Makoto Saito

Posts: 24
Registered: 12/5/04
Re: エクセルの指定したセルに画像を表示させるには?  
Click to report abuse...   Click to reply to this thread Reply
  Posted: Apr 28, 2017 7:42 PM   in response to: osamu nagao in response to: osamu nagao
ちょっと気づいたことを.
質問された方が最初に提示した以下のコードのことです.
xlPicture := ExcelWorksheet1.Pictures.Insert('c:\test.jpg');
Pictures.Insert メソッドは Excel 2013 では画像の挿入はできますが,
画像として表示しません.リンクとして表示されます.

[Delphi で Excel 2013 を操作する際の Tips] - Delphi Forum
http://ht-deko.com/delphiforum/?vasthtmlaction=viewtopic&t=1351

また,[Servers] タブの TExcelApplication コンポーネント等を使用する場合,
TExcelWorkSheet.Pictures は IDispatch インターフェイス型なので,
Pictures オブジェクトにキャストしないと,メソッドやプロパティにアクセスできません.

このことは,Pictures のところで [Ctrl] + [Space] キーの押下で確認できます.
したがって,Pictures の次に. (ドット) をタイプして [Ctrl] + [Space] で使用可能な
メソッやプロパティをリストを表示する入力支援機能では Insert がリストには現れません.

OleVariant 型であれば扱えます.
Legend
Helpful Answer (5 pts)
Correct Answer (10 pts)

Server Response from: ETNAJIVE02