【问题标题】:How to save Excel file in working directory in Win32::OLE如何将 Excel 文件保存在 Win32::OLE 的工作目录中
【发布时间】:2016-02-22 21:55:03
【问题描述】:

我正在尝试在 perl 中解析 Excel 文件。从中提取所需信息后,我关闭 Excel 文件。最后,我试图在同一目录中保存一个具有不同名称的新 Excel 文件。但是这个 Excel 存储在“我的文档”文件夹中。

use Storable ;
use Cwd;

use Win32::OLE ;
use Win32::OLE qw(in with) ;
use Win32::OLE in ;
use Win32::OLE::Const 'Microsoft Excel';

use Excel::Writer::XLSX;

my $Excel = Win32::OLE->new("Excel.Application");
my $excel = $Excel->Workbooks->Add();

my $sheet = $excel->Worksheets(1);
$sheet->Activate();

my $new_file = "Temp_file.xlsm";
my $new_excel = cwd.'\\'.$new_file;
$new_excel =~ s/\//\\/g;

$excel->SaveAs($new_excel);

$Excel->{DisplayAlerts} = 0;
$excel->{Saved} = 1;
$excel->Close;

【问题讨论】:

  • 欢迎使用 Stack Overflow 和 Perl 标签。你的问题到底是什么?你在哪里挣扎?
  • 我为存储数据而创建的新 Excel 未保存在当前工作目录中。相反,我在“我的文档”文件夹中找到它。 SaveAs($new_excel) 根本没有发生。

标签: excel perl win32ole


【解决方案1】:

这是基于您的代码的更新。首先,您让Win32::OLE 错误被默默地忽略。相反,设置:$Win32::OLE::Warn = 3,这样每当出现问题时它就会发出嘶哑的声音。其次,您尝试获取Excel.Application 实例的方式不正确。一方面,如果出现问题,您的 Excel 实例将保持浮动。

您还混淆了 Excel 实例、工作簿及其包含的工作表。如果您确实有$Win32::OLE::Warn = 3,您会收到有关哪里出了问题的通知。

您的脚本中还应该始终包含use strictuse warnings。如果其他人知道您的问题不是由一些琐碎的错字引起的,他们会更愿意尝试提供帮助。

您也不需要三个单独的use Win32::OLE 语句。

下面的代码“有效”。和你的比较一下。

最后,如果您通过Win32::OLE 操作工作表,则没有理由在您的代码中使用Excel::Writer::XLSX

use feature 'say';
use strict;
use warnings;

use File::Spec::Functions qw( rel2abs );
use Win32::OLE qw(in with) ;
use Win32::OLE::Const 'Microsoft Excel';
$Win32::OLE::Warn = 3;

my $excel = eval {
        Win32::OLE->GetActiveObject('Excel.Application');
    } || Win32::OLE->new('Excel.Application', sub { $_[0]->Quit });

my $wb = $excel->Workbooks->Add;
my $sheet = $wb->Worksheets->Add;

$wb->SaveAs( rel2abs('temp_file.xlsm') );

$excel->{DisplayAlerts} = 0;
$wb->{Saved} = 1;
$wb->Close;

【讨论】:

  • 我用过 Cwd 包。我可以看到 $new_excel 具有正确的路径。但是下一步'SaveAs($new_excel'不会将Book1名称Excel文件以我指定的名称保存在目标文件夹中。最终我可以在'My Documents'文件夹中找到Book1文件。
  • 那么,你是说你没有发布你运行的代码?请发布确切您运行的内容以说明问题。不多也不少。
猜你喜欢
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 2019-08-02
  • 1970-01-01
  • 2022-01-21
相关资源
最近更新 更多