请告诉我一个禁止密码提示excel文件的解决方案。
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;
答案 0 :(得分:5)
如果您知道密码,可以使用open命令的密码和/或writerespassword参数提供密码。如果以这种方式提供密码,Excel将不会提示输入密码。
如果您不知道密码但想要阻止显示对话框,则可以在这些参数中提供虚拟密码(例如,“ThisIsNotAPassword”)。我没有在文档中找到它,但在Excel 2003中进行了测试:
答案 1 :(得分:1)
您可以将以下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工作表工作簿的Open方法 对象,需要12个参数。要打开具有密码保护的工作簿,您需要编写以下代码:
Workbooks.Open "Book1.xls", , , ,"pswd"
您也可以使用空参数检查perl。我不确定如何给...
答案 2 :(得分:0)
解决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 )
;