使用C#将图片插入Excel单元格

3

我正在动态地从datatable生成Excel表格。 我能够按照需要将文本添加到不同的单元格中。 但是我不知道如何将图片添加到指定的范围中。

        Excel.Application oApp = new Excel.Application();
        oApp.Application.Workbooks.Add(Type.Missing);

        oApp.Range["B2", "C4"].Merge(Type.Missing);

在这里我想要添加图片...

我正在尝试如下:

        System.Drawing.Image imgg = System.Drawing.Image.FromFile("c:\\D.jpg");

现在我该如何将我的图片添加/复制到此范围内?例如:
App.Range["B2", "C4"]

我搜索了但没有找到适合我的正确方法...无论在哪里,我都找到了将图像添加到工作表对象的解决方案。 - user3452210
@user3452210 你找到答案了吗? - M.S
我没有得到确切的答案,而是按照@Anonymous Mohit的回答进行操作:xlWorkSheet.Shapes.AddPicture("C:\sample.jpg", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, 50, 50, 300, 45),并根据范围设置了左、上、右、下的值。 - user3452210
如果可以正常运行,那么您可以通过单击答案投票计数下面的勾选标记来接受该答案。 - Trikaldarshiii
3个回答

4
以下内容可让您受益:
using System;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel; 

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Excel.Application xlApp ;
            Excel.Workbook xlWorkBook ;
            Excel.Worksheet xlWorkSheet ;
            object misValue = System.Reflection.Missing.Value;

            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Add(misValue);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

            //add some text 
            xlWorkSheet.Cells[1, 1] = "Text1";
            xlWorkSheet.Cells[2, 1] = "Text2";

            xlWorkSheet.Shapes.AddPicture("C:\\sample.jpg", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, 50, 50, 300, 45); 


            xlWorkBook.SaveAs("MyExcelFile.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();

            releaseObject(xlApp);
            releaseObject(xlWorkBook);
            releaseObject(xlWorkSheet);

            MessageBox.Show ("File created !");
        }

        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Unable to release the Object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        } 

    }
}

0

您可以很容易地向Excel电子表格添加图像(假设您正在使用C#中的Microsoft.Office.Interop.Excel程序集引用)如下所示:

private Worksheet _xlSheet;
private Image _platypusLogo;
. . .
private void AddImage()
{
    Clipboard.SetDataObject(_platypusLogo, true);
    var cellRngImg = (Range)_xlSheet.Cells[IMAGE_ROW, IMAGE_COLUMN];
    _xlSheet.Paste(cellRngImg, _platypusLogo);
}

请注意,“IMAGE_ROW”和“IMAGE_COLUMN”是int常量,或者您可以使用硬编码的int,如果您想违背Steve McConnell在《代码大全》中有关将除0和1之外的所有数字都变成常量的建议。
需要将图像分配给_platypusLogo。如果您正在使用C#实用程序应用程序动态生成Excel电子表格,则可以向窗体添加PictureBox控件,然后通过其Image属性(默认情况下,该控件命名为pictureBox1)将图像分配给它,然后以这种方式将其分配给电子表格:
_platypusLogo = pictureBox1.Image;

当然,如果你愿意,也可以直接在代码中将_platypusLogo指定为唯一值。

0

你尝试过使用 excelpicture 给出位置吗?

var picture = worksheet.Drawings.AddPicture("image_name", imgg);
picture.SetPosition(int row,int rowoffsetpixels,int column,int coloumoffsetpixels);//position for the image

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接