随笔分类 - EXCEL VSTO
摘要:之前在VSTO里添加过几次Ribbon,没有发现什么问题。但前几天装了一个微软出品的VS的插件Productivity Power Tools后,只要一添加Ribbon,VS2010就崩溃掉。初步估计应该是由这个插件引起的,所以卸载这个插件,但VS2010还是崩溃,而且更让我崩溃的是:修复安装VS2010后问题依旧。在微软官方的VSTO论坛上发了个帖子,但估计没人碰到过,都几天了也没找到答案。如果...
阅读全文
摘要:这个方法其实就是调用了F5定位里的columndifferences,但两者有一点不同的地方:定位里的ColumnDifferences只能够以所选区域的第一个单元格做参照,而本方法可以自己定义参照单元格,即代码中的Range["a2"]。
阅读全文
摘要:前几天有位朋友发邮件给我,问的这个问题,代码弄的差不多了,但碰到一个几天都没琢磨出来的问题:问题出在第四行,Locals里显示series.Values是一个object[],但(object[])series.Values报Unable to cast object of type ‘System.Object[*]‘ to type ‘System.Obje...
阅读全文
摘要:private void button1_Click(object sender, EventArgs e){ Excel.Shape lineA = Globals.Sheet1.Shapes.AddLine(25, 140, 495, 140); Excel.Shape lineB = Globals.Sheet1.Shapes.AddLine(495, 140, 495, 305); Exc...
阅读全文
摘要:VBA里直接用“Calendar.Value”就可以获取日历控件的值了,但VSTO里竟然没有这个属性。找了半天,原来要这样搞才行:看来VBA和VSTO里的日历控件差异很大呀,总结一下:1、VBA里叫Calendar Control,VSTO里叫monthCalendar。2、VSTO的日历控件支持17XX年的日期,不过输入进EXCEL变成文本。2、VSTO里的日历控件更强大...
阅读全文
摘要:private void button1_Click(object sender, EventArgs e){ for (int i = 1; i <= Application.CustomListCount; i++) { object obj = Application.GetCustomListContents(i); Array arr = obj as Array; Message...
阅读全文
摘要:昨天一个同事问我,怎么在VSTO的控件上运行工作簿中的VBA代码。这个很简单,VSTO提供了一个Run方法,可以直接运行Marco,就和你在VBA的一个过程里调用另一个过程一样。VSTO里的代码:VBA代码:很简单吧。注意:我现在用的是VS2010,所以Run方法后面的可选参数可以省略。如果你用的还是VS2008,你还是得一个个的把”missing”写上。
阅读全文
摘要:大家都知道,C#里没有直接的方法能转置一个数组,所以一般都用循环来完成。为此我上次专门在CSDN上发了个贴,询问VSTO里用C#有没有办法可以不用循环来转置数组,但没得到结果,为此我还抱怨了微软好久,C#的功能竟然还不及VBA。今天,突然闪过一个念头,VBA里可以调用EXCEL的工作表函数,那VSTO里是否也可以呢?试了一下,原来真可以,郁闷了,以前转了那么多弯路。测试代码如下:private v...
阅读全文
摘要:今天碰到了个问题,发现无法使用某些对象事件,+=后双TAB出不来。四处找原因,GOOGLE、MSDN上翻了许久,终于找到了原因和解决方法。原因:写了一个同名的方法,而VSTO处理规则应该是方法>事件,所以有了同名的方法后事件就无法使用了。如已经写了下面的方法:如果再写Globals.ThisWorkbook.ActivateEvent+=,双TAB后会报以下提示:此类中已存在处理程序&rdq...
阅读全文
摘要:为了测试代码的通用性,我装了2003和2007的双Office,但今天却碰到了个问题,在VS2008下开发了一个EXCEL2003加载宏,保存后再次打开后会弹出转换向导。不当心点了个"完成",结果就郁闷了,只能重写。MS的VSTO论坛上查了一下,还真找到了解决方法,原来只要把工具>选项>Office工具>项目升级里的“始终升级到已安装版本Office”取消...
阅读全文
摘要:今天某论坛上看到有人问VBA里的Msgbox在C#里怎么没有了。刚学C#那会,我也迷惑了一阵,后来MSDN上一查,原来Msgbox在C#里改名字了:Messagebox.Show 。小知识,希望对从VBA到C#的初学者有用。
阅读全文
摘要:int i = 0, k = 0;DirectoryInfo dir = new DirectoryInfo(@"c:\windows");DirectoryInfo[] dirs = dir.GetDirectories();foreach (DirectoryInfo folder in dirs){i++;this.Range["a" + i, missing].Value2 = folde...
阅读全文
摘要:VB.NET的代码如下同样是object类型的Sh,VB.NET里可以直接调用name属性,而在C#中需要把Sh强制转化为Excel.Worksheet后才能调用Sh的worksheet的属性。从VBA转到学习C#需要改变的观念真多,希望这点经验对和我一样的VSTO+C#的初学者有点用。
阅读全文
摘要:private void button1_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); foreach (Excel.Worksheet sht in Globals.ThisWorkbook.Worksheets) { sb.Append(sht.Name); sb.Append("\n")...
阅读全文
摘要:可能有人会问,除了ThisWorkbook_SheetActivate事件,为什么还要加上一个ThisWorkbook_ActivateEvent事件?这是因为,打开表的时候,当前表并不会激发ThisWorkbook_SheetActivate事件,所以还需要加上工作簿的激活事件。
阅读全文
摘要:9.1(2) ------ 9.119(3).5(1) ----- 999.589(2).7 ------ 899.7即把括号替换成括号前一数字的N次原帖见http://topic.csdn.net/u/20100317/19/e25694b8-ff80-427a-910b-04a666ce6cbc.html
阅读全文
摘要:private void ThisWorkbook_Startup(object sender, System.EventArgs e) { string sCode = "Sub VBAMacro()\r\n" + "MsgBox \"Test\"\r\n" + "End Sub"; VBComponent oModule; oModule = Globals.ThisWorkbook.VBPr...
阅读全文
摘要:注意:1、这个事件是工作簿的事件,所以需要写在thisworkbook里 2、捕捉的是工作簿的缩放,而不是EXCEL程序的缩放
阅读全文
摘要:VS2005版的C#没有提供和VB.NET一样的RESIZE方法,所以经常看到很多用C#的同学在数组填充单元格的时候是通过定义一个Excel.Range再赋值Value2的方法来做的,其实VS2008中提供了一个get_Resize方法,无需那么麻烦了。
阅读全文
摘要:private void button1_Click(object sender, EventArgs e){ StringBuilder sb = new StringBuilder(); for (int i = 1; i < this.Application.RecentFiles.Count; i++) { sb.Append(this.Application.RecentFiles...
阅读全文

浙公网安备 33010602011771号