尝试使用 IIS 从 Perl 打开 excel 文件时出错

Posted

技术标签:

【中文标题】尝试使用 IIS 从 Perl 打开 excel 文件时出错【英文标题】:Error when tried to open a excel file from Perl using IIS 【发布时间】:2014-11-17 04:51:51 【问题描述】:

我正在使用 IIS 从 c# 应用程序运行 perl 脚本文件,因为我想打开一个已经存在的 Excel 文件并使用以下行打开它:

$ex = Win32::OLE->new('Excel.Application', sub $_[0]->Quit;) 
or die "Oops, cannot start Excel";//upto this working fine

$book = $ex->Workbooks->Open($fileName); //this line only giving error

现在我收到如下错误:

“Microsoft Office Excel”中的 OLE 异常:

Microsoft Office Excel 无法访问该文件 'C:\GWATS\Report\Nov-17-2014_10-06-36\GES-11n_IOT_10-06-37.xls'。有 几个可能的原因:

• 文件名或路径不存在。

• 文件正被另一个程序使用。

• 您尝试保存的工作簿与当前打开的工作簿同名 工作簿。

Win32::OLE(0.1711) 错误 0x800a03ec 在 C:\GWATS\Lib\System\Report.pm 第 611 行的 METHOD/PROPERTYGET "Open" 中。

该文件确实存在,我验证了这一点。

当我直接在 cmd 中运行该脚本时,该脚本也可以正常工作。这里有什么问题,我认为问题出在 IIS 上,但我可以找到问题到底是什么?

【问题讨论】:

IIS 用于运行您的脚本的用户帐户是否有权访问该文件? 是的,蒂姆我向用户添加了 DefaultAppPool 并完全控制了报告文件夹 如果您使用该路径从 perl 运行“文件存在”检查,它会成功吗? 从 cmd 提示符运行时运行良好。它正在打开文件并写入内容,没有任何错误。 即使以 IIS 用户帐户运行? 【参考方案1】:

试试下面的 perl 脚本。如果仍然存在一些错误,请告诉我:

代码:

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

   my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
     || Win32::OLE->new('Excel.Application', 'Quit');
    my $filename = 'C:\GWATS\Report\Nov-17-2014_10-06-36\GES-11n_IOT_10-06-37.xls'
    my $book  = $Excel->Workbooks->Open($filename);

【讨论】:

我能知道错误吗?是一样的还是不一样的?【参考方案2】:

打开 Windows 资源管理器

根据您安装的是 32 位还是 64 位版本的 Office,您需要执行以下一项(或两项)操作:

32 位 Office 安装:导航到 C:\Windows\System32\config\systemprofile

64 位 Office 安装:导航到 C:\Windows\SysWOW64\config\systemprofile

验证文件夹“桌面”是否存在(如果不存在则创建它)

右击>属性

在安全选项卡上:使用默认权限(读取和执行;列出文件夹内容;读取)添加运行站点的帐户(例如:DefaultAppPool)

【讨论】:

【参考方案3】:

我遇到了类似的问题

当我为文件提供绝对路径时,它对我有用

【讨论】:

以上是关于尝试使用 IIS 从 Perl 打开 excel 文件时出错的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL服务器IIS配置

Perl 输出内容到 excel

使用 Perl/GD 创建图像并将其直接插入到 Excel 工作簿中?

.NET把excel数据导入到sql数据库报错:无法打开excel(本地没问题,IIS发布到网站报错),求解!

使用 Perl Excel 循环遍历单列而不是每一列

用Perl将Tab-delimited文本文件转换成Excel表格