网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > .Net编程 > 正文

C#操作Excel的类以及其使用举例说明

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

1前言

这两天由于某种需要,研究了一下.NET中对Excel的互操作,之前主要是直接通过第三方的组件等方式来操作的Excel,这次仔细的研究了一下,对常用的Excel操作需求做了一个简单的总结,比如创建Excel,设置单元格样式,合并单元格,导入内存中的DataTable,插入图片、图表等。在此基础上借助于Microsoft.Office.Interop.Excel对这些操作进行了封装最终形成了ExcelHandler类。本文主要对自己封装的这个类进行简单的举例说明,关于此类的完整代码参见第三部分。
注意:对于命名空间Microsoft.Office.Interop.Excel,使用之前需要引用COM:Microsoft Office 11.0 Object Library(office 2003 )或者Microsoft Office 12.0 Object Library(office 2007 ),如果引用列表中没有,需要自行添加 X:Program Files/Microsoft Office/OFFICE[11|12]/EXCEL.EXE的引用。如果已经安装VSTO(Visual Studio Tools For Office),亦可直接添加对X:\Program Files\Microsoft Visual Studio [9.0|8.0]\Visual Studio Tools for Office\PIA\Office[11|12]\Microsoft.Office.Interop.Excel.dll的引用。

2ExcelHandler类举例说明

为了展示该类的使用方法,新建了一个WinForm的测试项目进行测试,项目名称可自定,添加对ExcelHandler的dll的引用。所有测试代码均放在窗体的一个按钮单击事件的处理方法中。

2.1创建Excel文件

  1. /// <summary> 
  2. /// 测试ExcelHandler类 
  3. /// </summary> 
  4. /// <param name="sender"></param> 
  5. /// <param name="e"></param> 
  6. private void buttonTest_Click(object sender, EventArgs e) 
  7. string excelFilePath = string.Format("{0}Excel-{1}.xls", AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.ToString("yyyyMMddHHmmss")); 
  8.  
  9. using (ExcelHandler handler = new ExcelHandler(excelFilePath, true)) 
  10. handler.OpenOrCreate(); 
  11. MessageBox.Show("创建Excel成功!"); 
  12. handler.Save(); 
  13. MessageBox.Show(string.Format("保存Excel成功!Excel路径:{0}", excelFilePath)); 
  14. }   

点击按钮执行后,可以看到在Debug目录下多了一个Excel文件

此文件的完整路径为:F:\My Projects\Tanging.DataVisualization\Tanging.DataVisualization\bin\Debug\Excel-20100314181502.xls。
注意:之后的例子的Excel的文件的路径需要为你自己创建的Excel的相应路径。
下面将举例说明对此Excel文件进行操作。

2.2创建自己的工作表Worksheet

  1. private void buttonTest_Click(object sender, EventArgs e) 
  2. string excelFilePath = string.Format("{0}Excel-20100314181502.xls", AppDomain.CurrentDomain.BaseDirectory); 
  3.  
  4. using (ExcelHandler handler = new ExcelHandler(excelFilePath, false))//设置第二个参数为false表示直接打开现有的Excel文档 
  5. handler.OpenOrCreate(); 
  6. //创建一个Worksheet 
  7. Worksheet sheet = handler.AddWorksheet("TestSheet"); 
  8. //删除除TestSheet之外的其余Worksheet 
  9. handler.DeleteWorksheetExcept(sheet); 
  10. handler.Save(); 

再次打开创建的Excel,可以看到新建的Worksheet

2.3单元格、Range等的操作

下面设置A1到E5的单元格样式,并且设置单元格值等

  1. private void buttonTest_Click(object sender, EventArgs e) 
  2. string excelFilePath = string.Format("{0}Excel-20100314181502.xls", AppDomain.CurrentDomain.BaseDirectory); 
  3.  
  4. using (ExcelHandler handler = new ExcelHandler(excelFilePath, false))//设置第二个参数为false表示直接打开现有的Excel文档 
  5. handler.OpenOrCreate(); 
  6. //获得Worksheet对象 
  7. Worksheet sheet = handler.GetWorksheet("TestSheet"); 
  8. //A1-E5 
  9. Range range = handler.GetRange(sheet, 1, 1, 5, 5); 
  10. handler.SetRangeFormat(range); 
  11.  
  12. handler.SetCellValue(sheet, 1, 1, "测试"); 
  13. handler.SetCellValue(sheet, 2, 1, "测试2"); 
  14.  
  15. range.Font.Bold = true;//加粗 
  16.  
  17. handler.Save(); 

