web-dev-qa-db-fra.com

Comment insérer une image dans Excel à partir de l'application C #?

J'essaie d'insérer une image dans une feuille de calcul Excel à l'aide de mon application C #.

J'ai utilisé ce qui suit comme source. http://csharp.net-informations.com/Excel/csharp-insert-picture-Excel.htm

Toute la ligne est soulignée en bleu.

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

Mon code:

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();
    }
}

Messages d'erreur:

La meilleure méthode surchargée pour 'Microsoft.Office.Interop.Excel.Shapes.AddPicture (chaîne, Microsoft.Office.Core.MsoTriState, Microsoft.Office.Core.MsoTriState, float, float, float, float)' contient des arguments invalides.

Le type 'Microsoft.Office.Core.MsoTriState' est défini dans un assembly qui n'est pas référencé. Vous devez ajouter une référence au bureau de Assembly, version = 12.0.0.0, Culture = neutre, PublicKeyToken = 71e9bce111e9429c '.

Argument 2: impossible de convertir de 'Microsoft.Office.Core.MsoTriState [c:\utilisateurs\shaun\documents\visual studio 2010\Projets\TestXMLToEXCEL\TestXMLToEXCEL\CreateSpreadSheet.cs]' en 'Microsoft.Office.Core.MsoTStState'

Argument 3: impossible de convertir 'Microsoft.Office.Core.MsoTriState [c:\utilisateurs\shaun\documents\visual studio 2010\Projets\TestXMLToEXCEL\TestXMLToEXCEL\CreateSpreadSheet.cs]' en 'Microsoft.Office.Core.MsoTStState'


Mes références:

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

Ajoutez les références suivantes:

  • Microsoft.Office.Interop.Excel de l'onglet .Net
  • Microsoft Office 14.0 Object Library de l'onglet COM

Ajoutez les instructions using suivantes:

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

Et puis voici votre méthode (légèrement modifiée):

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

Vous devez ajouter la bibliothèque Microsoft Excel.

enter image description here

2
Pomster

Vous pouvez également utiliser l’une des bibliothèques Open Xml, telle que EPPlus pour cela. 

À mon avis, EPPlus est beaucoup plus simple et intuitif que l'interopérabilité Excel sans qu'il soit nécessaire de libérer manuellement des ressources. Il présente également l'avantage supplémentaire de pouvoir être exécuté sur une machine sur laquelle Excel n'est pas installé.

Quelque chose d'aussi simple que cela avec EPPlus fonctionne bien:

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

J'utilise ce code avec Microsoft.Office.Interop.Excel v 14.0:

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

Et j'ai des images (jpg et png) dans mes feuilles Excel.

1
Kitemark76

Il suffit d'ajouter

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

à votre code et reconstruire votre solution avant votre course à nouveau.

1
writeToBhuwan