小编sch*_*olf的帖子

自动化perl中的excel文件处理并避免对话/ UI交互

当我通过OLE自动化Microsoft Excel时,如何保证不会出现弹出对话框?我正在使用Perl模块(Win32 :: OLE).我可以使用以下代码避免大多数对话框弹出窗口:

use Win32::OLE;
use Win32::OLE::Variant;
use Win32::OLE::Const;

my $excel_symbols = Win32::OLE::Const->Load('Microsoft Excel');
my $excel = Win32::OLE->new('Excel.Application', sub { $_[0]->Quit();} );
$excel->{'Visible'} = 0;
$excel->{'DisplayAlerts'} = 0;
$excel->Workbooks->Open('c:\some_excel_file.xls',
  { 'UpdateLinks' => $excel_symbols->{'xlUpdateLinksNever'},
    'ReadOnly' => 1,
    'IgnoreReadOnlyRecommended' => 1
  });
Run Code Online (Sandbox Code Playgroud)

但是对于某些文件,我继续使用以下文本进行对话:

此文件不是可识别的格式.

  • 如果您知道该文件来自与Microsoft Excel不兼容的其他程序,请单击"取消",然后在其原始应用程序中打开此文件.如果要稍后在Microsoft Excel中打开该文件,请将其保存为兼容的格式,例如文本格式.
  • 如果您怀疑文件已损坏,请单击"帮助"以获取有关解决问题的详细信息.
  • 如果您仍想查看文件中包含的文本,请单击"确定".然后在文本导入向导中单击"完成".

确定取消

有时会出现类似的对话框,其中包含"确定","取消"和"帮助"按钮.

我无法控制提供给脚本的文件的质量.

excel perl automation dialog ole

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

Perl - Win32 - 如何从另一个进程执行文件句柄的非阻塞读取?

我正在编写一些服务器代码,通过STDIN与客户端进程通信.我正在尝试编写一段perl代码片段,异步接收来自客户端STDOUT的响应.代码的阻止版本可能如下所示:

sub _read_from_client
{
   my ($file_handle) = @_;
   while (my $line = <$file_handle>) {
      print STDOUT $line;
   }
   return;
}
Run Code Online (Sandbox Code Playgroud)

重要的是,该代码段需要在Win32平台上运行.*nix平台有很多我不感兴趣的解决方案.我使用的是ActivePerl 5.10.

perl winapi asynchronous file

2
推荐指数
1
解决办法
2363
查看次数

标签 统计

perl ×2

asynchronous ×1

automation ×1

dialog ×1

excel ×1

file ×1

ole ×1

winapi ×1