效果如下:

2.4导入DataTable
代码如下:

  1. private void buttonTest_Click(object sender, EventArgs e) 
  2. string excelFilePath = string.Format("{0}Excel-20100314181502.xls", AppDomain.CurrentDomain.BaseDirectory); 
  3.  
  4. using (ExcelHandler handler = new ExcelHandler(excelFilePath, false))//设置第二个参数为false表示直接打开现有的Excel文档 
  5. handler.OpenOrCreate(); 
  6. //获得Worksheet对象 
  7. Worksheet sheet = handler.GetWorksheet("TestSheet"); 
  8. //A1-E5 
  9. Range range = handler.GetRange(sheet, 1, 1, 5, 5); 
  10. handler.SetRangeFormat(range); 
  11. range.Font.Bold = true
  12.  
  13. System.Data.DataTable table = new System.Data.DataTable(); 
  14. table.Columns.AddRange(new DataColumn { new DataColumn("测试列1"), new DataColumn("测试列2"), new DataColumn("测试列3") }); 
  15. Random random = new Random(20); 
  16. for (int i = 0; i < 10; i++) 
  17. table.Rows.Add(random.Next(10000), random.Next(10000), random.Next(10000)); 
  18.  
  19. //从第6行第一列导入数据 
  20. handler.ImportDataTable(sheet, "测试导入表格"truenew string { "测试列1""测试列2""测试列3" }, 6, 1, table); 
  21.  
  22. handler.Save(); 

结果如下图:

2.5 插入图片

下面插入一张图片到Excel的第一行第五列,代码如下:

  1. private void buttonTest_Click(object sender, EventArgs e) 
  2. string excelFilePath = string.Format("{0}Excel-20100314181502.xls", AppDomain.CurrentDomain.BaseDirectory); 
  3.  
  4. using (ExcelHandler handler = new ExcelHandler(excelFilePath, false))//设置第二个参数为false表示直接打开现有的Excel文档 
  5. handler.OpenOrCreate(); 
  6. //获得Worksheet对象 
  7. Worksheet sheet = handler.GetWorksheet("TestSheet"); 
  8.  
  9. //图片地址 
  10. string filePath = string.Format("{0}test.png", AppDomain.CurrentDomain.BaseDirectory); 
  11.  
  12. //从第1行第5列插入图片 
  13. Picture pic = handler.AddImage(sheet, filePath, 1, 5); 
  14.  
  15.  
  16. handler.Save(); 

效果如下图:

