パスワードファイルによる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;
回答:
回答№1は5パスワードがわかっている場合は、それらをopenコマンドのpasswordまたはwriterespassword、あるいはその両方の引数で指定できます。パスワードがこの方法で提供されている場合、Excelはパスワードを要求しません。
パスワードを知らなくてもしたい場合ダイアログボックスが表示されないようにするには、これらのパラメータでダミーのパスワードを指定します(たとえば、 "ThisIsNotAPassword")。これはドキュメントにはありませんが、Excel 2003でテストしました。
- Excelファイルにパスワードが設定されていない場合は、開かれます。
- パスワードが(提供されているもの以外)ある場合、それはユーザーにパスワードを要求しませんが、検出可能なエラーで失敗します。
回答№2の場合は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メソッド object、12個の引数を取ります。パスワードで保護されたブックを開くには、次のコードを書く必要があります。
Workbooks.Open "Book1.xls", , , ,"pswd"
空の引数で同じことをperlで確認することもできます。与える方法がわかりません...
回答№3の場合は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 )=%sn"
, is_protected_vb_project( $work_book )
;