/ /どうやってPerlでExcelのパスワード入力を止めることができますか? - Perl、Excel、パスワード

PerlでExcelのパスワードプロンプトを表示しないようにするにはどうすればよいですか? - perl、excel、passwords

パスワードファイルによる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 )
;