打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# 开发excel addin插件的小积累

好吧,进园子这么长时间了,第一次写博文,欢迎拍砖!

关于excel的一些基本操作:

1、引用

开发excel插件,这两个引用是必不可少的。

using Microsoft.Office.Interop.Excel;using Microsoft.Office.Tools.Ribbon;

2、 工作簿、工作表、单元格的操作

ApplicationClass application = new ApplicationClass(); //创建一个excel进程Workbook wbook = Globals.ThisAddIn.Application.ActiveWorkbook; //当前活动workbookWorksheet worksheet = (Worksheet)wbook.ActiveSheet; //当前活动sheetRange range = (Range)worksheet.Application.Selection;//当前选中的cells

根据条件选择指定的sheet:

Worksheet worksheet = wbook.Worksheets["sheet1"];//获取名为sheet1的工作表Worksheet worksheet = wbook.Worksheets[1];//获取第一个工作表

其他的操作:

workSheet.Range[workSheet.Cells[range.Row,1],workSheet.Cells[workSheet.UsedRange.Rows.Count,workSheet.UsedRange.Columns.Count]].Clear();//清除当前选定行以下的所有数据workSheet.UsedRange.Rows.Count//已使用的行数workSheet.UsedRange.Columns.Count//已使用的列数worksheet.Range["A1"].Font.ColorIndex = 3;//将“A1”单元格字体设为红色worksheet.Range["A1","B2"].Interior.ColorIndex = 3; //将“A1”到“B2”范围背景设为红色int num = wss1.Range[wss1.Cells[1, Y1]].Find("").Row; //第一次出现空单元格的行数worksheet.Cells["A1"].Rows.Hidden=true;//隐藏行worksheet.Cells["A1"].Columns.Hidden=true;//隐藏列

range与cells的区别不大,最重要的事range的范围比cells大;

当然,用C#遍历所有单元格时若遇到空单元格,有可能会弹出“无法对null执行运行时绑定”,此时对单元格判断是否为空并用正则表达式匹配数字,然后比较大小的方法(将所有小于6的数字字体设为红色):

View Code

3、 图表生成

(1)以下是生成柱状图的方法(绑定数据的两种方法,一种是连续绑定数据,数据是连续的;另一种是部分绑定,数据是不连续的):

View Code

当然生成图表并不是结束,我们还可以对其进行修改(下面是对当前选中的图表数据进行修改,try部分是为了如果是饼形图修改数据不会报错):

View Code

还可以对图表的数据源进行筛选,筛选不是将无关数据删除,只是将其隐藏起来,隐藏数据的值和位置都是不变的:

swsheet.Range["A1",swsheet.Cells[swsheet.UsedRange.Rows.Count, swsheet.UsedRange.Columns.Count]].AutoFilter(x, “>1”, XlAutoFilterOperator.xlAnd, Type.Missing, true); //筛选选定区域第x列所有大于1的数据wss1.Range[wss1.Cells[1, i], wss1.Cells[wss1.UsedRange.Rows.Count, i]].AdvancedFilter(XlFilterAction.xlFilterCopy, Type.Missing, wss1.Range["AZ1"], true);//将不重复数据写到Z列

(2)数据透视表

即水晶报表,将数据进行统计(下面进行多数据绑定中的两种方法:一个是pivotTable.AddFields可以绑定除数据求和项外的所有数据;若想求和项也绑定多数据,可以定义多个PivotField pivotField,因为一个sheet中只能有一个数据透视表):

View Code

4、结束进程

结束进程可以结束指定进程,也可以结束所有进程:

View Code

5、 数据写入

数据写入也有两种方法:

(1)第一种是直接写入,不过如果有空数据则有可能报错:

wsheet1.Cells[i, j].value = wsheet2.Cells[x, y].value;

(2)第二种是用copy函数将数据整体复制,相当于手动选择数据区域,复制到另一块区域:

View Code

(3)数据排序

像第一种一条一条写入数据,有时可以将数据先排序然后导入,在特定时候可以节省很多不必要的操作,提高效率:

View Code

6、其他的一些操作

触发事件和禁止触发事件:

(1)触发事件(这是写在thisaddin_startup中的括号里面为触发函数,即当触发某一事件时,调用函数):

View Code

(2)禁止触发事件(触发事件是全局的,所以在特定时刻不需要触发事件时要将其禁止):

View Code

7、  错误

(1)     在开发过程中,不可避免会出现一些bug和错误,调试运行的时候导致进程卡死的情况也有可能,次数多了,excel会自动禁用你调试出错的加载项。解决方法是:文件——选项,在弹出框最下方中间偏左下拉框选择“禁用项目”,点击“转到”,将被禁用的加载项启用,然后在“开发工具”选项卡点击“com加载项”,勾选你的项目名称,确定,加载项就出来了,又可以一起快乐的玩耍了!

还有“异常来自 HRESULT:0x800A03EC”这种错误,一般是代码有错误,具体原因视情况而定。(已遇到因为从0开始循环抛异常和因为透视表表格格式不同而使用pivotField.PivotFilters.Add时抛异常)

(2)     在卸载旧的addin时可能会未卸载干净,这就需要在注册表中删除,注册表位置:HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins\

8、参考

浅谈Excel开发:三 Excel 对象模型:

http://www.cnblogs.com/yangecnu/p/3247234.html

C#开发Excel报表系列整理:

http://www.360doc.com/content/07/0824/10/12027_691547.shtml

VSTO学习归结:

http://club.excelhome.net/forum.php?mod=viewthread&tid=896478&extra=page%3D1

工作簿工作表所有事件一览表:

http://club.excelhome.net/thread-71744-1-1.html

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
excel遍历行列的VBA参考
[转载]Excel中的VBA对象及其应用之二
VBA的使用
Excel【VBA教程】数组了解一下
Excel之VBA常用功能应用篇:获取有数据单元格最后一行
Excel VBA 9.4 数组写入excel的方法和技巧
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服