2013-05-01 3 views
7

मेरे पास एक मेमोरी स्ट्रीम में एक छवि है और मैं इसे एक एमएस एक्सेल दस्तावेज़ में लिखना चाहता हूं, पीआईए केवल AddPicture विधि का खुलासा करता है जो फ़ाइल पथ लेता है।मेमोरी स्ट्रीम से एक्सेल दस्तावेज़ में एक छवि जोड़ना

डिस्क पर छवि लिखने के बिना कोई तस्वीर जोड़ने के लिए दूर है?

MSDN

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

+1

क्या आप कृपया अपना कोड जोड़ सकते हैं? कुछ पंक्तियां जो मेमोरीस्ट्रीम (चित्र प्रारूप?) चर में डेटा जोड़ती हैं और AddPicture या range/cell जहां आप चित्र चाहते हैं –

+0

मेरे पास वास्तव में कोई कोड नहीं है, मैं इसे मौजूदा में जोड़ना चाहता हूं एक्सेल दस्तावेज उत्पादन प्रक्रिया। – AwkwardCoder

+0

और आपके पास मेमोरीस्ट्रीम (बाइटएरे इमेज) है, है ना? –

उत्तर

3

ठीक है, अंधा उड़ान लेकिन एक बात या दो अपने कोड के बारे में सोचते हैं का एक सा (जैसे अपनी स्ट्रीम, डेटा प्रकार, आदि के स्रोत) यह एक समाधान हो सकता है:
सबसे पहले, आपको स्ट्रीम से बिटमैप छवि डेटा बनाने की आवश्यकता है (जो मुझे लगता है कि एक बाइट स्ट्रीम है, यह भी मानते हुए कि स्ट्रीम बिटमैप छवि का वर्णन करता है)। वहाँ एक समाधान स्टैक ओवरफ़्लो पर है कि यहाँ के लिए पहले से ही है: 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.ApartartmentState.STA);" ? –

संबंधित मुद्दे