- - PR -
ExcelにBitmapを貼り付ける
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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を作成したりしてみましたが・・・。 この後が続かず・・・。 見当違いでしょうか?? アドバイスいただけますよう、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2007-10-19 17:33
どう貼り付けたいのかにもよりますが、たぶん見当違いになるのではないかなと思います。 Excel Worksheet 内に貼るのであれば、その類のオブジェクトでないと都合が悪いからです。 いわゆる OLE オブジェクトという代物とかですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 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についてちょっと調べてみます。 また何かお気づきの点がありましたらよろしくお願いします。 | ||||||||
|
投稿日時: 2007-10-19 19:37
pictures.Insert(画像のURL,Type.Missing) | ||||||||
|
投稿日時: 2007-10-19 20:28
todoさん、アドバイスありがとうございます。
画像のURLとは具体的にはどういうことでしょうか? Webフォームで表示するように、画像表示用のWebフォームを作成し画像を読み込み、 そのURLとリンクさせるということでしょうか? WebフォームではImageコントロールのImageUrlに画像表示用のaspxをリンクさせています。 ImageUrl ="画像表示用フォーム.aspx" ちょっと試してみます。 | ||||||||
|
投稿日時: 2007-10-19 20:39
pictures.Insert("http://localhost/WebApplication1/画像表示用フォーム.aspx",Type.Missing)
あるいは、 byte配列をファイルに保存 pictures.Insert(ファイル,Type.Missing) ファイルを削除 | ||||||||
|
投稿日時: 2007-10-19 20:52
todoさん、またまたありがとうございます!
これから帰宅しますので、 自宅で試してみて、必ずお返事します。 なんだかできそうな気がしてきました。 早く帰らなくては・・・。 | ||||||||
|
投稿日時: 2007-10-20 00:52
todoさんのアドバイスを早速実行してみました。
画像表示用フォーム.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は出力されず、戻ってきません。 よってこの後にあるプロセス開放処理にもいけません。
System.IO.FileStream fs = new System.IO.MemoryStream(バイト配列); Bitmap bm = new Bitmap(ms); string pictureFileName = "tmp.jpg"; bm.Save(pictureFileName , ImageFormat.Jpeg); このSaveでエラーとなりました。 Bitmapとして保存がいけませんでしょうか? まだまだ実験してみます。 質問ばかりですいませんが、また何かありましたらアドバイスお願いいたします。 |