我怎样才能在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 ) ;