尝试使用 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 文件时出错的主要内容,如果未能解决你的问题,请参考以下文章
使用 Perl/GD 创建图像并将其直接插入到 Excel 工作簿中?