Code: Select all
;-------------------------------------------
; 自动增量备份Excel表内容 v1.2 By FeiYue
;
; 备份1:若磁盘中指定的Excel文件内容有变动,
; 就将最新内容替换上次的最近一次备份。
;
; 备份2:若最新内容删改了上次的最近一次备份已有的内容,
; 就将上次的最近一次备份以当前时间节点附加备份。
;
; 用法:1、先复制一份rar.exe到脚本所在目录。
; 2、在脚本中设定两项:
; "Excel文件路径"和"需备份的工作表标签"
; 3、按F9启动备份,及定时自动备份。
;-------------------------------------------
#NoEnv
#SingleInstance Force
SetWorkingDir, %A_ScriptDir%
CoordMode, ToolTip
;-- 改变托盘图标便于区别
Menu, Tray, Icon, Shell32.dll, 6
;-- 先手动复制一份rar.exe到脚本所在目录
IfNotExist, rar.exe
{
MsgBox, 4096, 错误, 脚本所在目录中没有找到 Rar.exe !
return
}
;---- 设定两项,注意Excel文件越大打开的时间越久
Excel文件路径:="F:\医保工作目录\2018年度\2018年医保.xls"
需备份的工作表标签:="2018年度"
保存目录:=A_ScriptDir
;----------------------------------------------
return
F8:: ;-- 按【F8】热键重启脚本
SplitPath, A_ScriptName,,,, name
IfWinExist, %name%
{
ControlSend, ahk_parent, {Ctrl Down}s{Ctrl Up}
Sleep, 500
}
Reload
Sleep, 1000
return
F9:: ;-- 按【F9】热键启动备份,及定时自动备份
;-- 检验 Excel文件路径 是否正确
IfNotExist, %Excel文件路径%
{
MsgBox, 4096, 错误, %Excel文件路径% 未找到!
return
}
SplitPath, Excel文件路径,,, 后缀, 文件名
if 后缀 not in xls,xlsx
{
MsgBox, 4096, 错误, 文件类型不是 Excel 表格!
return
}
;---- 每10分钟自动备份一次 ----
SetTimer, %A_ThisLabel%, % 1000*60*10
ToolTip, `n 正在复制表格内容—— `n`t, 10, 10, 9
;-- 复制电子表格中的内容
s=
objExcel:=ComObjCreate("Excel.Application")
objExcel.Workbooks.Open(Excel文件路径)
Loop, % objExcel.Worksheets.Count
{
if (objExcel.Worksheets[A_Index].name = 需备份的工作表标签)
{
bak:=ClipboardAll
Sleep, 200
Clipboard=
objExcel.Worksheets[A_Index].UsedRange.Copy
s:=Clipboard, Clipboard:=bak, bak:=""
Break
}
}
objExcel.Workbooks.Close
objExcel.Quit
objExcel=
if s=
{
ToolTip,,,, 9
return
}
ToolTip, `n 正在比较内容是否变动—— `n`t, 10, 10, 9
;-- 备份文件、临时文件及当前时间节点文件
rarfile:=保存目录 "\" 文件名 "-备份.rar"
tmpfile:=A_Temp "\" 文件名 "(最近一次备份).tmp"
addfile:=A_Temp "\" 文件名 "-" A_YYYY "-" A_MM "-" A_DD
. "-" A_Hour "-" A_Min "-" A_Sec ".txt"
;-- 解压到临时文件夹来比较
IfExist, %rarfile%
{
;-- rar参数:e忽略路径解压 y回答是 o+覆盖 n仅包括文件
RunWait, rar.exe e -y -o+ -n*.tmp "%rarfile%" "%A_Temp%\"
,, Hide
IfNotExist, %tmpfile%
{
MsgBox, 4096, 错误, 解压文件 %tmpfile% 未成功!
ToolTip,,,, 9
s=
return
}
FileRead, ss, %tmpfile%
;-- 没有变动就退出
if RegExReplace(ss,"\s+")=RegExReplace(s,"\s+")
{
FileDelete, %tmpfile%
ToolTip,,,, 9
s:=ss:=""
return
}
Loop, Parse, ss, `r, `n
{
;-- 检查每行的“姓名+身份证”有没有删改
StringSplit, r, A_LoopField, %A_Tab%
if !InStr(s, r2 . A_Tab . r3)
{
;-- 若前面内容有删改,则添加当前时间节点的附加备份
FileCopy, %tmpfile%, %addfile%, 1
Break
}
}
ss:=""
}
ToolTip, `n 正在添加到备份中—— `n`t, 10, 10, 9
;-- 更新最近一次备份
FileDelete, %tmpfile%
FileAppend, %s%, %tmpfile%
;-- rar参数:m压缩并删除 y回答是 rr添加恢复记录 ep不带目录
RunWait, rar.exe m -y -rr5p -ep "%rarfile%" "%tmpfile%" "%addfile%"
,, Hide
IfExist, %addfile%
FileDelete, %addfile%
ToolTip,,,, 9
s=
return
;============ 脚本结束 ============
;