C#向Excel报表中插入图片的2种方法
来源:互联网 发布:淘宝男装58元 编辑:程序博客网 时间:2024/05/16 02:32
- 这几天做向Excel插入数据,其中有插入图片的需求,经试验,下面2种方法都可以插入图片,但各有不同的用处。现将这2种方法共享出来, 希望需要的朋友进行参考,代码中已经有详细注释了。
- 注意:使用之前需要引用COM:Microsoft Office 11.0 Object Library 如果引用列表中没有,需要自行添加 C:/Program Files/Microsoft Office/OFFICE11/EXCEL.EXE
- 调用方法:
- MengXianhui.Utility.ExcelReport.InsertPictureToExcel ipt = new MengXianhui.Utility.ExcelReport.InsertPictureToExcel();
- ipt.Open();
- ipt.InsertPicture("B2", @"C:/Excellogo.gif");
- ipt.InsertPicture("B8", @"C:/Excellogo.gif",120,80);
- ipt.SaveFile(@"C:/ExcelTest.xls");
- ipt.Dispose();
- 简单包装的类:
- using System;
- using System.Windows.Forms;
- using Excel = Microsoft.Office.Interop.Excel;
- namespace MengXianhui.Utility.ExcelReport
- {
- class InsertPictureToExcel
- {
-
-
-
- public void Open( )
- {
- this.Open(String.Empty);
- }
-
-
-
-
- public void Open( string TemplateFilePath )
- {
-
- m_objExcel = new Excel.Application();
- m_objExcel.Visible = false;
- m_objExcel.DisplayAlerts = false;
- if (m_objExcel.Version != "11.0")
- {
- MessageBox.Show("您的 Excel 版本不是 11.0 (Office 2003),操作可能会出现问题。");
- m_objExcel.Quit();
- return;
- }
- m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
- if (TemplateFilePath.Equals(String.Empty))
- {
- m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
- }
- else
- {
- m_objBook = m_objBooks.Open(TemplateFilePath, m_objOpt, m_objOpt, m_objOpt, m_objOpt,
- m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
- }
- m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
- m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
- m_objExcel.WorkbookBeforeClose += new Excel.AppEvents_WorkbookBeforeCloseEventHandler(m_objExcel_WorkbookBeforeClose);
- }
- private void m_objExcel_WorkbookBeforeClose( Excel.Workbook m_objBooks, ref bool _Cancel )
- {
- MessageBox.Show("保存完毕!");
- }
-
-
-
-
-
-
- public void InsertPicture( string RangeName, string PicturePath )
- {
- m_objRange = m_objSheet.get_Range(RangeName, m_objOpt);
- m_objRange.Select();
- Excel.Pictures pics = (Excel.Pictures)m_objSheet.Pictures(m_objOpt);
- pics.Insert(PicturePath, m_objOpt);
- }
-
-
-
-
-
-
-
-
- public void InsertPicture( string RangeName, string PicturePath, float PictuteWidth, float PictureHeight )
- {
- m_objRange = m_objSheet.get_Range(RangeName, m_objOpt);
- m_objRange.Select();
- float PicLeft, PicTop;
- PicLeft = Convert.ToSingle(m_objRange.Left);
- PicTop = Convert.ToSingle(m_objRange.Top);
-
-
-
-
-
-
-
- m_objSheet.Shapes.AddPicture(PicturePath, Microsoft.Office.Core.MsoTriState.msoFalse,
- Microsoft.Office.Core.MsoTriState.msoTrue, PicLeft, PicTop, PictuteWidth, PictureHeight);
- }
-
-
-
-
- public void SaveFile( string OutputFilePath )
- {
- m_objBook.SaveAs(OutputFilePath, m_objOpt, m_objOpt,
- m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
- m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
- this.Close();
- }
-
-
-
- private void Close( )
- {
- m_objBook.Close(false, m_objOpt, m_objOpt);
- m_objExcel.Quit();
- }
-
-
-
- public void Dispose( )
- {
- ReleaseObj(m_objSheets);
- ReleaseObj(m_objBook);
- ReleaseObj(m_objBooks);
- ReleaseObj(m_objExcel);
- System.GC.Collect();
- System.GC.WaitForPendingFinalizers();
- }
-
-
-
-
- private void ReleaseObj( object o )
- {
- try
- {
- System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
- }
- catch { }
- finally { o = null; }
- }
- private Excel.Application m_objExcel = null;
- private Excel.Workbooks m_objBooks = null;
- private Excel._Workbook m_objBook = null;
- private Excel.Sheets m_objSheets = null;
- private Excel._Worksheet m_objSheet = null;
- private Excel.Range m_objRange = null;
- private object m_objOpt = System.Reflection.Missing.Value;
- }
- }