ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6545|回复: 11

[分享] VSTO中字典用法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-11-8 21:34 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我也不解释了,如果懂得字典的话相信您能看的明白。举例列出了几种情况的一般用法
Private Sub Sheet1_Startup() Handles Me.Startup
        Dim dic As New Dictionary(Of String, String)
        Dim Arr As Array
        dic.Add("我", "A")
        dic.Add("你", "B")
        dic.Add("他", "B")
        If dic.ContainsKey("你") Then
            dic("你") = dic("你") & "D"
            MsgBox(True)
        End If
        MsgBox(dic("你"))
        If dic.ContainsValue("B") Then
            MsgBox(True)
        End If
        MsgBox(dic("他"))
        Arr = New String(dic.Keys.Count) {}
        dic.Keys.CopyTo(Arr, 0)
        MsgBox(Arr(1))
        Arr = New String(dic.Values.Count) {}
        dic.Values.CopyTo(Arr, 0)
        MsgBox(Arr(1))
    End Sub


该贴已经同步到 HHAAMM的微博

TA的精华主题

TA的得分主题

发表于 2012-11-8 22:07 | 显示全部楼层
明天我写一个C#,代码很接近。

TA的精华主题

TA的得分主题

发表于 2012-11-10 09:58 | 显示全部楼层
C#的代码
  1. private void DemoDic()
  2.         {
  3.             Dictionary<string, string> dic =
  4.             new Dictionary<string, string>();
  5.             //向字典添加值
  6.             dic.Add("aa", "a1");
  7.             dic.Add("bb", "b1");
  8.             dic.Add("cc", "c1");
  9.             //检测是否存在ee
  10.             if (!dic.ContainsKey("ee"))
  11.             {
  12.                 dic.Add("ee", "e1");
  13.             }
  14.             int i;
  15.             //取得字典元素的数目
  16.             i = dic.Keys.Count;
  17.             //宣告String型数组,长度等于字典所含数量
  18.             string[] arrKeys = new string[i];
  19.             string[] arrValues = new string[i];
  20.             dic.Keys.CopyTo(arrKeys, 0);
  21.             dic.Values.CopyTo(arrValues, 0);
  22.             rng1 = Application.get_Range("b6","e6");
  23.             rng1.Value2 = arrKeys;
  24.             rng1 = Application.get_Range("b7", "e7");
  25.             rng1.Value2 = arrValues;
  26.             rng1 = sh.Cells[6, 1];
  27.             rng1.Value2 = "Key";
  28.             rng1 = sh.Cells[7, 1];
  29.             rng1.Value2 = "Value";

  30.           }
复制代码

TA的精华主题

TA的得分主题

发表于 2013-1-23 11:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请问版主,带序号的字典如何定义?VSTO 是否可以像VBA用等式那样赋值。比如:dic(1)(arr(n,1))=dic(1)(arr(n,1))+arr(n,2)

TA的精华主题

TA的得分主题

发表于 2013-3-27 21:30 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-6-5 14:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢分享,1024G

TA的精华主题

TA的得分主题

发表于 2020-6-5 16:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-6-7 15:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
excel.x 发表于 2020-6-5 16:22
dic.Values不能存放range类型的数据吧

不管是key还是value,字典都可以存放任何类型的数据

TA的精华主题

TA的得分主题

发表于 2021-2-19 17:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-2-19 18:46 | 显示全部楼层
存放何种数据类型在于该泛型类字典特化时的参数:
如果这样特化Dictionary<string, string>则Key和Value就都只能是字符串类型;
如果这样特化Dictionary<int,Excel.Range>则Key是整数类型,Value就是单元格对象;
如果这样特化Dictionaray<object, object>则可以储存任意类型,但使用时某些类型需类型转换;
如果这样特化Dictionaray<dynamic, dynamic>同样可以储存任意类型,调用时动态解析对象类型。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-21 19:35 , Processed in 0.036640 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表