- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究 Boo,并认为尝试转换几个可自动执行 Excel 的古老 VB 脚本(在本例中为 2007 年)将是一个有用的练习。很多事情似乎很容易翻译,但是我在选择范围时遇到了很大的麻烦 - 每当我尝试获取或设置它们时,我都会得到一个 TargetInitationException 未找到成员。
这是我在 booish 中运行的一个(精简的)示例:
def CreateInstance(progid):
type = System.Type.GetTypeFromProgID(progid)
return type()
xl as duck = CreateInstance("Excel.Application")
xl.Visible = true
xl.Workbooks.Add
sht as duck = xl.ActiveSheet
#Next line throws exception
rng as duck = sht.Range("A1")
某些事情工作正常,例如设置工作表的“名称”属性等,但如何使用范围? VB 是否隐藏了一些我需要调用的特殊方法?如果有,我将如何找到这些方法?
干杯,
莱尼。
最佳答案
Range 实际上是一个属性,它是一个有点特殊的属性,因为它作为索引器工作,这意味着它具有类似数组或字典的语义。在大多数语言中,这意味着您可以访问 sht.Range["A1"]
。这是语法糖,实际上它的访问方式就像任何其他方法一样,即:
sht.get_Range("A1",System.Reflection.Missing.Method)
我尝试使用 Boo、Ruby 和 IronRuby 来重复您的代码,同时使用语法糖样式和显式方法调用。在 IronRuby 中,我可以让它完美地工作,但只能在 32 位解释器中。在常规 Ruby(我的配置上是一个 32 位应用程序)中,它也运行得很好。在 64 位解释器中,Range 属性从未正确解析。
因此,我怀疑 Boo Interactive Shell 正在 64 位模式下运行,并且互操作因此而失败。不幸的是,在使用 CORFLAGS.exe 将本地 Boo 二进制文件设置为以 32 位模式运行后,同样的问题再次出现,因此我认为这不是真正的问题。
不过,有效的方法是显式导入 Excel Dotnet 互操作库以及互操作服务命名空间,如下所示:
import Microsoft.Office.Interop.Excel
import System.Runtime.InteropServices
xl_type=typeof(Application).GetCustomAttributes(typeof(CoClassAttribute),true)[0].CoClass
xl=xl_type()
xl.Visible=true
xl.Workbooks.Add
然后:
xl.Range["A1","A2"].Value=12
xl.Range["A1",System.Type.Missing].Value="Alpha"
(xl.ActiveSheet as Worksheet).Range["A1","A2"].Value2='Whatever'
所有这些都有效,但它们本质上要求您放弃后期绑定(bind)所习惯的“脚本性”(这就是鸭子打字所做的)。
对于大多数语言(C# 4.0 除外)来说,与 VB/VBScript 的一个区别是,通常可选参数不是透明处理的,因此在处理方法时需要更仔细地查看 API支持可选参数(用 System.Type.Missing 或 System.Reflection 等效项替换它们)。您可以通过 Excel 互操作文档找到这一点,尽管您可能可以使用反射来识别标记为可选的参数(如果您发现这比查找更容易)。
因为 Ruby 对于后期绑定(bind)这些对象有一个合理的解决方案,所以我怀疑 Boo 中的 COM 互操作场景中缺少功能(或错误)。
编辑添加:Sam Ng writes about indexed property support in C# 4.0 ;他的帖子中描述的问题可能也适用于 Boo。
关于excel - Boo - Excel 自动化,选择范围时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1829150/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我看了一下Boo,它看起来非常棒!我只是好奇它在这个阶段有多稳定?我的意思是,你会考虑在真实的生产代码中使用它吗? 最佳答案 它已经生产质量好几年了。很多人都在使用它,例如通过 Brail view
是否可以像在 C# 中那样在新行中进行方法链接? var foo = bar .MethodOne() .MethodTwo() 最佳答案 () 中的空格不重要,因此以下是合法的 boo 代码
在 Boo 中,假设我正在重写一个方法,该方法采用一个参数,该参数采用 string[] urls。无论出于何种原因,类型推断都与基类不匹配,因此我需要明确指定参数的类型。 class MyClass
我似乎无法弄清楚如何将“when”关键字添加到 BOO这应该表现为“如果”。我想我可以制定一个方法,但是我不能像 if 那样移动 when 。任何指针将不胜感激。 -标记 最佳答案 这会做你想做的:
很长一段时间以来,我一直在尝试不同的语言来找到我想要的功能集,但我一直无法找到它。我的语言非常适合我的各种项目,但我提出了这些语言的交集,这将使我能够用一种语言完成 99.9% 的项目。我想要以下内容
我是 Boo 的新手,并试图弄清楚如何声明散列的类型。当我做: myHash = {} myHash[key] = value (later) myHash[key].meth
我有兴趣了解 Boo 更强大的功能,例如句法宏、解析器支持(Ometa?)、编译器管道等。我的印象是这些领域一直在不断变化,而且文档不足。除了学习源代码之外,还有什么好的资源可以学习这些东西吗? 最佳
我正在为 IoC 使用 CaSTLe Windsor,我想使用 Binsor 来定义我的配置。我想让 Boo 看到我的内部结构。我试图用InternalsVisibleTo("Boo.Lang") 但
ruby 有 method_missing , Python 有 getattr . Boo 是否提供了一些我可以用来拦截方法调用的东西? 最佳答案 是的,Boo 有 IQuackFu . 基本上,您
你如何处理 boo 中的 lambdas? “可调用”是同一回事吗?你如何定义一个以 lambda 作为参数的方法? 最佳答案 Boo 确实支持 lambda 表达式语法: foo = {x|x+2}
在查看了这两个项目中的每一个之后,似乎两者都非常相似。两者都运行在 CLI 之上,都有 Python 风格的语法,都使用 .NET 而不是标准的 Python 库。 那么,它们之间的区别和各自的优势是
我在 Boo Language Guide 中遇到了奇怪的语法: setter = { value | a = value } 什么是|运算符的意思是? 最佳答案 Boo 的文档似乎缺乏这方面的内容—
我的 boo 脚本中有一个列表,想使用 System.Linq 扩展方法,但 boo 编译器抛出此异常: BCE0019: Boo.Lang.Compiler.CompilerError: 'ToLi
IronPython 和有什么区别?和 BOO ?是否需要 2 种类似 Python 的语言? 最佳答案 IronPython旨在成为 .NET 平台上 Python 的忠实实现。版本 1 以 Pyt
我正在尝试在现有的网络应用程序中支持嵌入式脚本,并希望我们的用户能够使用 HTML 编辑器编写 Boo 脚本,问题是 BOO 使用类似 python 的缩进(而不是更传统语言中的大括号例如 C# 和
看起来这两种语言都被称为“C# 应该是什么”,具有 hygenic 宏、REPL、编译器即服务 (CaaS)、静态 + 鸭子类型(在 C# 之前)。这两种语言之间有什么主要区别,或者它们只是或多或少相
我刚刚开始尝试更多地了解 .Net VM 基础,但立即被某些东西抛弃了。我知道有一个叫做 DLR 的新东西,它允许 C# 中的所有动态内容和 IronX 语言的运行。但是现在我正在阅读有关这种称为 B
在 Boo 中是否有一种方法可以像在 C# 中使用 where 子句那样表达对泛型类型的一些约束? 简而言之,怎么写?: class MyClass where T:Icomparable
我正在研究 Boo,并认为尝试转换几个可自动执行 Excel 的古老 VB 脚本(在本例中为 2007 年)将是一个有用的练习。很多事情似乎很容易翻译,但是我在选择范围时遇到了很大的麻烦 - 每当我尝
我是一名优秀的程序员,十分优秀!