- PR -

ExcelにBitmapを貼り付ける

投稿者投稿内容
みつん
大ベテラン
会議室デビュー日: 2004/05/21
投稿数: 100
投稿日時: 2007-10-19 13:29
いつも大変参考にさせていただいております。

現在、ASP.NET(C#)にてWebアプリの開発を行っております。
こちらではExcelのダウンロード等で大変お世話になりましたが、
またExcelがらみで質問があります。

現在、DB(Oracle)からblob型で格納されている写真データを
byte[]型でWebサービスより取得しています。
このByte配列をイメージとしてExcelに貼り付けたいのです。
ファイルから貼り付けとなりますと、pictures.Insert(ファイル名,Type.Missing)で
貼り付けられる事は確認しましたが、イメージを貼り付けとなりますと
どのようにしてよいのか途方にくれております。

-----------------------------------------------------------------------------
byte[] img = (byte[])Webサービスからの戻り // ここは正常に受け取れています。

System.IO.MemoryStream ms = new System.IO.MemoryStream(img );
Bitmap bm = new Bitmap(ms);

---------------------------------------------------------

このように取り合えずBitmapを作成したりしてみましたが・・・。
この後が続かず・・・。
見当違いでしょうか??

アドバイスいただけますよう、よろしくお願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-10-19 17:33
引用:

みつんさんの書き込み (2007-10-19 13:29) より:

このように取り合えずBitmapを作成したりしてみましたが・・・。
この後が続かず・・・。見当違いでしょうか??


どう貼り付けたいのかにもよりますが、たぶん見当違いになるのではないかなと思います。 Excel Worksheet 内に貼るのであれば、その類のオブジェクトでないと都合が悪いからです。 いわゆる OLE オブジェクトという代物とかですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
みつん
大ベテラン
会議室デビュー日: 2004/05/21
投稿数: 100
投稿日時: 2007-10-19 18:10
じゃんぬねっとさん、いつもご回答ありがとうございます。

やはり見当違いでしたか・・・。
どう貼り付けたいかといいますと、

picture = (Excel.Picture)pictures.Insert(pictureFileName, Type.Missing);
rangePic = (Excel.Range)sheet1.Cells[13, 60];

例えばこんな感じである画像ファイルを指定したセル位置に貼り付けていたのですが、
同じことをbyte[]型で受け取った画像データで行いたいのです。
画像データはファイルでいただけるはずだったのですが、
Oracleのblob型で登録されたテーブルを渡されたため、このまま使用できないか思案中です。
Webフォームへの表示はうまくできたのですが、Excelへの貼り付けがうまくいきません。
データの取得はできているので、あとは貼り付けるだけだと思うのですが・・・。

OLEについてちょっと調べてみます。
また何かお気づきの点がありましたらよろしくお願いします。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2007-10-19 19:37
引用:

Webフォームへの表示はうまくできたのですが、Excelへの貼り付けがうまくいきません。



pictures.Insert(画像のURL,Type.Missing)
みつん
大ベテラン
会議室デビュー日: 2004/05/21
投稿数: 100
投稿日時: 2007-10-19 20:28
todoさん、アドバイスありがとうございます。

引用:

pictures.Insert(画像のURL,Type.Missing)



画像のURLとは具体的にはどういうことでしょうか?
Webフォームで表示するように、画像表示用のWebフォームを作成し画像を読み込み、
そのURLとリンクさせるということでしょうか?
WebフォームではImageコントロールのImageUrlに画像表示用のaspxをリンクさせています。
 ImageUrl ="画像表示用フォーム.aspx"

ちょっと試してみます。


todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2007-10-19 20:39
pictures.Insert("http://localhost/WebApplication1/画像表示用フォーム.aspx",Type.Missing)

あるいは、

byte配列をファイルに保存
pictures.Insert(ファイル,Type.Missing)
ファイルを削除
みつん
大ベテラン
会議室デビュー日: 2004/05/21
投稿数: 100
投稿日時: 2007-10-19 20:52
todoさん、またまたありがとうございます!

これから帰宅しますので、
自宅で試してみて、必ずお返事します。
なんだかできそうな気がしてきました。
早く帰らなくては・・・。
みつん
大ベテラン
会議室デビュー日: 2004/05/21
投稿数: 100
投稿日時: 2007-10-20 00:52
todoさんのアドバイスを早速実行してみました。

引用:

todoさんの書き込み (2007-10-19 20:39) より:
pictures.Insert("http://localhost/WebApplication1/画像表示用フォーム.aspx",Type.Missing)




画像表示用フォーム.aspxでWebサービスより写真データを取得しているのですが、
問題なく処理は終了しています。
が、そのままで終わってしまい、デバッグするとExcelのコードの方には返ってきませんでした。

画像表示用フォーム.asps-----------------------------

Webサービス service = new Webサービス();
byte[] data = service.GerPhotoInfo(パラメタ);
Response.ContentType = "image/jpeg";
Response.Flush();
Response.BinaryWrite(view.PersonalPhoto);
Response.End();

------------------------------------------------------

このあと、Excel出力用フォーム.aspx には戻りません。


Excel出力用フォーム.asps------------------------------------------------

picture = (Excel.Picture)pictures.Insert("http://localhost/画像表示用フォーム.aspx, Type.Missing);

--------------------------------------------------------------------

ここから画像表示用フォーム.aspxのロードになるのですが、
Excelは出力されず、戻ってきません。
よってこの後にあるプロセス開放処理にもいけません。


引用:


byte配列をファイルに保存
pictures.Insert(ファイル,Type.Missing)
ファイルを削除



System.IO.FileStream fs = new System.IO.MemoryStream(バイト配列);
Bitmap bm = new Bitmap(ms);
string pictureFileName = "tmp.jpg";
bm.Save(pictureFileName , ImageFormat.Jpeg);

このSaveでエラーとなりました。
Bitmapとして保存がいけませんでしょうか?

まだまだ実験してみます。
質問ばかりですいませんが、また何かありましたらアドバイスお願いいたします。

スキルアップ/キャリアアップ(JOB@IT)