C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 下記、ソースについて教えてください


(過去ログ 89 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■53109 / inTopicNo.1)  下記、ソースについて教えてください
  
□投稿者/ 秋色 (1回)-(2010/09/03(Fri) 14:12:47)

分類:[.NET 全般] 

こんにちは。

C#でエクセルを起動して画像を入れるものを作りました。
本当は、ヘッダに入れたかったのですが、エクセルが2000なので、セルに挿入してます。

それで・・・
Excel.Shape shape = shapes.AddPicture(@"ファイルパス", Office.MsoTriState.msoFalse,                          Office.MsoTriState.msoTrue, 420, 0, 85, 15);
これを、セルで指定したいのですが、どうしたらできるでしょうか??

ご指摘お願いします。

namespace tset
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void ExcelBtn_Click(object sender, EventArgs e)
{
Excel.Application Exapp;
Excel.Workbook Wbook;
Excel.Worksheet Wsheet;
Excel.Range range;
Excel.Shapes shapes;

Exapp = new Excel.Application();
Wbook = Exapp.Workbooks.Open(@"ファイルパス"
, Type.Missing, Type.Missing, Type.Missing
, Type.Missing, Type.Missing, Type.Missing
, Type.Missing, Type.Missing, Type.Missing
, Type.Missing, Type.Missing, Type.Missing);
Wsheet = (Excel.Worksheet)Wbook.ActiveSheet;
range = Wsheet.get_Range("A1", Type.Missing);
shapes = Wsheet.Shapes;
Exapp.Visible = true;
Excel.Shape shape = shapes.AddPicture(@"ファイルパス", Office.MsoTriState.msoFalse,                          Office.MsoTriState.msoTrue, 420, 0, 85, 15);
}
}
}
引用返信 編集キー/
■53120 / inTopicNo.2)  Re[1]: 下記、ソースについて教えてください
□投稿者/ マサヤ (137回)-(2010/09/03(Fri) 15:21:14)
書きなおしてみました。
そもそも論になりますが、画像はCellに入れるものではないですよね?
Shapes.AddPicture(@"c:\Penguins.jpg", Microsoft.Office.Core.MsoTriState.msoFalse, 
                                                 Microsoft.Office.Core.MsoTriState.msoTrue, 0, 0, 85, 15)
の引数にて、「0,0,85,15」で画像の左右上下の距離を指定してます。

using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

Microsoft.Office.Interop.Excel.Application xApp = null;
Workbook xWb = null;
Worksheet xWs = null;
Range xRg = null;
Shapes xSp = null;
try
{
     xApp = new Microsoft.Office.Interop.Excel.Application();
     try
     {
          xWb = xApp.Workbooks.Open(@"c:\testX.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
                                    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
          try
          {
               xWs = (Worksheet)xWb.ActiveSheet;
               try
               {
                    xRg = xWs.get_Range("A1", Type.Missing);
                    try
                    {
                         xSp = xWs.Shapes; 
                         xWs.Shapes.AddPicture(@"c:\Penguins.jpg", Microsoft.Office.Core.MsoTriState.msoFalse, 
                                                 Microsoft.Office.Core.MsoTriState.msoTrue, 0, 0, 85, 15);
                         xApp.Visible = true;
                    }
                    finally
                    {
                         Marshal.ReleaseComObject(xSp);
                    }
               }
               finally
               {
                    Marshal.ReleaseComObject(xRg);
               }
           }
           finally
           {
                Marshal.ReleaseComObject(xWs);
           }
     }
     finally
     {
            Marshal.ReleaseComObject(xWb);
     }
}
finally
{
       Marshal.ReleaseComObject(xApp);
}

引用返信 編集キー/
■53123 / inTopicNo.3)  Re[2]: 下記、ソースについて教えてください
□投稿者/ 魔界の仮面弁士 (1788回)-(2010/09/03(Fri) 15:41:55)
No53120 (マサヤ さん) に返信
> 書きなおしてみました。
追加で突っ込み。

