如何从C#应用程序插入图片到Excel中?

我正在尝试使用我的C#应用​​程序将图片插入到Excel Spread Sheet中。

我已经使用以下作为我的来源。 http://csharp.net-informations.com/excel/csharp-insert-picture-excel.htm

整条线以蓝色下划线。

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

我的代码:

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

错误消息:

'Microsoft.Office.Interop.Excel.Shapes.AddPicture(string,Microsoft.Office.Core.MoreTriState,Microsoft.Office.Core.MsoTriState,float,float,float,float)'的最佳重载方法匹配有一些无效参数

types“Microsoft.Office.Core.MsoTriState”在未引用的程序集中定义。 你必须添加一个参考大会的办公室,版本= 12.0.0.0,文化=中立,PublicKeyToken = 71e9bce111e9429c'。

参数2:无法从“Microsoft.Office.Core.MsoTriState [c:\ users \ shaun \ documents \ visual studio 2010 \ Projects \ TestXMLToEXCEL \ TestXMLToEXCEL \ CreateSpreadSheet.cs]”转换为“Microsoft.Office.Core.MsoTriState”

参数3:无法从'Microsoft.Office.Core.MsoTriState'[c:\ users \ shaun \ documents \ visual studio 2010 \ Projects \ TestXMLToEXCEL \ TestXMLToEXCEL \ CreateSpreadSheet.cs]转换为'Microsoft.Office.Core.MsoTriState'


我的参考:

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

添加以下参考:

  • .Net选项卡上的Microsoft.Office.Interop.Excel
  • COM选项卡中的Microsoft Office 14.0 Object Library

添加以下使用语句:

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

然后这里是你的方法(稍微改变):

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

您需要添加Microsoft Excel库。

在这里输入图像说明

只需添加

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

到您的代码并重新运行之前重新生成您的解决scheme。

我正在使用此代码与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); 

并在我的Excel表中获得图像( jpgpng )。

作为一种替代方法,您可以使用诸如EPPlus之类的Open Xml库之一来执行此操作。

在我看来,EPPlus比Excel互操作更容易,更直观,不需要手动释放资源。 它也有额外的好处,可以在没有安装Excel的机器上执行。

像EPPlus一样简单的工作效果很好:

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