使用Perl,使用Win32::OLE
库加载COM/OLE对象并控制它们非常容易.我遇到的问题是确切地知道我正在访问的对象中有哪些方法和属性可用.其他语言中的某些OLE工具包可以通过读取对象上可用的所有属性和方法为您生成静态接口.Perl的Win32::OLE
库中是否存在这样的工具?
我有两台PC,一台安装了MS Office 2013 32bit,另一台安装了MS Office 64bit.我有Perl代码使用Win32::OLE
Perl模块来操作XLS电子表格.代码在32位PC上运行得非常好,但在64位PC上有问题.
经过一些研究后,我发现了这一点.问题是以下代码行:
use Win32::OLE::Const 'Microsoft Excel .* Object Library';
Run Code Online (Sandbox Code Playgroud)
我查看了Win32::OLE::Const
模块内部,似乎该模块正在注册表中查找该库.当我从32位和64位打印出注册表中的所有条目时,我发现该库在32位上可用而在64位上不可用.
有没有办法在64位上安装该库?如果没有,是否有任何其他模块可以允许Excel的OLE自动化?
我的所有Perl脚本需要做的是打开XLS文件并将其另存为CSV.我与做Spreadsheet::ParseExcel
和Spreadsheet::XLSX
所有其他的脚本.此特定XLS文件的问题在于它受密码保护并使用非标准密码加密.所以Spreadsheet::ParseExcel
无法打开它.Win32::OLE
在32位上打开文件没有问题.
如果需要,可以提供代码.
请指教.
谢谢,-Andrey
我正在使用具有基于COM的界面的API.我一直在使用win32ole模块来实例化API,但其中一个API函数需要一个null值,而win32ole在传递null参数时会抱怨.我发现了这种解决方法,但它只是用对象替换了一个空值.这允许我在没有win32ole抱怨的情况下将null作为参数传递给函数调用,但是函数仍然失败,因为它需要一个空值,现在它被替换为变通方法中的对象.
如何将null参数传递给此API函数?
api.Order_Import('import.xml', 'import.xsd', 0, false, '', '', null)
Run Code Online (Sandbox Code Playgroud)
我尝试的第一件事是抛弃最后一个论点.这使win32ole满意,但仍然导致函数失败,错误消息参数'loOptParam'必须为null.
除了win32ole之外,我还可以使用另一个模块来处理节点中的COM对象吗?我的研究没有改变.
我是perl中win32:ole模块的新手.我试图在命令提示符下逐行打印MS word表数据.但我只能打印表格的最后一行.你能帮我解决这个问题吗?提前致谢.
以下是我的代码:
#!/usr/bin/perl
use strict;
use warnings;
use File::Spec::Functions qw( catfile );
use Win32::OLE qw(in);
use Win32::OLE::Const 'Microsoft Word';
$Win32::OLE::Warn = 3;
my $word = get_word();
$word->{DisplayAlerts} = wdAlertsNone;
$word->{Visible} = 1;
my $doc = $word->{Documents}->Open('C:\\PerlScripts\\myTest.docx');
my $tables = $word->ActiveDocument->{'Tables'};
for my $table (in $tables)
{
my $tableText = $table->ConvertToText({ Separator => wdSeparateByTabs });
print "Table: ". $tableText->Text(). "\n";
}
$doc->Close(0);
sub get_word
{
my $word;
eval { $word = Win32::OLE->GetActiveObject('Word.Application');};
die "$@\n" if $@;
unless(defined $word)
{
$word …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Electron 快速入门创建一个简单的应用程序。它将在 Windows 10 上运行,我需要访问安装在该机器上的几个 .Net COM 对象。
当我用谷歌搜索这个时,我被定向到需要安装的win32ole包,但我看到它已经有 4 年历史了,它没有安装在我的 Windows 10 机器上。
我想知道是否有人曾经设法从 Electron Node.js 代码中访问 COM 服务器?或者如果您对如何执行此要求有任何意见。
问候基兰
我的工作要求我为某些测试自动生成电子邮件.我一直在环顾四周,但还没找到一个可以快速实施的合理解决方案.它需要在outlook而不是其他邮件服务器,因为我们有一些奇怪的身份验证规则,我们需要选择保存草稿而不是发送消息.
显然win32ole可以做到这一点,但我找不到任何相当简单的例子.
我使用的是Ruby 1.8.使用WIN32OLE模块 -
1)如何确定OLE对象实例的类名?2)如何判断对象实例是否支持特定方法?
在Outlook自动化脚本中,我尝试删除"已删除邮件"文件夹中超过21天的项目.对于邮件项目,我想使用ReceivedTime属性,但为了做到这一点,我需要检查该项目是否实际上是一个MailItem实例.
第二,我能想到的最好的是(真的很慢):
def MethodExists(obj, methodName)
obj.ole_methods.each{|method|
if (method.name == methodName)
return true
end
}
return false
end
Run Code Online (Sandbox Code Playgroud) 在Windows上,如何使用Ruby永久设置环境变量?我知道我需要更改注册表(通过win32ole模块?)但我是一个关于脚本注册表的新手.
我知道我可以说为会话ENV['FOO'] = "c:\bar\baz"
设置环境变量FOO
.但是,我对全局和永久设置环境变量感兴趣.
我确实找到了patheditor gem,它非常适合永久改变Windows PATH
.但我想设置其他环境变量,例如JAVA_HOME
.
编辑:如果你有一个VBA的例子,我会接受它.我只是想了解如何将Range对象与Tables集合一起使用来复制和粘贴多个表而不进行循环.换句话说,如何使用Tables集合指定1..lastTable的范围?如果我能看到一个有效的VBA示例,我将处理VBA - > Perl转换.
我正在尝试使用Perl的Win32 :: OLE模块(通过Dave Roth的优秀书籍)来自动完成我需要在某些Word文档上重复执行的几项任务.但是,本书(以及大多数Web示例)倾向于使用Excel作为示例,因此我不确定如何使用Tables集合对象有效地复制和粘贴.
这是我的代码片段:
my $originalDoc = $MSWord->Documents->Open('C:\Perl\testDocument.doc');
my $newDoc = $MSWord->Documents->Add;
my $selection = $MSWord->Selection(); # this may be spurious
my $Count = int( $originalDoc->Tables()->{Count} );
my $range = $originalDoc->Tables()->Range( { Start => $originalDoc->Tables(1)->{Range}->{Start},
End => $originalDoc->Tables($Count)->{Range}->{End}
} );
$range->Copy();
$newDoc->Range()->Paste();
Run Code Online (Sandbox Code Playgroud)
原始代码使用段落,而不是表,所以我假设一些错误是来自该代码的工件(或者更可能是我对该代码的不理解).
我编写了一个Perl脚本来使用Win32 :: OLE读取Microsoft Word文档内容.
我的问题是包含编号列表的文档(以1,2,3,...开头).我的Perl脚本无法获得该号码.我只能得到文字内容,而不是数字.
请建议如何将编号列表转换为纯文本,以保留编号和文本.
win32ole ×10
perl ×5
ruby ×3
com ×2
ms-word ×2
node.js ×2
outlook ×2
c++ ×1
copy-paste ×1
electron ×1
environment ×1
excel ×1
javascript ×1
perl-module ×1
range ×1
registry ×1
windows ×1
word-vba ×1