> xWb = xApp.Workbooks.Open(@"c:\testX.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, …);
Workbooks も COM Object ではありませんでしたっけ?
PIA のバージョンによるのかな…。

> xWs = (Worksheet)xWb.ActiveSheet;
as の方が良いかも。ActiveSheet が Worksheet 型とは限りませんし。

> xSp = xWs.Shapes;
> xWs.Shapes.AddPicture(@"c:\Penguins.jpg", Microsoft.Office.Core.MsoTriState.msoFalse, …);
xSp.AddPicture(〜) では?

それと、AddPicture は Shape オブジェクトを返しますので、
戻り値も受けておかないといけないかと。
引用返信 編集キー/
■53126 / inTopicNo.4)  Re[3]: 下記、ソースについて教えてください
□投稿者/ マサヤ (139回)-(2010/09/03(Fri) 16:13:27)
No53123 (魔界の仮面弁士 さん) に返信
> ■No53120 (マサヤ さん) に返信
>>書きなおしてみました。
> 追加で突っ込み。
> 
>> xWb = xApp.Workbooks.Open(@"c:\testX.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, …);
> Workbooks も COM Object ではありませんでしたっけ?
> PIA のバージョンによるのかな…。
→ _Application.WorkbooksもCOM Objectですね。Workbooksって宣言できましたでしょうか?

>> xWs = (Worksheet)xWb.ActiveSheet;
> as の方が良いかも。ActiveSheet が Worksheet 型とは限りませんし。
→ありがとうございます。

>>xSp = xWs.Shapes; 
>>xWs.Shapes.AddPicture(@"c:\Penguins.jpg", Microsoft.Office.Core.MsoTriState.msoFalse, …);
> xSp.AddPicture(〜) では?
→はい、勘違いしてました。宣言してるのに使用してない状態になってますね。

> それと、AddPicture は Shape オブジェクトを返しますので、
> 戻り値も受けておかないといけないかと。
→ありがとうございます。
下記に修正
Shape xSh = null;    

xSp = xWs.Shapes;
try
{
        xSh = xSp.AddPicture(@"c:\Penguins.jpg", Microsoft.Office.Core.MsoTriState.msoFalse, 
               Microsoft.Office.Core.MsoTriState.msoTrue, 0, 0, 85, 15);
}
finally
{
        Marshal.ReleaseComObject(xSh);
}
xApp.Visible = true;

引用返信 編集キー/
■53130 / inTopicNo.5)  Re[2]: 下記、ソースについて教えてください
□投稿者/ すなふきぬ (36回)-(2010/09/03(Fri) 17:06:11)
No53120 (マサヤ さん) に返信
> 書きなおしてみました。
> そもそも論になりますが、画像はCellに入れるものではないですよね?

Cellに入れるものではないですが、Cellを指定して挿入することはできたと思います。
Shapesを使う部分を、ActiveWorksheetのPictures.Insert()に変更してみてはどうでしょうか?
遅延バインディングになってしまいますが、これならセルを指定して画像を挿入できると思います。

> Shapes.AddPicture(@"c:\Penguins.jpg", Microsoft.Office.Core.MsoTriState.msoFalse, 
>                                                  Microsoft.Office.Core.MsoTriState.msoTrue, 0, 0, 85, 15)
>                xWs = (Worksheet)xWb.ActiveSheet;
>                try
>                {

	            xRg = xWs.get_Range("C1", Type.Missing);
	            xRg.Select();

	            object pics = xWs.GetType().InvokeMember("Pictures", BindingFlags.GetProperty, null, xWs, null);
	            object[] prms = new Object[2];
	            try
	            {
	                prms[0] = @"c:\Penguins.jpg";
	                prms[1] = Type.Missing;
	                pics.GetType().InvokeMember("Insert", BindingFlags.InvokeMethod, null, pics, prms);
	            }
	            finally
	            {
	                Marshal.ReleaseComObject(pics);
	                pics = null;
	            }

>                }
>                finally
>                {
>                     Marshal.ReleaseComObject(xRg);
>                }
>            }

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -