一、插图的类(含2方法) using System; using System.Collections.Generic; using System.Text; //using Excel = Microsoft.Office.Interop.Excel; using Excel; using System.Windows.Forms; namespace ExcelReport { class InsertPicToExcel { /** <summary> /// 打开没有模板的操作。 /// </summary> public void Open() { this.Open(String.Empty); } /** <summary> /// 功能:实现Excel应用程序的打开 /// </summary> /// <param name="TemplateFilePath">模板文件理路径</param> 25 public void Open(string TemplateFilePath) 26 { 27 //打开对象 28 m_objExcel = new Excel.Application(); 29 m_objExcel.Visible = false; 30 m_objExcel.DisplayAlerts = false; 31 32 if (m_objExcel.Version != "11.0") 33 { 34 MessageBox.Show("您的 Excel 版本不是 11.0 (Office 2003),操作可能会出现问题。"); 35 m_objExcel.Quit(); 36 return; 37 } 38 39 m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks; 40 if (TemplateFilePath.Equals(String.Empty)) 41 { 42 m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt)); 43 } 44 else 45 { 46 m_objBook = m_objBooks.Open(TemplateFilePath, m_objOpt, m_objOpt, m_objOpt, m_objOpt, 47 m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt); 48 } 49 m_objSheets = (Excel.Sheets)m_objBook.Worksheets; 50 m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1)); 51 m_objExcel.WorkbookBeforeClose += new Excel.AppEvents_WorkbookBeforeCloseEventHandler(m_objExcel_WorkbookBeforeClose); 52 } 53 54 private void m_objExcel_WorkbookBeforeClose(Excel.Workbook m_objBooks, ref bool _Cancel) 55 { 56 MessageBox.Show("保存完毕!"); 57 } 58 59 /** <summary> 60 /// 将图片插入到指定的单元格位置。 61 /// 注意:图片必须是绝对物理路径 62 /// </summary> 63 /// <param name="RangeName">单元格名称,例如:B4</param> 64 /// <param name="PicturePath">要插入图片的绝对路径。</param> 65 public void InsertPicture(string RangeName, string PicturePath) 66 { 67 m_objRange = m_objSheet.get_Range(RangeName, m_objOpt); 68 m_objRange.Select(); 69 Excel.Pictures pics = (Excel.Pictures)m_objSheet.Pictures(m_objOpt); 70 pics.Insert(PicturePath, m_objOpt); 71 } 72 73 /** <summary> 74 /// 将图片插入到指定的单元格位置,并设置图片的宽度和高度。 75 /// 注意:图片必须是绝对物理路径 76 /// </summary> 77 /// <param name="RangeName">单元格名称,例如:B4</param> 78 /// <param name="PicturePath">要插入图片的绝对路径。</param> 79 /// <param name="PictuteWidth">插入后,图片在Excel中显示的宽度。</param> 80 /// <param name="PictureHeight">插入后,图片在Excel中显示的高度。</param> 81 public void InsertPicture(string RangeName, string PicturePath, float PictuteWidth, float PictureHeight) 82 { 83 m_objRange = m_objSheet.get_Range(RangeName, m_objOpt); 84 m_objRange.Select(); 85 float PicLeft, PicTop; 86 PicLeft = Convert.ToSingle(m_objRange.Left); 87 PicTop = Convert.ToSingle(m_objRange.Top); 88 //参数含义: 89 //图片路径 90 //是否链接到文件 91 //图片插入时是否随文档一起保存 92 //图片在文档中的坐标位置(单位:points) 93 //图片显示的宽度和高度(单位:points) 94 //参数详细信息参见:http://msdn2.microsoft.com/zh-cn/library/aa221765(office.11).aspx 95 m_objSheet.Shapes.AddPicture(PicturePath,Microsoft.Office.Core.MsoTriState.msoFalse, 96 Microsoft.Office.Core.MsoTriState.msoTrue, PicLeft, PicTop, PictuteWidth, PictureHeight); 97 } 98 99 /** <summary> 100 /// 将Excel文件保存到指定的目录,目录必须事先存在,文件名称不一定要存在。 101 /// </summary> 102 /// <param name="OutputFilePath">要保存成的文件的全路径。</param> 103 public void SaveFile(string OutputFilePath) 104 { 105 m_objBook.SaveAs(OutputFilePath, m_objOpt, m_objOpt, 106 m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 107 m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt); 108 109 this.Close(); 110 } 111 /** <summary> 112 /// 关闭应用程序 113 /// </summary> 114 private void Close() 115 { 116 m_objBook.Close(false, m_objOpt, m_objOpt); 117 m_objExcel.Quit(); 118 } 119 120 /** <summary> 121 /// 释放所引用的COM对象。注意:这个过程一定要执行。 122 /// </summary> 123 public void Dispose() 124 { 125 ReleaseObj(m_objSheets); 126 ReleaseObj(m_objBook); 127 ReleaseObj(m_objBooks); 128 ReleaseObj(m_objExcel); 129 System.GC.Collect(); 130 System.GC.WaitForPendingFinalizers(); 131 } 132 /** <summary> 133 /// 释放对象,内部调用 134 /// </summary> 135 /// <param name="o"></param> 136 private void ReleaseObj(object o) 137 { 138 try 139 { 140 System.Runtime.InteropServices.Marshal.ReleaseComObject(o); 141 } 142 catch { } 143 finally { o = null; } 144 } 145 146 private Excel.Application m_objExcel = null; 147 private Excel.Workbooks m_objBooks = null; 148 private Excel._Workbook m_objBook = null; 149 private Excel.Sheets m_objSheets = null; 150 private Excel._Worksheet m_objSheet = null; 151 private Excel.Range m_objRange = null; 152 private object m_objOpt = System.Reflection.Missing.Value; 153 } 154 155} 156 二、调用 1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Text; 7using System.Windows.Forms; 8 9namespace ExcelReport 10{ 11 public partial class Form1 : Form 12 { 13 public Form1() 14 { 15 InitializeComponent(); 16 } 17 18 private void Form1_Load(object sender, EventArgs e) 19 { 20 InsertPicToExcel ipt = new InsertPicToExcel(); 21 ipt.Open(); 22 ipt.InsertPicture("B2", @"C:/Excellogo.gif"); 23 ipt.InsertPicture("B18", @"C:/Excellogo.gif", 120, 80); 24 ipt.SaveFile(@"C:/ExcelTest.xls"); 25 ipt.Dispose(); 26 } 27 28 } 29}