C# Excel Interop: Vložení obrázku z MemoryStream

Pro vložení obrázku je buď možné použít vložení ze souboru, kde je ale potřeba mít na disku uložený ten soubor.

Další možnost je použít už hotový obrázek v paměti. Pro to asi existuje jediná možnost předání a to přes Windows Clipboard. Trochu problém je ale s tím, že u vloženého obrázku nejde jednoduše nastavit velikost.

A už kod:

            Microsoft.Office.Interop.Excel.Application oXL;
            Microsoft.Office.Interop.Excel._Workbook oWB;
            Microsoft.Office.Interop.Excel._Worksheet oSheet;

            oXL = new Microsoft.Office.Interop.Excel.Application();
            oXL.Visible = true;

            try
            {
                oXL.ScreenUpdating = true;
            }
            catch (System.Runtime.InteropServices.COMException)
            {
                // Reseni problemu s anglickym excelem na ceskem prostredi
// viz http://support.microsoft.com/?kbid=320369
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
                oXL.ScreenUpdating = true;
            }


            oWB = (Microsoft.Office.Interop.Excel._Workbook)(oXL.Workbooks.Add(Type.Missing));
            oSheet = (Microsoft.Office.Interop.Excel._Worksheet)oWB.ActiveSheet;

            // nacteni obrazku
            Image i = pictureBox1.Image;

            // Bunka kam vlozit
            Microsoft.Office.Interop.Excel.Range oRange = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[1, 2];
            // Pozor, tohle ale zmeni systemovy clipboard
            System.Windows.Forms.Clipboard.SetDataObject(i, false);
            // Budu vkladat do vybrane Range
            oRange.Select();

            // Paste obrázku z clipboard
            oSheet.Paste(oRange, i);

            // Aktuálně vybraný prvek je hned po vložení obrázek, proto ho můžu načíst a přetypovat
            Microsoft.Office.Interop.Excel.Picture pict = oXL.Selection as Microsoft.Office.Interop.Excel.Picture;
            // Teď můžu obrázku nastavit velikost, případně polohu ..
            pict.Height = 100;
            pict.Width = 100;

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s