这里有一个技巧。如果menuTop或menuCreateMail 在AddMenu方法中定义,会导致Excel打开后,多次点击按钮事件,它只执行一次。除非你重新启动EXCEL。
点击菜单“Import Data”的事件代码如下
void buttonMenu_Click(Microsoft.Office.Core.CommandBarButton Ctrl, ref bool CancelDefault) { //分析CSV文件,设置指定报表列的值 } |
代码比较长。首先是弹出对话框,选择要导入的包含测量数据的文件,分析并导入值。
导入值的代码涉及到操作EXCEL,代码如下
Excel.Worksheet sheet = (Excel.Worksheet)Application.ActiveWorkbook.ActiveSheet; int rowIndex = 10; int maxIndex = 300; for (rowIndex = 10; rowIndex < maxIndex;rowIndex++ ) { Excel.Range source = sheet.get_Range("A" + rowIndex, "A" + rowIndex); Excel.Range target = sheet.get_Range("F" + rowIndex, "F" + rowIndex); if (String.IsNullOrEmpty(source.Value2.ToString())) continue; else { string hashkey = source.Value2.ToString(); if (table.Contains(hashkey)) target.Value2 = table[hashkey].ToString(); } } |
table的类型是Hashtable,它以零件名作键名,零件的测量数据为值。
读取文件的代码也有点技巧。我的机器是XP SP2英文版,Excel是2003的英文标准版。如果以COM Interop API读取数据文件,把数据文件当作EXCEL文件来读取,会经常出现乱码,如果是以文本文件的方式读取数据文件,则没有任何问题。这个问题我一直找不到原因。
下面说一下怎样部署这个插件 以下几个步骤是必须的,而且要以管理员身份才能执行以下步骤
1 在目标机器上,安装 .net Framework 2.0 http://www.microsoft.com/downloads/details.ASPx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=en
2 安装Office 2007 PIAs
http://www.microsoft.com/downloads/details.aspx?familyid=59DAEBAA-BED4-4282-A28C-B864D8BFA513&displaylang=en
3 安装 VSTO Runtime 2.0:
http://www.microsoft.com/downloads/details.aspx?FamilyId=4468D8CB-B43E-4B09-82F6-8BA3F7B5E935&displaylang=en#filelist
4 确保EXCEL 2003已经打上了SP2补丁,否则请安装SP2补丁
5 编译安装项目,并执行,完成插件的安装。
6 到安装插件的目录,执行命令行工具,设置程序集的权限(程序集名字为QCExcelAddIn)
cASPol -machine –addfulltrust QCExcelAddIn.dll |
经过这几步,打开EXCEL,应该可以看到插件的菜单。如果仍然看不到菜单,看是不是插件被EXCEL禁用. 在DisalbeItems中把插件激活。
至此,这个问题圆满解决。经过一段时间的使用,测量员要求修改一下测量数据的文件格式,如下图
解析这种格式的代码比较简单,直接用正则式分解字符串即可,而上面的那个版本的格式还需要判断是奇数行还是偶数行,奇数行取零件名称,偶数行读取测量数据。
关于这个插件的注册信息,在注册表中有相应的键值对说明
插件所在的注册表键的路径是
值如下图所示
也许这个办法也不是最优化的办法,欢迎提供您的思路供大家参考学习。