设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 8942|回复: 14
打印 上一主题 下一主题

【练习】如何获得一个COM对像的真实类型

[复制链接]
跳转到指定楼层
1#
发表于 2014-2-24 17:14:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 faunus 于 2014-2-26 11:02 编辑

先上代码:

  1.         private void ThisAddIn_Startup(object sender, System.EventArgs e)
  2.         {
  3.             //Application 的三种调用形式
  4.             Excel.Application app;
  5.             app = Application;
  6.             app = this.Application;
  7.             app = Globals.ThisAddIn.Application;//在RIBBON中,只能这样调用。

  8.             //获得基本对像
  9.             Excel.Workbook book = app.ActiveWorkbook;
  10.             Excel.Worksheet sh = book.ActiveSheet;

  11.             //单元格对像
  12.             Excel.Range rA1 = sh.Cells[1, 1];

  13.             //开始随便撸
  14.             rA1.Value = "hello";
  15.             rA1.Formula = "=1+100";

  16.             //如何获得对像的真实类型
  17.             string typeA = rA1.GetType().ToString();
  18.             string typeB = Microsoft.VisualBasic.Information.TypeName(rA1);
  19.             System.Windows.Forms.MessageBox.Show
  20.                 (
  21.                     string.Format(
  22.                         "TypeA:{0},TypeB:{1}",
  23.                         typeA,
  24.                         typeB)
  25.                 );
  26.         }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

推荐
发表于 2014-2-24 17:31:56 | 只看该作者
我要多来学习学习,以后不会遇到问题时束手无策

评分

参与人数 1V币 +1 收起 理由
faunus + 1 (V币)代码练习跟贴(1分)

查看全部评分

回复 支持 1 反对 0

使用道具 举报

2#
 楼主| 发表于 2014-2-24 17:23:02 | 只看该作者
结果:




可以看到:
通过 GetType() 方法,
仅仅只能获得一个通用的COM类型说明: System._ComObject。
这个显然不是我们想要的,由于C#3.0开始提供动态类型,类型在编译期并不能够确定。
为此我们要想采用新的方法。
Microsoft.VisualBasic.Information.TypeName(rA1);
这明返回的类型说明正是我们需要的 Range 。


这时 vb.net 比 c# 在这个地方在略胜一筹了
如果是 VB.net 无需额外的引用,
而在 C# 中必须额外多一步操作,引用 Microsoft.VisualBasic 类型库。


其实对一些有代码洁癖的人来说,一定还是不够爽,
请不要着急,我会在接下来的 高级课程中 为大家提供一个纯 C#的解决方法,
不过要有心理准备哦,方法挺高级的,请先过了 初级班、中级班吧!






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
发表于 2014-2-24 17:38:49 | 只看该作者
错误        9        命名空间“Microsoft.VisualBasic”中不存在类型或命名空间名称“Information”。是否缺少程序集引用?        E:\vs10.0\ExcelAddIn1\ExcelAddIn1\ThisAddIn.cs        35        50        ExcelAddIn1


要引用哪个程序集

评分

参与人数 1V币 +1 收起 理由
faunus + 1 (V币)代码练习跟贴(1分)

查看全部评分

点击这里给我发消息

5#
发表于 2014-2-24 17:56:53 | 只看该作者
火钳刘明

评分

参与人数 1V币 +1 收起 理由
faunus + 1 (V币)代码练习跟贴(1分)

查看全部评分

回复

使用道具 举报

6#
 楼主| 发表于 2014-2-24 20:19:49 | 只看该作者
cc1027cc 发表于 2014-2-24 17:38
错误        9        命名空间“Microsoft.VisualBasic”中不存在类型或命名空间名称“Information”。是否缺少程序集引 ...

需要对程序集进行引用:Microsoft.VisualBasic


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
7#
发表于 2014-2-24 22:18:23 | 只看该作者
本帖最后由 tianping 于 2014-2-24 22:29 编辑

public interface Range : IEnumerable{}
一开始声明Range时就是个接口,接口比类还原始,所以GetType()没有实质意义是必然的。不知这样理解对不?
高级班的方法一定很深奥!想看看迷底

评分

参与人数 1V币 +1 收起 理由
faunus + 1 (V币)代码练习跟贴(1分)

查看全部评分

8#
 楼主| 发表于 2014-2-24 22:20:32 | 只看该作者
tianping 发表于 2014-2-24 22:18
好深奥!
想看看迷底

现在不能看,那个太复杂,你一定会陷进去了。
9#
发表于 2014-2-24 22:27:27 | 只看该作者
faunus 发表于 2014-2-24 22:20
现在不能看,那个太复杂,你一定会陷进去了。

我先把前面的课一步一步学好
10#
发表于 2014-2-25 20:16:15 | 只看该作者
已撸,但是不明白语句的含义。。。。

评分

参与人数 1V币 +1 收起 理由
faunus + 1 (V币)代码练习跟贴(1分)

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-29 06:31 , Processed in 0.126140 second(s), 36 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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