3ExcelHandler 类完整源码

  1. /* *********************************************** 
  2. * Author:          Raymond Tang  
  3. * Email:           china.raymond@hotmail.com 
  4. * Blog:               http://blog.tanging.net 
  5. * Created Time:    2010-3-14 9:59:43 
  6. * Class:           Tanging.Interop.Excel.ExcelHandler 
  7. * ***********************************************/ 
  8.  
  9. using System; 
  10. using System.IO; 
  11. using System.Reflection; 
  12. using System.Text; 
  13. using Xls = Microsoft.Office.Interop.Excel; 
  14. using System.Data; 
  15. using System.Collections.Generic; 
  16. using System.Runtime.InteropServices; 
  17.  
  18. namespace Tanging.Interop.Excel 
  19. /// <summary> 
  20. /// Excel处理类 
  21. /// </summary> 
  22. /// <remarks>可以用于创建Excel,操作工作表,设置单元格样式对齐方式等,导入内存、数据库中的数据表,插入图片到Excel等</remarks> 
  23. public sealed class ExcelHandler : IDisposable 
  24. #region [构造函数] 
  25.  
  26. /// <summary> 
  27. /// ExcelHandler的构造函数 
  28. /// </summary> 
  29. /// <param name="fileName">Excel文件名,绝对路径</param> 
  30. public ExcelHandler(string fileName) 
  31. this(fileName, false
  32.  
  33.  
  34. /// <summary> 
  35. /// 创建ExcelHandler对象,指定文件名以及是否创建新的Excel文件 
  36. /// </summary> 
  37. /// <param name="fileName">Excel文件名,绝对路径</param> 
  38. /// <param name="createNew">是否创建新的Excel文件</param> 
  39. public ExcelHandler(string fileName, bool createNew) 
  40. this.FileName = fileName; 
  41. this.mCreateNew = createNew; 
  42.  
  43. #endregion 
  44.  
  45. #region [字段和属性] 
  46.  
  47. private static readonly object missing = Missing.Value; 
  48.  
  49. private string mFileName; 
  50. /// <summary> 
  51. /// Excel文件名 
  52. /// </summary> 
  53. public string FileName 
  54. get { return mFileName; } 
  55. set { mFileName = value; } 
  56. /// <summary> 
  57. /// 是否新建Excel文件 
  58. /// </summary> 
  59. private bool mCreateNew; 
  60.  
  61. private Xls.Application mApp; 
  62. /// <summary> 
  63. /// 当前Excel应用程序 
  64. /// </summary> 
  65. public Xls.Application App 
  66. get { return mApp; } 
  67. set { mApp = value; } 
  68.  
  69. private Xls.Workbooks mAllWorkbooks; 
  70. /// <summary> 
  71. /// 当前Excel应用程序所打开的所有Excel工作簿 
  72. /// </summary> 
  73. public Xls.Workbooks AllWorkbooks 
  74. get { return mAllWorkbooks; } 
  75. set { mAllWorkbooks = value; } 
  76.  
  77. private Xls.Workbook mCurrentWorkbook; 
  78. /// <summary> 
  79. /// 当前Excel工作簿 
  80. /// </summary> 
  81. public Xls.Workbook CurrentWorkbook 
  82. get { return mCurrentWorkbook; } 
  83. set { mCurrentWorkbook = value; } 
  84.  
  85. private Xls.Worksheets mAllWorksheets; 
  86. /// <summary> 
  87. /// 当前Excel工作簿内的所有Sheet 
  88. /// </summary> 
  89. public Xls.Worksheets AllWorksheets 
  90. get { return mAllWorksheets; } 
  91. set { mAllWorksheets = value; } 
  92.  
  93. private Xls.Worksheet mCurrentWorksheet; 
  94. /// <summary> 
  95. /// 当前Excel中激活的Sheet 
  96. /// </summary> 
  97. public Xls.Worksheet CurrentWorksheet 
  98. get { return mCurrentWorksheet; } 
  99. set { mCurrentWorksheet = value; } 
  100.  
  101. #endregion 
  102.  
  103. #region [初始化操作,打开或者创建文件] 
  104. /// <summary> 
  105. /// 初始化,如果不创建新文件直接打开,否则创建新文件 
  106. /// </summary> 
  107. public void OpenOrCreate() 
  108. this.App = new Xls.ApplicationClass(); 
  109. this.AllWorkbooks = this.App.Workbooks; 
  110.  
  111. if (!this.mCreateNew)//直接打开 
  112. if (!File.Exists(this.FileName)) 
  113. throw new FileNotFoundException("找不到指定的Excel文件,请检查路径是否正确!"this.FileName); 
  114.  
  115. this.CurrentWorkbook = this.AllWorkbooks.Open(this.FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Xls.XlPlatform.xlWindows, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
  116.  
  117. else//创建新文件 
  118. if (File.Exists(this.FileName)) 
  119. File.Delete(this.FileName); 
  120. this.CurrentWorkbook = this.AllWorkbooks.Add(Type.Missing); 
  121.  
  122.  
  123. this.AllWorksheets = this.CurrentWorkbook.Worksheets as Xls.Worksheets; 
  124. this.CurrentWorksheet = this.CurrentWorkbook.ActiveSheet as Xls.Worksheet; 
  125. this.App.DisplayAlerts = false
  126. this.App.Visible = false
  127. #endregion 
  128.  
  129. #region [Excel Sheet相关操作等] 
  130.  
  131. /// <summary> 
  132. /// 根据工作表名获取Excel工作表对象的引用 
  133. /// </summary> 
  134. /// <param name="sheetName"></param> 
  135. /// <returns></returns> 
  136. public Xls.Worksheet GetWorksheet(string sheetName) 
  137. return this.CurrentWorkbook.Sheets[sheetName] as Xls.Worksheet; 
  138.  
  139. /// <summary> 
  140. /// 根据工作表索引获取Excel工作表对象的引用 
  141. /// </summary> 
  142. /// <param name="index"></param> 
  143. /// <returns></returns> 
  144. public Xls.Worksheet GetWorksheet(int index) 
  145. return this.CurrentWorkbook.Sheets.get_Item(index) as Xls.Worksheet; 
  146.  
  147. /// <summary> 
  148. /// 给当前工作簿添加工作表并返回的方法重载,添加工作表后不使其激活 
  149. /// </summary> 
  150. /// <param name="sheetName"></param> 
  151. /// <returns></returns> 
  152. public Xls.Worksheet AddWorksheet(string sheetName) 
  153. return this.AddWorksheet(sheetName, false); 
  154.  
  155. /// <summary> 
  156. /// 给当前工作簿添加工作表并返回 
  157. /// </summary> 
  158. /// <param name="sheetName">工作表名</param> 
  159. /// <param name="activated">创建后是否使其激活</param> 
  160. /// <returns></returns> 
  161. public Xls.Worksheet AddWorksheet(string sheetName, bool activated) 
  162. Xls.Worksheet sheet = this.CurrentWorkbook.Worksheets.Add(Type.Missing, Type.Missing, 1, Type.Missing) as Xls.Worksheet; 
  163. sheet.Name = sheetName; 
  164. if (activated) 
  165. sheet.Activate(); 
  166. return sheet; 
  167.  
  168. /// <summary> 
  169. /// 重命名工作表 
  170. /// </summary> 
  171. /// <param name="sheet">工作表对象</param> 
  172. /// <param name="newName">工作表新名称</param> 
  173. /// <returns></returns> 
  174. public Xls.Worksheet RenameWorksheet(Xls.Worksheet sheet, string newName) 
  175. sheet.Name = newName; 
  176. return sheet; 
  177.  
  178. /// <summary> 
  179. /// 重命名工作表 
  180. /// </summary> 
  181. /// <param name="oldName">原名称</param> 
  182. /// <param name="newName">新名称</param> 
  183. /// <returns></returns> 
  184. public Xls.Worksheet RenameWorksheet(string oldName, string newName) 
  185. Xls.Worksheet sheet = this.GetWorksheet(oldName); 
  186. return this.RenameWorksheet(sheet, newName); 
  187.  
  188. /// <summary> 
  189. /// 删除工作表 
  190. /// </summary> 
  191. /// <param name="sheetName">工作表名</param> 
  192. public void DeleteWorksheet(string sheetName) 
  193. if (this.CurrentWorkbook.Worksheets.Count <= 1) 
  194. throw new InvalidOperationException("工作簿至少需要一个可视化的工作表!"); 
  195. this.GetWorksheet(sheetName).Delete(); 
  196.  
  197. /// <summary> 
  198. /// 删除除参数sheet指定外的其余工作表 
  199. /// </summary> 
  200. /// <param name="sheet"></param> 
  201. public void DeleteWorksheetExcept(Xls.Worksheet sheet) 
  202. foreach (Xls.Worksheet ws in this.CurrentWorkbook.Worksheets) 
  203. if (sheet != ws) 
  204. ws.Delete(); 
  205.  
  206.  
  207. #endregion 
  208.  
  209. #region [单元格,Range相关操作] 
  210.  
  211. /// <summary> 
  212. /// 设置单元格的值 
  213. /// </summary> 
  214. /// <param name="sheet">工作表</param> 
  215. /// <param name="rowNumber">单元格行号</param> 
  216. /// <param name="columnNumber">单元格列号</param> 
  217. /// <param name="value">单元格值</param> 
  218. public void SetCellValue(Xls.Worksheet sheet, int rowNumber, int columnNumber, object value) 
  219. sheet.Cells[rowNumber, columnNumber] = value; 
  220.  
  221. /// <summary> 
  222. /// 合并单元格 
  223. /// </summary> 
  224. /// <param name="sheet">工作表</param> 
  225. /// <param name="rowNumber1">第一个单元格行号</param> 
  226. /// <param name="columnNumber1">第一个单元格列号</param> 
  227. /// <param name="rowNumber2">结束单元格行号</param> 
  228. /// <param name="columnNumber2">结束单元格列号</param> 
  229. public void MergeCells(Xls.Worksheet sheet, int rowNumber1, int columnNumber1, int rowNumber2, int columnNumber2) 
  230. Xls.Range range = this.GetRange(sheet, rowNumber1, columnNumber1, rowNumber2, columnNumber2); 
  231. range.Merge(Type.Missing); 
  232.  
  233. /// <summary> 
  234. /// 获取Range对象 
  235. /// </summary> 
  236. /// <param name="sheet">工作表</param> 
  237. /// <param name="rowNumber1">第一个单元格行号</param> 
  238. /// <param name="columnNumber1">第一个单元格列号</param> 
  239. /// <param name="rowNumber2">结束单元格行号</param> 
  240. /// <param name="columnNumber2">结束单元格列号</param> 
  241. /// <returns></returns> 
  242. public Xls.Range GetRange(Xls.Worksheet sheet, int rowNumber1, int columnNumber1, int rowNumber2, int columnNumber2) 
  243. return sheet.get_Range(sheet.Cells[rowNumber1, columnNumber1], sheet.Cells[rowNumber2, columnNumber2]); 
  244. #endregion 
  245.  
  246. #region [设置单元格、Range的样式、对齐方式自动换行等] 
  247.  
  248. /// <summary> 
  249. /// 自动调整,设置自动换行以及自动调整列宽 
  250. /// </summary> 
  251. /// <param name="range"></param> 
  252. public void AutoAdjustment(Xls.Range range) 
  253. range.WrapText = true
  254. range.AutoFit(); 
  255.  
  256. /// <summary> 
  257. /// 设置Range的单元格样式 
  258. /// </summary> 
  259. /// <remarks>将各项值设置为默认值</remarks> 
  260. /// <param name="range"></param> 
  261. public void SetRangeFormat(Xls.Range range) 
  262. this.SetRangeFormat(range, 11, Xls.Constants.xlAutomatic, Xls.Constants.xlColor1, Xls.Constants.xlLeft); 
  263.  
  264. /// <summary> 
  265. /// 设置Range的单元格样式 
  266. /// </summary> 
  267. /// <remarks>将各项值设置为默认值</remarks> 
  268. /// <param name="sheet"></param> 
  269. /// <param name="rowNumber1"></param> 
  270. /// <param name="columnNumber1"></param> 
  271. /// <param name="rowNumber2"></param> 
  272. /// <param name="columNumber2"></param> 
  273. public void SetRangeFormat(Xls.Worksheet sheet, int rowNumber1, int columnNumber1, int rowNumber2, int columNumber2) 
  274. this.SetRangeFormat(sheet, rowNumber1, columnNumber1, rowNumber2, columNumber2, 11, Xls.Constants.xlAutomatic); 
  275.  
  276. /// <summary> 
  277. /// 设置Range的单元格样式 
  278. /// </summary> 
  279. /// <param name="sheet"></param> 
  280. /// <param name="rowNumber1">第一个单元格行号</param> 
  281. /// <param name="columnNumber1">第一个单元格列号</param> 
  282. /// <param name="rowNumber2">结束单元格行号</param> 
  283. /// <param name="columnNumber2">结束单元格列号</param> 
  284. /// <param name="fontSize"></param> 
  285. /// <param name="fontName"></param> 
  286. public void SetRangeFormat(Xls.Worksheet sheet, int rowNumber1, int columnNumber1, int rowNumber2, int columNumber2, object fontSize, object fontName) 
  287. this.SetRangeFormat(this.GetRange(sheet, rowNumber1, columnNumber1, rowNumber2, columNumber2), fontSize, fontName, Xls.Constants.xlColor1, Xls.Constants.xlLeft); 
  288.  
  289. /// <summary> 
  290. /// 设置Range的单元格样式 
  291. /// </summary> 
  292. /// <param name="range">Range对象</param> 
  293. /// <param name="fontSize">字体大小</param> 
  294. /// <param name="fontName">字体名称</param> 
  295. /// <param name="color">字体颜色</param> 
  296. /// <param name="horizontalAlignment">水平对齐方式</param> 
  297. public void SetRangeFormat(Xls.Range range, object fontSize, object fontName, Xls.Constants color, Xls.Constants horizontalAlignment) 
  298. range.Font.Color = color; 
  299. range.Font.Size = fontSize; 
  300. range.Font.Name = fontName; 
  301. range.HorizontalAlignment = horizontalAlignment; 
  302.  
  303.  
  304.  
  305.  
  306. #endregion 
  307.  
  308. #region [导入内存中的DataTable] 
  309.  
  310.  
  311. /// <summary> 
  312. /// 导入内存中的数据表到Excel中 
  313. /// </summary> 
  314. /// <remarks>直接导入到工作表的最起始部分</remarks> 
  315. /// <param name="sheet"></param> 
  316. /// <param name="headerTitle"></param> 
  317. /// <param name="showTitle"></param> 
  318. /// <param name="headers"></param> 
  319. /// <param name="table"></param> 
  320. public void ImportDataTable(Xls.Worksheet sheet, string headerTitle, bool showTitle, object headers, DataTable table) 
  321. this.ImportDataTable(sheet, headerTitle, showTitle, headers, 1, 1, table); 
  322.  
  323. /// <summary> 
  324. /// 导入内存中的数据表到Excel中 
  325. /// </summary> 
  326. /// <remarks>直接导入到工作表的最起始部分,且不显示标题行</remarks> 
  327. /// <param name="sheet"></param> 
  328. /// <param name="headers"></param> 
  329. /// <param name="table"></param> 
  330. public void ImportDataTable(Xls.Worksheet sheet, object headers, DataTable table) 
  331. this.ImportDataTable(sheet, nullfalse, headers, table); 
  332.  
  333.  
  334. /// <summary> 
  335. /// 导入内存中的数据表到Excel中 
  336. /// </summary> 
  337. /// <remarks>标题行每一列与DataTable标题一致</remarks> 
  338. /// <param name="sheet"></param> 
  339. /// <param name="table"></param> 
  340. public void ImportDataTable(Xls.Worksheet sheet, DataTable table) 
  341. List<string> headers = new List<string>(); 
  342. foreach (DataColumn column in table.Columns) 
  343. headers.Add(column.Caption); 
  344. this.ImportDataTable(sheet, headers.ToArray(), table); 
  345.  
  346.  
  347. /// <summary> 
  348. /// 导入内存中的数据表到Excel中 
  349. /// </summary> 
  350. /// <param name="sheet">工作表</param> 
  351. /// <param name="headerTitle">表格标题</param> 
  352. /// <param name="showTitle">是否显示表格标题行</param> 
  353. /// <param name="headers">表格每一列的标题</param> 
  354. /// <param name="rowNumber">插入表格的起始行号</param> 
  355. /// <param name="columnNumber">插入表格的起始列号</param> 
  356. /// <param name="table">内存中的数据表</param> 
  357. public void ImportDataTable(Xls.Worksheet sheet, string headerTitle, bool showTitle, object headers, int rowNumber, int columnNumber, DataTable table) 
  358. int columns = table.Columns.Count; 
  359. int rows = table.Rows.Count; 
  360.  
  361. int titleRowIndex = rowNumber; 
  362. int headerRowIndex = rowNumber; 
  363. Xls.Range titleRange = null
  364.  
  365. if (showTitle) 
  366. headerRowIndex++; 
  367. //添加标题行,并设置样式 
  368. titleRange = this.GetRange(sheet, rowNumber, columnNumber, rowNumber, columnNumber + columns - 1); 
  369. titleRange.Merge(missing); 
  370.  
  371. this.SetRangeFormat(titleRange, 16, Xls.Constants.xlAutomatic, Xls.Constants.xlColor1, Xls.Constants.xlCenter); 
  372. titleRange.Value2 = headerTitle; 
  373.  
  374. //添加表头 
  375. int m = 0; 
  376. foreach (object header in headers) 
  377. this.SetCellValue(sheet, headerRowIndex, columnNumber + m, header); 
  378. m++; 
  379.  
  380. //添加每一行的数据 
  381. for (int i = 0; i < rows; i++) 
  382. for (int j = 0; j < columns; j++) 
  383. sheet.Cells[headerRowIndex + i + 1, j + columnNumber] = table.Rows[i][j]; 
  384.  
  385.  
  386. #endregion 
  387.  
  388. #region [插入图片到Excel中的相关方法] 
  389. /// <summary> 
  390. /// 插入图片 
  391. /// </summary> 
  392. /// <param name="sheet">工作表</param> 
  393. /// <param name="imageFilePath">图片的绝对路径</param> 
  394. /// <param name="rowNumber">单元格行号</param> 
  395. /// <param name="columnNumber">单元格列号</param> 
  396. /// <returns></returns> 
  397. public Xls.Picture AddImage(Xls.Worksheet sheet, string imageFilePath, int rowNumber, int columnNumber) 
  398. Xls.Range range = this.GetRange(sheet, rowNumber, columnNumber, rowNumber, columnNumber); 
  399. range.Select(); 
  400. Xls.Pictures pics = sheet.Pictures(missing) as Xls.Pictures; 
  401. Xls.Picture pic = pics.Insert(imageFilePath, missing); 
  402. pic.Left = (double)range.Left; 
  403. pic.Top = (double)range.Top; 
  404. return pic; 
  405.  
  406. /// <summary> 
  407. /// 插入图片 
  408. /// </summary> 
  409. /// <param name="sheet">工作表</param> 
  410. /// <param name="imageFilePath">图片的绝对路径</param> 
  411. /// <param name="rowNumber">单元格行号</param> 
  412. /// <param name="columnNumber">单元格列号</param> 
  413. /// <param name="width">图片的宽度</param> 
  414. /// <param name="height">图片的高度</param> 
  415. /// <returns></returns> 
  416. public Xls.Picture AddImage(Xls.Worksheet sheet, string imageFilePath, int rowNumber, int columnNumber, double width, double height) 
  417. Xls.Picture pic = this.AddImage(sheet, imageFilePath, rowNumber, columnNumber); 
  418. pic.Width = width; 
  419. pic.Height = height; 
  420. return pic; 
  421.  
  422. ///// <summary> 
  423. ///// 插入图片 
  424. ///// </summary> 
  425. ///// <remarks>从流中读取图片</remarks> 
  426. ///// <param name="sheet"></param> 
  427. ///// <param name="imageStream"></param> 
  428. ///// <param name="x"></param> 
  429. ///// <param name="y"></param> 
  430. ///// <param name="width"></param> 
  431. ///// <param name="height"></param> 
  432. ///// <returns></returns> 
  433. //public Xls.Picture AddImage(Xls.Worksheet sheet, Stream imageStream, int x, int y, double width, double height) 
  434. //{ 
  435.  
  436. //} 
  437.  
  438. #endregion 
  439.  
  440. #region [保存Excel] 
  441.  
  442. /// <summary> 
  443. /// 保存Excel 
  444. /// </summary> 
  445. public void Save() 
  446. if (this.mCreateNew) 
  447. this.SaveAs(this.FileName); 
  448. else 
  449. this.CurrentWorkbook.Save(); 
  450.  
  451. //this.SaveAs(this.FileName); 
  452.  
  453. /// <summary> 
  454. /// 保存Excel 
  455. /// </summary> 
  456. /// <param name="filePath">文件的绝对路径</param> 
  457. public void SaveAs(string filePath) 
  458. this.CurrentWorkbook.SaveAs(filePath, Xls.XlFileFormat.xlWorkbookNormal, missing, missing, missing, 
  459. missing, Xls.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing, missing); 
  460.  
  461. #endregion 
  462.  
  463.  
  464. #region [公共帮助方法] 
  465. /// <summary> 
  466. /// 更新Uri 
  467. /// </summary> 
  468. public string UpdateUri 
  469. get 
  470. return "http://hi.baidu.com/1987raymond"
  471.  
  472. #endregion 
  473.  
  474. #region [IDisposable 成员] 
  475. /// <summary> 
  476. /// 对象销毁时执行的操作 
  477. /// </summary> 
  478. public void Dispose() 
  479.  
  480. //this.CurrentWorkbook.Close(true, this.FileName, missing); 
  481. Marshal.FinalReleaseComObject(this.CurrentWorkbook); 
  482. this.CurrentWorkbook = null
  483.  
  484. this.App.Quit(); 
  485. Marshal.FinalReleaseComObject(this.App); 
  486. this.App = null
  487.  
  488. System.GC.Collect(); 
  489. System.GC.WaitForPendingFinalizers(); 
  490.  
  491. #endregion 
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师