J'essaie d'insérer une image dans une feuille de propagation Excel à l'aide de mon application C #.
J'ai utilisé ce qui suit comme source. http://cshaarp.net-informations.com/excel/ csharp-insert-picture-excel.htm p>
Toute cette ligne est soulignée en bleu. p> My Code: P> using Excel = Microsoft.Office.Interop.Excel;
using Microsoft.Office.Core;
using Microsoft.Office;
using System.Xml;
6 Réponses :
Vous devez ajouter la bibliothèque Microsoft Excel. P>
p>
Même si votre réponse a quatre ans, vous êtes deux versions devant moi; Tout ce que j'ai disponible est Verson 1.60 de la bibliothèque d'objets MS Excel 12.0. Eh bien, j'ai aussi Excel 5.0, version 1.
Eh bien, cela n'a pas aidé - je supposément besoin que d'utiliser Ms.Office.core, mais a ensuite obtenu 922 construire ERR MSGS. Alors je l'ai retiré et revenait à ce que j'ai déjà eu.
Ajoutez simplement à votre code et reconstruisez votre solution avant votre exécution à nouveau. p> p>
Ajoutez les références suivantes:
microsoft.office.interop.excel code> à partir de l'onglet .NET LI>
-
Microsoft Office 14.0 Library d'objet Code> de l'onglet COM LI>
ul> Ajoutez les instructions suivantes: P>
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 !");
}
Dans mes images d'application, l'insertion est un goulot d'étranglement. Chaque fichier XLSX généré a au moins 300 à 400 images. La solution d'appels de solution actuelle.Shapes.Ajouter la méthode () autant de fois que le nombre d'images. C'est vraiment lent. Y a-t-il une solution de contournement pour la rendre plus rapide?
Peut-être un emplacement sur Internet, plutôt qu'un fichier local, être utilisé comme premier argice à addpicture (), tel que: " bla.com/someimage.png "?
J'utilise ce code avec microsoft.office.interop.excel v 14.0: et avoir des images ( jpg code> et png code>) dans mes feuilles Excel. p> p>
Autre alternative, vous pouvez utiliser l'une des bibliothèques XML ouvertes telles que ePplus à Faites cela.
À mon avis, EPPLUS est beaucoup plus facile et plus inutile que Excel Interop sans avoir besoin de libérer manuellement des ressources. Il a également l'avantage supplémentaire qu'il peut être effectué sur une machine sans Excel installé. P>
Quelque chose aussi simple que cela avec EPPlus fonctionne bien: P>
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"));
}
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);
}
}
Il suffit d'ajouter une référence à
microsoft.office.core.dll code>. Erreur dit clairement que:le type 'microsoft.office.core.msotristate' est défini dans un assemblage qui n'est pas référencé code>Semble que vous référencez une version, mais il utilise différents. Avez-vous ajouté référence à la DLL V.12?
Non, je ne semble que je suis référençant interop.microsoft.office.core.dll et ses versions sont 2.4.0.0, où puis-je trouver, V.12 Microsoft.Office.core la plus récente version?