C#Excel找不到编译动态表达式

如图所示在用c#编辑EXCEL文件时,会出现找不到动态编译所需要的一种或多种类型,是否缺少应用。
在这里插入图片描述
这里有一种解决方法:
添加引用microsoft.csharp.dll,添加完引用后,该动态语言运行就可以和C#之间进行互操作,microsoft.csharp.dll的嵌入互操作类型属性需要是false,同时需要注意Microsoft.Office.Interop.Excel其嵌入互操作类型属性需要是true,这样excel里面的一些定义就可以和C#内部的进行匹配。
microsoft.csharp.dll
包括 .NET Framework 成员
包括 XNA Framework 成员
包括 可移植类库 成员
Microsoft.CSharp 命名空间包含具有以下功能的类型:支持生成和编译用 C# 语言编写的源代码,支持动态语言运行时 (DLR) 和 C# 之间进行互操作。
在这里插入图片描述
添加后可以发现里面所引用的赋值与操作数据的操作xsheet.Cells[i, 4].Value,这里的value就是动态的dynamic了,就可以在编辑是运行解析,这样就可以直接进行赋值操作。
在这里插入图片描述
在这里插入图片描述
就可以完美解决。

2.网上也有很多将Microsoft.Office.Interop.Excel“嵌入互操作类型”true变为false:使用这种解决方案时在编辑使用里面的一些功能是就必须按照该dll内部的规则来运行:
在这里插入图片描述
嵌入互操作类型: “互操作类型”实际是指一系列Com组件的程序集,是公共运行库中库文件,类似于编译好的类,接口等。 “嵌入互操作类型”设定为true,实际上就是不引入互操作集(编译时候放弃Com程序集),仅编译用户代码的程序集。而设定为false的话,实际就是需要从互操作程序集中获取 COM 类型的类型信息。嵌入是只编译需要编译的部分,将引用的部分代码编译到本地的程序集中。而可以不依赖于原始的dll。程序可以脱离该dll运行,因为所需要的代码已经“嵌入”到程序里了。这样确实可以减轻程序的负担,然而一旦遇到像这种,无法嵌入的话,只能老老实实引用这个dll,将“嵌入互操作类型”设置为False。
此时如果向上面直接进行赋值的话是不行的,例如:
在这里插入图片描述
因为如果是不进行互操作类型的话,那么所使用的EXCEL里面的方法就只能按照该dll里面的定义了,其里面的定义是:
在这里插入图片描述
该value值变成了object对象了,所以无法直接赋值,此时的操作是:
在这里插入图片描述
需要完全按照该Microsoft.Office.Interop.Exce.dll内部的方法来写了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值