web-gelistirme-sc.com

C # uygulamasından Excel'e nasıl resim eklenir?

C # uygulamamı kullanarak Excel Forma Sayfasına bir resim eklemeye çalışıyorum.

Aşağıdakileri kaynağım olarak kullandım. http://csharp.net-informations.com/Excel/csharp-insert-picture-Excel.htm

Bu çizginin tamamı mavi ile vurgulanmıştır.

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

Kodum:

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

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

    //xlWorkSheet.SetBackgroundPicture("C:/Users/Shaun/Documents/Visual Studio 2010/Projects/TestXMLToEXCEL/TestXMLToEXCEL/bin/Debugpic.JPG"); //

    //add some text 
    xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";
    xlWorkSheet.Cells[2, 1] = "Adding picture in Excel File";

    xlWorkSheet.Shapes.AddPicture("C:\\pic.JPG", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, 50, 50, 300, 45); //C:\\csharp-xl-picture.JPG

     xlWorkBook.SaveAs("csharp.net-informations.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();
    }
}

Hata mesajları:

'Microsoft.Office.Interop.Excel.Shapes.AddPicture (string, Microsoft.Office.Core.MsoTriState, Microsoft.Office.Core.MsoTriState, float, float, float, float)' için en iyi aşırı yüklenmiş yöntem eşleşmesi bazı geçersiz değişkenlere sahip

'Microsoft.Office.Core.MsoTriState' tipi başvuruda bulunulmayan bir derlemede tanımlanmıştır. Assembly 'ofisine, Sürüm = 12.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c' referansını eklemelisiniz.

Bağımsız değişken 2: 'Microsoft.Office.Core.MsoTriState [c:\users\shaun\documents\visual studio 2010\Projects\TestXMLToEXCEL\TestXMLToEXCEL\CreateSpreadSheet.cs]' öğesinden 'Microsoft.Office.Core.MsoTriState' öğesine dönüştürülemiyor

Bağımsız değişken 3: 'Microsoft.Office.Core.MsoTriState [c:\users\shaun\documents\visual studio 2010\Projects\TestXMLToEXCEL\TestXMLToEXCEL\CreateSpreadSheet.cs]' öğesinden 'Microsoft.Office.Core.MsoTriState' öğesine dönüştürülemiyor


Referanslarım:

using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Core;
using Microsoft.Office;
using System.Xml;
9
Pomster

Aşağıdaki referansları ekleyin:

  • .Net sekmesinden Microsoft.Office.Interop.Excel
  • COM sekmesinden Microsoft Office 14.0 Object Library

İfadeleri kullanarak aşağıdakileri ekleyin:

using Microsoft.Office.Core;
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;

Ve sonra işte yönteminiz (biraz değişmiş):

private void BtnWriteSpreedSheetClick(object sender, EventArgs e)
{
    var xlApp = new Excel.Application();
    Excel.Workbook xlWorkBook = xlApp.Workbooks.Add();
    Excel.Worksheet xlWorkSheet = xlWorkBook.Sheets[1];

    xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";
    xlWorkSheet.Cells[2, 1] = "Adding picture in Excel File";

    xlWorkSheet.Shapes.AddPicture(@"C:\pic.JPG", MsoTriState.msoFalse, MsoTriState.msoCTrue, 50, 50, 300, 45);

    xlWorkBook.SaveAs("csharp.net-informations.xls", Excel.XlFileFormat.xlWorkbookNormal);
    xlWorkBook.Close(true);
    xlApp.Quit();

    Marshal.ReleaseComObject(xlApp);

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

Microsoft Excel kitaplığını eklemeniz gerekir.

enter image description here

2
Pomster

Alternatif olarak, bunu yapmak için EPPlus gibi Open Xml kütüphanelerinden birini kullanabilirsiniz. 

Kanımca, EPPlus, kaynakları manuel olarak yayınlamaya gerek kalmadan Excel birlikte çalışmasından çok daha kolay ve sezgisel. Ayrıca, Excel yüklü olmayan bir makinede gerçekleştirilebilmesi avantajına da sahiptir.

EPPlus ile bu kadar basit bir şey iyi çalışıyor:

using (var Excel = new ExcelPackage())
{
    var wks = Excel.Workbook.Worksheets.Add("Sheet1");
    wks.Cells[1, 1].Value = "Adding picture below:";
    var pic = wks.Drawings.AddPicture("MyPhoto", new FileInfo("image.png"));
    pic.SetPosition(2, 0, 1, 0);
    Excel.SaveAs(new FileInfo("outputfile.xlsx"));
}
1
Stewart_R

Bu kodu Microsoft.Office.Interop.Excel v 14.0 ile kullanıyorum:

xlWorksheet.Shapes.AddPicture(@"c:\pics\logosmall.jpg", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, 0, 0, 185, 42);

Ve Excel sayfalarımda resimler (jpg ve png) var.

1
Kitemark76

Sadece ekle

using Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Core;

kodunuza ve tekrar koşmadan önce çözümünüzü yeniden oluşturun.

1
writeToBhuwan
    private void Button1_Click(object sender, EventArgs e)
    {

        Microsoft.Office.Interop.Excel._Application application = new Microsoft.Office.Interop.Excel.Application();
        Microsoft.Office.Interop.Excel._Workbook workbook = application.Workbooks.Add(Type.Missing);
        Microsoft.Office.Interop.Excel._Worksheet worksheet = null;

        SaveFileDialog saveDialog = new SaveFileDialog();
        saveDialog.FileName = "ImageToExcel.xlsx";
        if (saveDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            try
            {
                worksheet = workbook.ActiveSheet;
                worksheet.Name = "Image to Excel";
                string imageNetworkLocation = "\\\\192.168.240.110\\images\\image.png";
                worksheet.Shapes.AddPicture(imageNetworkLocation, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue, 0, 0, 170, 85);
                workbook.SaveAs(saveDialog.FileName);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            finally
            {
                application.Quit();
                workbook = null;
                application = null;

            }
        }

        else
            try
            {
                workbook.Close(0);
                application.Quit();
                workbook = null;
                application = null;
                System.Runtime.InteropServices.Marshal.ReleaseComObject(application);
            }
            catch (System.Exception ex) 
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
    }
0
Robert Karamagi