收藏 分销(赏)

c-操作excel总结.doc

上传人:二*** 文档编号:4512484 上传时间:2024-09-26 格式:DOC 页数:14 大小:218KB
下载 相关 举报
c-操作excel总结.doc_第1页
第1页 / 共14页
本文档共14页,全文阅读请下载到手机保存,查看更方便
资源描述
C#操作Excel总结 Excel 基本操作 查看Excel中宏的方法如下: ALT+F11 0. 导入命名空间:  view source print? 1 using Microsoft.Office.Core; 2 using Microsoft.Office.Interop.Excel; 3 using System.IO; 4 using System.Reflection;   1. 如何打开已有excel文档,或者创建一个新的excel文档    view source print? 1 Application app = new Application(); 2 Workbooks wbks = app.Workbooks; 3 _Workbook _wbk = wbks.Add(xxx);     若打开已有excel,把“xxx”替换成该excel的文件路径; 注:若新建一个excel文档,“xxx”替换成true即可;不过这里新建的excel文档默认只有一个sheet。    2. 取得、删除和添加sheet   view source print? 1 Sheets shs = _wbk.Sheets;     2.1取得:   view source print? 1 //i是要取得的sheet的index 2 _Worksheet _wsh = (_Worksheet)shs.get_Item(i)     2.2 删除: view source print? 1 //删除sheet必须的设置 2 app.DisplayAlerts = false; 3 _wsh.Delete(); 2.3 添加: view source print? 1 //a(before),b(after):确定添加位置;c:数目;d:类型 2 app.Worksheets.Add(a,b,c,d); 2.4 sheet的重命名 view source print? 1 _wsh.Name = "xxx";   3. 删除行和列  3.1 删除行: view source print? 1 ((Range)_wsh.Rows[3, Missing.Value]).Delete(XlDeleteShiftDirection.xlShiftUp); 3.2 删除列: view source print? 1 _wsh.get_Range( 2 _wsh.Cells[1, 2],  3 _wsh.Cells[_wsh.Rows.Count, 2]).Delete(XlDeleteShiftDirection.xlShiftToLeft 4 );   4. 添加行和列  4.1 添加行: view source print? 1 ((Range)_wsh.Rows[11, Missing.Value]) 2 .Insert(Missing.Value, XlInsertFormatOrigin.xlFormatFromLeftOrAbove); 4.2 添加列: view source print? 1 _wsh.get_Range( 2 _wsh.Cells[1, 1], _wsh.Cells[_wsh.Rows.Count, 1]) 3 .Insert(Missing.Value, XlInsertShiftDirection.xlShiftToRight);   5. 单元格操作  5.1 单元格的取得 view source print? 1 //获得单元格对象 2 _wsh.Cells[row, cell] 5.2 设置公式 view source print? 1 //在对应的单元格输入公式即可 2 _wsh.Cells[row, cell] = "=Sum(A1/B1)"; 5.3 合并单元格 view source print? 1 ((Range)_wsh.Rows[1, Missing.Value]).Merge(Missing.Value); 5.4 设置行高和列宽 view source print? 1 ((Range)_wsh.Rows[3, Missing.Value]).RowHeight = 5; 2 ((Range)_wsh.Rows[3, Missing.Value]).ColumnWidth = 5; 5.5 设置单元格颜色 颜色共有56中,详情请参照附录的[颜色对照表] view source print? 1 ((Range)_wsh.Rows[1, Missing.Value]).Interior.ColorIndex = 3; 5.6 设置字号 view source print? 1 ((Range)_wsh.Cells[1, "B"]).Font.Size = 8; 5.7 是否设置粗体 view source print? 1 ((Range)_wsh.Rows[1, Missing.Value]).Font.Bold = false; 5.8 单元格/区域、水平垂直居中 view source print? 1 ((Range)_wsh.Cells[2, 1]).HorizontalAlignment = XlVAlign.xlVAlignCenter; 5.9 设置区域边框 view source print? 1 ((Range)_wsh.Cells[3, 3]).Borders.LineStyle = 3; 5.10 设置边框的上、下、左、右线条 view source print? 01 //左 02 _wsh.get_Range( 03 _wsh.Cells[2, 1], _wsh.Cells[2, 2]) 04 .Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;// 05    06 //右 07 _wsh.get_Range( 08 _wsh.Cells[2, 1], _wsh.Cells[2, 2]) 09 .Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;// 10    11 //上 12 _wsh.get_Range( 13 _wsh.Cells[2, 1], _wsh.Cells[2, 2]) 14 .Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//下 15    16 //下 17 _wsh.get_Range( 18 _wsh.Cells[2, 1], _wsh.Cells[2, 2]) 19 .Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick; 自动换行 range.WrapText 6. 指定区域的复制  view source print? 01 _Worksheet _wsh = (_Worksheet)shs.get_Item(1);//复制选中区域的内容 02    03 Range range = _wsh.get_Range(_wsh.Cells[7, 1], _wsh.Cells[10, _wsh.Columns.Count]); 04    05 range.Select(); 06 range.Copy(Type.Missing); 07    08 //选中粘贴的起始位置 09 Range test = ((Range)_wsh.Cells[11, 1]); 10 test.Select(); 11    12 //屏蔽掉Alert,默认确定粘贴 13 app.DisplayAlerts = false; 14 test.Parse(Missing.Value, Missing.Value); 注:Type.Missing和Missing.Value,在excel的操作中被视为某些参数的默认值,他们起到的作用很多时候是形式补足参数   7. excel文件的保存,及后续处理  7.1 文件保存 view source print? 1 //屏蔽掉系统跳出的Alert 2 app.AlertBeforeOverwriting = false; 3    4 //保存到指定目录 5 SaveAs(filePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 注:这个地方只能采用该方法保存,不然在指定路径下保存文件外,在我的文档中也会生成一个对应的副本 7.2 后续处理:退出和释放 view source print? 1 //_wbk.Close(null, null, null); 2 //wbks.Close(); 3 app.Quit(); 4    5 //释放掉多余的excel进程 6 System.Runtime.InteropServices.Marshal.ReleaseComObject(app);  7 app = null; 说明:在application关闭的过程中,通常我们有两种方案: #直接退出app #先关闭workbook,然后关闭workbooks,最后在退出app 鉴于这两种方式,或许本质上是一样的(这点需要证明),但是依据我们软件开发的原则:哪里需要哪里声明,哪里结束哪里释放回收。 既然在直接退出app的时候,我们不清楚workbook和workbooks具体在什么时间关闭,不如在结束的时候直接手动关闭,这样做可以做到资源的快速直接回收; 所以,建议采用先关闭workbook,然后关闭workbooks,最后在退出app。   8. 关于单元格设置域和取得域里需要的数据  8.1 若单元格已经设置为下拉框 view source print? 1 //这里的“1,2,3”设置的就是下拉框的值 2 ((Range)_wsh.Cells[2, 1]) 3 .Validation.Modify(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, Type.Missing, "1,2,3", Type.Missing); 8.2 若单元格还没有设置为下拉框的形式 view source print? 1 ((Range)_wsh.Cells[2, 1]) 2 .Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, Type.Missing,"1,2,3", Type.Missing); 8.3 取得下拉框域的值 view source print? 1 string strValue = ((Range)_wsh.Cells[2, 1]).Validation.Formula1; 注:若在excel模板中通过有效性设定了下拉框的值,strValue得到的将会是excel里的公式,需将其转换, 取得strValue后,可以根据其索引得到你需要的数值;   9. 隐藏行和隐藏列  9.1 隐藏行 view source print? 1 _wsh.get_Range(_wsh.Cells[19, 1], _wsh.Cells[22, 1]).EntireRow.Hidden = true; 9.2 隐藏列 view source print? 1 _wsh.get_Range(_wsh.Cells[1, 1], _wsh.Cells[_wsh.Rows.Count, 1]) 2 .EntireColumn.Hidden = true; 10.锁定指定区域 Range.Locked 11.Excel中插入图片 1.using System; 2.using System.Collections.Generic; 3.using System.Text; 4.//using Excel = Microsoft.Office.Interop.Excel; 5.using Excel; 6.using System.Windows.Forms; 7. 8. 9. namespace ExcelReport 10. { 11. class InsertPicToExcel 12. { 13. /**//// <summary> 14. /// 打开没有模板的操作。 15. /// </summary> 16. public void Open() 17. { 18. this.Open(String.Empty); 19. } 20. 21. /**//// <summary> 22. /// 功能:实现Excel应用程序的打开 23. /// </summary> 24. /// <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. //参数详细信息参见: 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. 调用: 1.InsertPicToExcel ipt = new InsertPicToExcel(); 2.ipt.Open(); 3.ipt.InsertPicture("B2", @"C:\Excellogo.gif"); 4.ipt.InsertPicture("B18", @"C:\Excellogo.gif", 120, 80); 5.ipt.SaveFile(@"C:\ExcelTest.xls"); 6.ipt.Dispose(); 7. 【Excel】行高和列宽单位的换算 默认情况下,Excel的行高为14.25(19像素),列宽为8.38(72像素),单位无法直接用毫米(mm)或厘米(cm)表示,需要换算,换算表如下。 ====================================== 像素 磅 英寸 毫米 厘米 十二点活字 96 72 1 25.4 2.54 6 ====================================== 行高是以磅为单位 1个单位=1磅=4/3像素=0.3528mm(25.4/72) 1mm=2.835个单位(72/25.4) 列宽与EXCEL的标准字体有关 “帮助”中说——出现在“标准列宽”框中的数字为适合于单元格的标准字体的数字 0-9 的平均值。 【注解】 标准字体——是指“EXCEL”---“工具”---“选项”---“常规”中的标准字体。当然与字的大小也有关,因为字体中,如0与1,其宽度有可能不一样,EXCEL是以“标准字体”的0123456789这10个字符的宽度平均值为计量单位。 1 个单位列宽为多少磅可用VBA得到。 =Range("A1").Width/Columns(1).ColumnWidth (当然A1不能是合并了的单元格) 如:简体OFFICE,默认标准字体(宋体12号)情况下 Range("A1").Width/Columns(1).ColumnWidth=6.444 这样行高为56.7,列宽为8.799时,为2*2CM 1个单位列宽=2.2733mm 1mm=0.4399个单位列宽 在调整单元格行高和列宽时,如果觉得换算有些麻烦,不过有个简单的方法: 先插入一矩形或文本框,将其宽度设为10mm,移动使其左边界与表格线重合,然后调整单元格列宽使网络线与矩形的右边界重合。也只能是近似的。 使用毫米或厘米表示Excel的行高和列宽单位 1.Excel的行高和列宽单位无法用mm或cm表示。需要计算。在1024*768下,1CM约为38像素。以此为基准,可计算并控制报表的行列位置。 行高是以磅为单位 1mm=2.835磅 2.Excel行高所使用单位为磅(1cm=28.6磅),列宽使用单位为1/10英寸(既1个单位为2.54mm) excel里的单位和cm(厘米)可以这样转换: 行高: 1毫米=2.7682个单位 1厘米=27.682个单位 1个单位=0.3612毫米 列宽: 1毫米=0.4374个单位 1厘米=4.374 个单位 1个单位=2.2862毫米 3.列宽与EXCEL的标准字体有关 ===================== "帮助"中说------- 出现在“标准列宽”框中的数字为适合于单元格的标准字体的数字 0-9 的平均值。 ===================== 注解: 标准字体------是指EXCEL---工具---选项---常规中的标准字体(当然与字大小也有关) 因为字体中,如,0与1其宽度有可能不一样,EXCEL是以"标准字体"的0123456789这10个字符的平均值为计量单位. 1 个单位列宽为多少磅可用VBA得到。 =Range("A1").Width/Columns(1).ColumnWidth (当然A1不能是合并了的单元格) 如: 简体OFFICE,默认标准字体(宋体12号)情况下 Range("A1").Width/Columns(1).ColumnWidth=6.444 这样行高为56.7,列宽为8.799时,为2*2CM (此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容,供参考,感谢您的配合和支持) 编辑版word
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 通信科技 > 计算机应用

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服