AutoIt、というかVBAと同じ感じでエクセルファイルにパスワードかけれます。
パスワードをつけて名前を変更して保存。という操作です。
古いタイプの業務では、エクセルにパスワードかけてメールに添付して他の人に送る。なんてことをやっているのとRPA自動化していたりしますね。
※Excel UDFでは、開いているファイルを削除するのに失敗するので、パスワード付きファイルを上書き保存できません(Excel UDFをいじる必要あり)
1. Excel UDFを使う
_Excel_BookSaveAs()で引数にパスワードを指定するだけです。
test.xlsxを開き、cfautog という読み込み時パスワードを設定しtest2.xlsxとして保存、のサンプルです。
#include <Excel.au3> $filepath = @ScriptDir & "\test.xlsx" $savepath = @ScriptDir & "\test2.xlsx" $sreadpass = "cfautog" $oexcel = 0 $wbook = 0 $oexcel = _Excel_Open() $wbook = _Excel_BookOpen($oexcel, $filepath) _Excel_BookSaveAs($wbook, $savepath, $xlWorkbookDefault, True, $sreadpass) _Excel_BookClose($oexcel, $wbook) _Excel_Close($oexcel)
2. _Excel_BookSaveAs()関数
引数は以下です
- $oWorkBook
$wbook =_Excel_BookOpen($oExcel, “test.xlsx”) - $sFilePath ファイルのパスを
- $iFormat Default なら$xlWorkbookDefault(xls,xlsxにそれぞれ対応)
- $bOverWrite Trueにすれば上書き可能(次項目参照)
- $sPassword 読み込み時パスワード設定 文字列
- $sWritePassword 保存時パスワード設定 文字列
- $bReadOnlyRecommended readonly表示するかしないか
3. 開いたファイルを上書きしてパスワード付き保存するには
AutoItインストールディレクトリ\include\Excel.au3ファイルをスクリプトと同じ階層にでもコピーし、#include <Excel.au3> -> #include “Excel.au3″
そして307,308行目をコメントアウトすると上書き保存できます。まぁここでチェックしているだけなのですが。
;; L.307, L.308のFileDelete()をコメントアウト。 If FileExists($sFilePath) Then If Not $bOverWrite Then Return SetError(3,0,0) ; Local $iResult = FileDelete($sFilePath) ; If $iResult = 0 Then Return SetError(4,0,0) EndIf
これで同じファイル名でも上書き保存できます。
Excel UDF。ところどころ結構面倒くさいですね・・・
全関数の中身で必要ないところ消した自作Excel UDFを作ったほうがいいと思います。
3.1 コードサンプル以下に置きました
https://github.com/cfautog/autoit/blob/master/excelpassword.au3
4. 参考リンク

Workbook.SaveAs メソッド (Excel)
Office VBA リファレンス トピック
コメント