打开APP
userphoto
未登录

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

开通VIP
Igor-曾deVSTO提取唯一值(C#版本)

今天为大家带来一个小功能,提取唯一值,也即按单元格去除重复值,对于经常玩数据的同学来说应当是必备功能。

话不多说,请看实际需求:





VSTO提取唯一值(C#)动画

Excel中国合伙人:Igor-曾,其人不仅仅一表人才、更加让人妒忌的是编程水平达到了很高的境界,且为人谦和、乐于助人;能有幸看到这篇文章的读者,你们是幸运的!



一、对需求做几点说明:


1. 按单元格提取唯一值,忽略空白单元格;

2. 注意文本型数字。(考虑到EXCEL默认数值输出);


二、考虑输入输出的方式:


1.  考虑到操作的方便性,当前选择区域作为输入(参见EXCEL常见的输入方式);

2.  考虑到应用环境的多样性,将输出位置的选择权交给用户;


三、开发方式:


1.  作为一个通用功能,显然插件形式(AddIn)是最合适的方式;

2.  考虑到专业、高端、安全,本次开发采用VS C#完成(主要还是装逼);


四、解决思路


 使用字典储存唯一值,文本型数值存储前,前置单引号强制文本。


五、开发流程:




1.  新建项目





2. 新建功能区




3. 新建菜单按钮




4. 撸代码





using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

using Microsoft.Office.Interop.Excel;

using Microsoft.Office.Tools.Ribbon; 


private void button1_Click(object sender, RibbonControlEventArgs e)

        {

            //功能:提取唯一值

            object[,] Myarr; //定义数组Myarr,object类似VBA中的Variant()同时存储文本/数值。

            double Number;

            Dictionary MyDic = new Dictionary(); //声明字典并实例化


            if (Globals.ThisAddIn.Application.Selection.count==1) //如果当前选择只有一个单元格则返回

            {

                return;

            }


            Myarr = Globals.ThisAddIn.Application.Selection.Value; //将当前选择区域赋值给数组


            foreach(object a in Myarr) //遍历数组元素

            {

                if (a!=null&&!MyDic.ContainsKey(a)) //忽略空值

                {

                    if(a.GetType()==typeof(string)&&double.TryParse(a.ToString(),out Number)) //判断字符型数字

                    {

                        MyDic.Add(''' + a, 0); //字符型数字加单引号强制转换成文本

                    }

                    else

                    {

                        MyDic.Add(a, 0);

                    }                    

                }

            }

            if (MyDic.Count==0) //如果单元格全为空,退出

            {

                MessageBox.Show('区域内没有有效数据,程序退出');

                return;

            }


            //输出字典Keys          

            Range MyRng;

            //选择结果放置区域

            MyRng = Globals.ThisAddIn.Application.InputBox('请选择放置区域', Title: '选择', Type: 8);


            //MyDic.Keys.ToArray()将Keys转换为数组

            //WorksheetFunction.Transpose数组转置,方便按列输出

            //Resize扩展区域

            MyRng.Resize[MyDic.Count,1].Value = Globals.ThisAddIn.Application.WorksheetFunction.

                Transpose(MyDic.Keys.ToArray());            

        }


Excel中国合伙人---公告

Excel中国合伙人近期推出了大量关于Excel编程的文章,

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Excel必会技能之用函数公式快速提取单列唯一值!(赶紧收藏)
excel如何快速提取不重复值?提供2个经典用法
数组公式创建无重复项的数据有效性下拉列表
Excel公式练习:根据条件获取唯一的第n个值
Excel VBA 学习总结
EXCEL删除重复值,保留唯一值的两种方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服