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;
Ajoutez les références suivantes:
Microsoft.Office.Interop.Excel
de l'onglet .NetMicrosoft Office 14.0 Object Library
de l'onglet COMAjoutez 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 !");
}
Vous devez ajouter la bibliothèque Microsoft Excel.
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"));
}
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.
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.