AutoIt Excelファイルにパスワード。_Excel_BookSaveAs()

AutoIr VBA Excelにパスワードを書ける Excel

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 リファレンス トピック

コメント

タイトルとURLをコピーしました