问题标签 [scriptcontrol]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 将 Recursive jQuery For each loop 转换为 JavaScript for VBA Script Control
我正在尝试使用以下脚本来遍历嵌套的 JSON 对象。它在 html 中运行良好,但是,我从 Excel VBA ScriptControl 对象调用它。当我这样做时,它会为“$”返回一个“未定义”错误
我假设这是因为 VBA ScriptControl 不允许使用 jQuery(这是真的吗?)
所以......可以帮助将下面的“$ .each()”部分转换为javascript吗?
代码:
vbscript - Scriptcontrol 对象返回记录集对象
我正在使用 vbscript 创建一个库,并使用 scriptcontrol 对象从 vba 调用这些例程。我正在尝试使用给定的 sql 作为参数创建一个记录集作为例程,如下所示
并如下调用此例程
但是我的记录集什么都没有返回,即使在 vbscript 中创建了连接和记录集。
我需要这方面的帮助。
c# - 带有参考脚本的 VB 脚本在 ScriptControl c# 中不起作用
您好我正在使用 c# 中的脚本控件执行 VB 脚本。如果它是一个独立的脚本,那么使用下面的代码对我来说效果很好。
但是,当我尝试运行包含其他脚本引用的 VBScript 时,它不会在脚本控件中执行并引发错误。通过以下方式引用脚本中的其他脚本
!INC 本地脚本.Constants-VBScript
有没有办法在脚本控件中添加脚本的引用脚本?
json - 在 JSCRIPT/VBA 中从重度嵌套的 JSON 中删除层(键)
我正在使用 scriptcontrol/jscript 在 VBA 中解析一个重度嵌套的 JSON。生成的 JSON 对象是超级嵌套的,并且具有重复出现的“无用”级别/层,称为“桶”。
有没有办法可以从我的 json 字符串或解析的 json 对象中共同删除这些?
想象它是这样的:
response.0.buckets.0.aggregations.0.10.buckets.0.5.buckets.0.9.buckets.0.20.buckets.0.8.buckets.0.13.buckets.0.14.buckets.0.15.buckets.0.16.buckets.0.19.buckets。 0.18.buckets.0.21.doc_count_error_upper_bound
我只需要 'doc_count_error_upper_bound' 值,并且基本上可以不用所有的 0 和没有所有的桶,使其嵌套更少:
response.aggregations.10.5.9.20.8.13.14.15.16.19.18.21.doc_count_error_upper_bound
这仍然是非常严重的嵌套,但已经为我省去了很多麻烦。我只是不知道如何在 VBA (es3) 中使用 jscript/scriptcontrol 来做到这一点。
源数据来自 Kibana 仪表板(http://demo.elastic.co/上的示例)
谢谢你的帮助!
碧玉
更新: 关于 VBA 代码的问题 - 我拥有的 VBA 代码无关紧要,因为它是通过 scriptcontrol 将 json 字符串加载到对象中的标准方式。
我不使用 EVAL,但出于示例目的,它将类似于以下内容:
我无法分享 JSON 字符串的示例,因为它包含敏感数据。但最终,这不是问题所在。考虑示例https://adobe.github.io/Spry/data/json/donuts.js
在顶部,“击球手”是“击球手”和不同 ID 之间的关键。如果我想删除该密钥,但保留底层 ID 数据 - 我将如何通过在 VBA 中的 scriptcontrol 中工作的 js 脚本来做到这一点?
更新:
omegastripes 回答效果很好,但是,我没有意识到我想删除的一些键(“桶”和“0”等)在它们下面有键和值。
让我们以甜甜圈为例,只是稍作改动 - 请参见此处: https ://pastebin.com/WxYir7vK
现在我想删除“0”、“1”、“2”等键而不会丢失底层子键。但是,要使 omegastripes 代码正常工作,我必须从所有层/整个 json 中删除键 'sequence'、'variant'、'name' 和 'ppu'。
我可以为其中一个执行此操作,对于具有以下功能的一层:
然后调用函数'unseat(JSONObj,“variant”)' - 这有效,但一次仅适用于四个变量之一并且仅适用于一层。我怎样才能改变它,以便我可以在整个对象中删除它,一次全部四个,以便之后我可以使用 omegastripes 代码展开。
摘要
1)我采用这个 json 字符串:https ://pastebin.com/WxYir7vK
2)将其解析为脚本控件到 VBA
3)循环遍历它并删除所有“序列”、“变体”、“名称”和“ppu”键/值对
4) 通过 omegastripes 代码打开它。
步骤 1 / 2 和 4 已处理 - 但如何做 3?
谢谢!
javascript - Delphi MSScriptControl JS无法按索引从字符串中获取字符
我需要在 Delphi 程序中执行 JS 脚本。
有一个问题困扰着我。
我放入js: OleVariant;
Form1的public
部分,然后使用以下代码:
之后,这段JS代码就可以正常工作了:
它返回r
。
但是这段代码:
返回空虚。
还有这个检查;
返回真。
在没有 JSON 对象的情况下观察到类似的情况,所以我无法执行JSON.parse
. 但是我找到了这段代码,这再次允许我在执行 JSON 后使用它。
tcl - 防止在执行某些部分代码之前重复调用 proc
我有一个用于测试自动化的 tcl 脚本(带有 CarMaker ScriptControl 接口)
在脚本中,我正在调用一个 proc,其中执行了一些代码,可能需要几毫秒才能返回。但是,如果在此过程中的某个点再次调用它,则第二次调用将失败并导致错误。
我无法控制何时调用 proc,因为调用来自另一个应用程序。我正在寻找的是一种方法来防止在执行我的代码的某个部分时发生对函数的并行调用。
像这样的东西:
呼叫来自实时 PC
json - 读取 JSON 并在 VBA 中循环
我从服务器获取带有特定操作状态的 JSON 字符串。在这种情况下,它返回 2 个操作的结果。对于 ID:551720 和 ID:551721
字符串如下所示:
有时它返回 1、有时 2 或 20 种状态(不同的“ElectronicId”)
我怎么能在 JSON 中循环。我有一个代码在我只有 1 个响应时有效,但当我有超过 1 个响应时它不起作用。这是 1 个响应的代码:
这是 clsJasonParser bClass 的代码:
vba - 为什么 querySelectorAll 返回一个 JScriptTypeInfo 对象,然后可以将其视为字符串,而不是 nodeList?
在回答这个问题时,我注意到一些奇怪的行为。在该答案的代码中,如下所示,我期望变量names
是静态 nodeList: Object\DispStaticNodeList
。这是带有 VBA MSHTML.HTMLDocument 类的querySelectorAll的通常返回。
来自API 文档
Document 方法 querySelectorAll() 返回一个静态(非实时)NodeList,表示与指定选择器组匹配的文档元素列表。
但是,在这种情况下,Locals 中的返回是Object
,而使用 TypeName(names) 时是JScriptTypeInfo
。我以前读过这篇令人印象深刻的帖子并且非常熟悉,ScriptControl
但这并没有向我解释这里发生了什么。
为什么 querySelectorAll 返回一个JScriptTypeInfo
对象而不是静态节点列表。为什么这是JScriptTypeInfo
特定于querySelectorAll
而不是getElementsByClassName
?我觉得它一定与类接口有关,但是这个页面导致Object\JScriptTypeInfo
而不是Object\DispStaticNodeList
什么?
其他观察:
- 你可以
getElementsByClassName
很好地使用:
- 该对象通过了 IsObject 测试并且可以与 Set 一起使用,但随后可以被视为一个字符串:
我认为这与返回的实际对象有关,但使用Debug.Print names
. 但是为了让它工作,我们假设我们不再获得一个对象数组作为返回。否则,它将被链接到 .defaultMember.defaultMember 的默认调用。@SMeaden 链接的 QA 状态:
JScriptTypeInfo 是在 VBA IDE 监视窗口中显示的内容和 VBA 函数 TypeName() 的返回,但它实际上隐藏了许多可以在 JScript.dll 中找到的对象。我想它可以被描述为多态,也许将其描述为后期绑定更好。要查看功能,请使用 Tools-References 并浏览到 JScript.dll。
在这种情况下,我如何检查默认成员(我在 64 位机器上)?我假设我无法添加 ScriptControl dll,因为我认为它们需要 32 位?这些后来的观点更多的是沉思。
- 我想知道这是否与
querySelectorAll
使用 css 选择器有关,但我注意到以下几点:使用 Python selenium + IE 使用 Css 选择器(因为我无法使用 VBA Selenium Basic 进行测试)尽管类实现是webElement
. 我得到了预期<class 'list'>
的回报。我包含了一个无法测试的 VBA selenium 脚本,但应该作为其他人运行的测试。
重现代码:
通过 Python selenium + IE 的 Css 选择器:
给
>> <class 'list'>
未经测试的带有 IE 的 VBA 硒(我无法测试):
javascript - 如何将 javascript 文件加载到 ac# 控制台应用程序中
我在尝试运行项目中扩展名为 .js 的文件中的脚本时遇到问题。我正在尝试加载它并调用 js 文件中的函数。我使用的代码如下:
但是,我收到语法错误,问题是当我使用 File.ReadAllText 加载文件时,js.AddCode 行给出语法错误,它没有正确加载 javascript 代码(将 \n 用于换行符)。有人可以帮助我吗?
vba - 在 MS Word 中评估包含 VBA 代码的字符串并让 ScriptControl 工作
我的目标是生成包含要针对给定变量集评估的代码的字符串。我在这些问题中发现了一些类似的努力:
因为在上面 (2) 中提供的代码中ScriptControl
,x64 存在问题,所以我在以下位置找到了一些补丁:
不幸的是,由于某些 Windows 补丁,导致无法发布 GUID,因此存在更多问题。sSignature = Left(CreateObject("Scriptlet.TypeLib").GUID, 38)
由于缺乏权限,这阻止了返回正确的 GUID。
这在以下帖子中得到了强调:
根据参考资料 (5),我添加了一些代码来生成 GUID。
不幸的是,此代码仍然无法正常工作,我在执行时收到错误代码 #13,“类型不匹配”:oShellWnd.GetProperty(sSignature)
。
注意:我认为应该更改 cMSHTAx86Host 的代码以避免无限循环(可能只允许一定次数的重试,并且可能会在两者之间短暂暂停,以避免无限循环并占用处理器)。
我非常想要一些帮助,并发布在我在下面使用的代码下方。
- A 类 cMSHTAx86Host (cMSHTAx86Host.cls)
- 如下所示的一个模块(注意我不确定如何在运行 oHost.eval 时传入可用的变量)