我怎样才能在Perl中禁止Excel的密码提示?

请告诉我一个解决scheme,以抑制excel文件的passsword提示。

use Win32::OLE; my $xlApp = Win32::OLE->new('Excel.Application'); $xlApp->{Visible} = 0; $xlApp->{DisplayAlerts} = 0; # Open excel file. my $xlBook = $xlApp->Workbooks->Open("C:\\Documents and Settings\\username\\Desktop\\testfile.xls"); my $Sheet1 = $xlBook->Worksheets(1); my $row = 1; my $col = 1; $Sheet1->Cells($row,$col)->{'Value'} = 5; if (Win32::OLE->LastError) { print "File protected"; } $xlBook ->Close(); undef $xlBook; 

如果您知道密码,则可以使用open命令的密码和/或writerespassword参数提供密码。 如果以这种方式提供密码,Excel将不会提示input密码。

如果您不知道密码,但希望防止出现对话框,则可以在这些参数(例如“ThisIsNotAPassword”)中提供虚拟密码。 我没有在文档中find它,但是在Excel 2003中testing了它:

  • 如果Excel文件没有密码,则会打开。
  • 如果确实有密码(除了提供的密码),它不会要求用户input密码,但会失败,并可能检测到错误。

您可以将以下vb代码转换为perl并进行尝试,请注意,此代码适用于vbproject,类似地,您可以以相同的方式检查工作表,单元格或整个工作表。

'如果活动文档中的VB项目受保护,则返回TRUE'请不要

 Function ProtectedVBProject(ByVal wb As Workbook) As Boolean Dim VBC As Integer VBC = -1 On Error Resume Next VBC = wb.VBProject.VBComponents.Count On Error GoTo 0 If VBC = -1 Then ProtectedVBProject = True Else ProtectedVBProject = False End If End Function 

例:

 If ProtectedVBProject(ActiveWorkbook) Then Exit Sub 

对于工作表

 If ActiveWorkbook.ProtectStructure=True Then Exit Sub 

对于活动工作簿窗口

 If ActiveWorkbook.ProtectWindows= True Then Exit sub 

等等..

或者您可以用密码打开Excel表

Workbook对象的Open方法需要12个参数。 要使用密码保护打开工作簿,您需要编写以下代码:

  Workbooks.Open "Book1.xls", , , ,"pswd" 

你也可以使用perl和空参数一起检查。 我不知道如何给…

根据lakshmanaraj的想法和未知的回应:

 use Win32::OLE; sub is_protected_vb_project { my $work_book = shift; eval { my $count = $work_book->{VBProject}{VBComponents}{Count}; }; Carp::carp $@ if $@; return $@ ? 1 : 0; } my $work_book = Win32::OLE->GetObject( 'd:/some/path/somewhere.xls' ); printf "is_protected_vb_project( \$work_book )=%s\n" , is_protected_vb_project( $work_book ) ;