标签: win32ole

如何在Perl中以编程方式发现Win32 :: OLE对象的属性和方法?

使用Perl,使用Win32::OLE库加载COM/OLE对象并控制它们非常容易.我遇到的问题是确切地知道我正在访问的对象中有哪些方法和属性可用.其他语言中的某些OLE工具包可以通过读取对象上可用的所有属性和方法为您生成静态接口.Perl的Win32::OLE库中是否存在这样的工具?

com perl win32ole

13
推荐指数
1
解决办法
4746
查看次数

如何使Win32 :: OLE在64位MS OFFICE安装上工作

我有两台PC,一台安装了MS Office 2013 32bit,另一台安装了MS Office 64bit.我有Perl代码使用Win32::OLEPerl模块来操作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::ParseExcelSpreadsheet::XLSX所有其他的脚本.此特定XLS文件的问题在于它受密码保护并使用非标准密码加密.所以Spreadsheet::ParseExcel无法打开它.Win32::OLE在32位上打开文件没有问题.

如果需要,可以提供代码.

请指教.

谢谢,-Andrey

excel perl win32ole

7
推荐指数
1
解决办法
6704
查看次数

在node.js中访问Windows COM对象

我正在使用具有基于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对象吗?我的研究没有改变.

javascript c++ com win32ole node.js

7
推荐指数
0
解决办法
1526
查看次数

使用win32:ole perl以行方式读取MS Word表数据

我是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)

perl ms-word perl-module win32ole

6
推荐指数
1
解决办法
3011
查看次数

Electron:如何访问 .Net COM 对象

我正在尝试使用 Electron 快速入门创建一个简单的应用程序。它将在 Windows 10 上运行,我需要访问安装在该机器上的几个 .Net COM 对象。

当我用谷歌搜索这个时,我被定向到需要安装的win32ole包,但我看到它已经有 4 年历史了,它没有安装在我的 Windows 10 机器上。

我想知道是否有人曾经设法从 Electron Node.js 代码中访问 COM 服务器?或者如果您对如何执行此要求有任何意见。

问候基兰

win32ole node.js electron

6
推荐指数
0
解决办法
734
查看次数

使用Ruby通过Outlook发送消息的最简单方法是什么?

我的工作要求我为某些测试自动生成电子邮件.我一直在环顾四周,但还没找到一个可以快速实施的合理解决方案.它需要在outlook而不是其他邮件服务器,因为我们有一些奇怪的身份验证规则,我们需要选择保存草稿而不是发送消息.

显然win32ole可以做到这一点,但我找不到任何相当简单的例子.

ruby outlook win32ole

5
推荐指数
1
解决办法
2235
查看次数

Ruby win32ole - 如何确定OLE类类型,OLE类是否支持方法

我使用的是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)

ruby outlook win32ole

4
推荐指数
1
解决办法
1513
查看次数

使用Ruby永久(即在注册表中)设置环境变量?

在Windows上,如何使用Ruby永久设置环境变量?我知道我需要更改注册表(通过win32ole模块?)但我是一个关于脚本注册表的新手.

我知道我可以说为会话ENV['FOO'] = "c:\bar\baz"设置环境变量FOO.但是,我对全局和永久设置环境变量感兴趣.

我确实找到了patheditor gem,它非常适合永久改变Windows PATH.但我想设置其他环境变量,例如JAVA_HOME.

ruby windows registry environment win32ole

4
推荐指数
1
解决办法
3022
查看次数

如何在Word中复制和粘贴一系列表格?

编辑:如果你有一个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 copy-paste range win32ole word-vba

4
推荐指数
1
解决办法
3212
查看次数

使用Perl和Win32 :: OLE,如何将Word文档中的编号列表转换为纯文本?

我编写了一个Perl脚本来使用Win32 :: OLE读取Microsoft Word文档内容.

我的问题是包含编号列表的文档(以1,2,3,...开头).我的Perl脚本无法获得该号码.我只能得到文字内容,而不是数字.

请建议如何将编号列表转换为纯文本,以保留编号和文本.

perl ms-word win32ole

4
推荐指数
1
解决办法
496
查看次数