10
votes

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

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> xxx pré>

My Code: P>

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


3 commentaires

Il suffit d'ajouter une référence à microsoft.office.core.dll . Erreur dit clairement que: le type 'microsoft.office.core.msotristate' est défini dans un assemblage qui n'est pas référencé


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?


6 Réponses :


2
votes

Vous devez ajouter la bibliothèque Microsoft Excel.

Entrez la description de l'image ici


2 commentaires

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.



1
votes

Ajoutez simplement xxx

à votre code et reconstruisez votre solution avant votre exécution à nouveau.


0 commentaires

17
votes

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 !");
    }
    


2 commentaires

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 "?



1
votes

J'utilise ce code avec microsoft.office.interop.excel v 14.0: xxx

et avoir des images ( jpg et png ) dans mes feuilles Excel.


0 commentaires

2
votes

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


0 commentaires

0
votes
    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 commentaires