2013-05-01 7 views
7

にメモリストリームから画像を追加し、私はメモリストリーム内のイメージを持っていると私はMS Excel文書にこれを書きたい、PIAは、ファイルのパスを取るAddPicture関数メソッドを公開します。Excelドキュメント

画像をディスクに書き込まなくても画像を追加できますか?

MSDN

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.shapes.addpicture(v=office.14).aspx

+1

コードを追加できますか? memorystream(画像フォーマット?)変数にデータを追加する数行と、ピクチャを追加したいAddPictureまたは範囲/セル –

+0

これにはコードがありません。既存のものに追加することを検討しています文書生成プロセスに優れています。 – AwkwardCoder

+0

あなたはMemoryStream(ByteArrayImage)を持っていますね。コードは、バックグラウンド(タスクプール)スレッド上で実行されているので、それがSTAスレッドではありません、 - –

答えて

3

まあ、ブラインド飛行のビットが、これは解決策になる可能性があなたのコード(たとえば、あなたのストリームのソース、データ型など)についての事または2仮定:
を 最初に、ストリームからビットマップイメージデータを作成する必要があります(これは、ストリームがビットマップイメージを記述していると仮定して、バイトストリームとみなします)。 Byte Array to Bitmap Image
解決策からコードをコピーして貼り付けます。

int w= 100; 
int h = 200; 
int ch = 3; //number of channels (ie. assuming 24 bit RGB in this case) 

byte[] imageData = new byte[whch]; //you image data here Bitmap bitmap = new Bitmap(w,h,PixelFormat.Format24bppRgb); BitmapData bmData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat); IntPtr pNative = bmData.Scan0; Marshal.Copy(imageData,0,pNative,whch); bitmap.UnlockBits(bmData);
また、ワークブック用のオブジェクトと作業するワークシートがあると仮定すると、次のようなものがあります。
xlBook = (Excel.Workbook)objExcel.Workbooks.Add(""); 
xlSheet = (Excel.Worksheet)xlBook.Worksheets 1 ; 
xlSheet.Activate(); 
ビットマップタイプの変数とワークシートがあるので、画像をシートに貼り付けるだけでいいです:
System.Windows.Forms.Clipboard.SetDataObject(bitmap, false); 
xlsRange = xlSheet.get_Range((Excel.Range)xlSheet.Cells[5, 15], (Excel.Range)xlSheet.Cells[5, 15]); 
xlSheet.Paste(xlsRange, bitmap); 

ここでは、キーは「AddPicture」を使用する代わりにここにあります: Worksheet.Paste Method

助けて!

+0

マークのおかげで、投票をアップします – AwkwardCoder

+0

残念ながら、これは私のために動作しませんないと言うことができますクリップボードにはこれが必要です。 – AwkwardCoder

+0

トリッキー、そうです。新しいルール。どのように常緑について "[threadobjvar] .SetApartmentState(System.Threading.ApartmentState.STA);" ? –

関連する問題