【问题标题】:inserting an image to excel sheet doesnt work将图像插入到 Excel 工作表不起作用
【发布时间】:2012-08-25 14:44:39
【问题描述】:

我正在尝试将图像插入到 Excel 工作表中,如下所示。

Image img = Image.FromFile("test.jpg");
sheet.get_Range("A1").set_Item(1,1,img);

但是当excel在A1单元格中打开时没有任何图片,
但只有这个结果:System.Drawing.Bitmap
那么问题是什么,我该如何解决。 第二个问题是:
如果我的图片位于数据库中,如何插入到 excel 中。我不想将它们保存到计算机以插入到 Excel 中? [WinForm]

【问题讨论】:

    标签: c# winforms image excel insert


    【解决方案1】:
    Try this:
    
    object missing = System.Reflection.Missing.Value;
    Excel.Range picPosition = sheet.get_Range("A1"); // retrieve the range for picture insert
    Excel.Pictures p = yourWorksheet.Pictures(missing) as Excel.Pictures;
    Excel.Picture pic = null;
    pic = p.Insert(yourImageFilePath, missing);
    pic.Left = Convert.ToDouble(picRange.Left);
    pic.Top = picRange.Top;
    pic.Placement = // Can be any of Excel.XlPlacement.XYZ value
    

    【讨论】:

    • 如果我的图像位于数据库中并且我不想将此图像保存到硬盘上怎么办。如何在不保存的情况下直接将图像插入到 excel 中?
    • 你好,你用硬盘上的图像试试吗?
    • 查看本文中的 ProcessRequest codeproject.com/Articles/33310/…
    • 是的,我已经尝试过,并且工作正常,但我的表格中有 500 多张图片。我不想每次都将它们保存到计算机,然后插入到 excel。
    • 所以第一个问题得到了回答(感谢标记它)。对于第二个问题,您将从数据库中获取一个流(参见 url codeproject)并将此流加载到图像中(Image.FromStream)
    【解决方案2】:
        System.Data.SqlClient.SqlDataReader rdr = null;
                System.Data.SqlClient.SqlConnection conn = null;
                System.Data.SqlClient.SqlCommand selcmd = null;
                try
                {
                  conn = new System.Data.SqlClient.SqlConnection
                (System.Configuration.ConfigurationManager.ConnectionStrings
                ["ConnectionString"].ConnectionString);
    //here set your query to get image from databse
                  selcmd = new System.Data.SqlClient.SqlCommand
                ("select pic1 from msg where msgid=" + 
                context.Request.QueryString["imgid"], conn);
                  conn.Open();
                  rdr = selcmd.ExecuteReader();
                  while (rdr.Read())
                  {
                    byte[] YourImagebytearray = ((byte[])rdr["pic1"]);
                    MemoryStream stream = new MemoryStream(bytes);
                    var newImage = System.Drawing.Image.FromStream(stream);
                    stream.Dispose();
                  }
                  if (rdr != null)
                    rdr.Close();
                }
                finally
                {
                  if (conn != null)
                      conn.Close();
                }
    

    【讨论】:

    • 谢谢,我知道如何将字节流转换为图像,但我想知道如何在不保存到计算机的情况下将此图像插入 excel。请给我看看那个代码好吗?
    • 我已经编写了你的​​代码,但它给出了一个错误 - 'Microsoft.Office.Interop.Excel._Worksheet.Pictures(object)' 是一个'方法',在给定的上下文中是无效的。
    • 各位,这是一个变色龙问题,这个答案与具体问题无关。
    • 我同意你的看法,所以感谢 namco 设置另一个问题,我将把这个答案移到其中。Fort 这个问题感谢将我的答案标记为确定,因为 namco 你说“是的,我已经尝试过,并且有效"
    • 当图像存储在计算机中时可以。还行吧。但我说我不想将图像保存到计算机上。我想从 db 中选择图像并将它们插入到 excel 工作表中,而不是每次都将它们保存到计算机中。
    猜你喜欢
    • 1970-01-01
    • 2022-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多