自动增量备份Excel表内容 v1.2

许多实用脚本和封装函数, 可以让您编写脚本更加便捷高效

Moderators: tmplinshi, arcticir

Post Reply
feiyue
Posts: 349
Joined: 08 Aug 2014, 04:08

自动增量备份Excel表内容 v1.2

Post by feiyue » 23 Oct 2018, 00:32

为防止重要的工作表格不慎损坏或被他人删改内容,写了这个自动增量备份Excel表内容的脚本。

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


;============ 脚本结束 ============

;
nams
Posts: 7
Joined: 20 Jun 2016, 07:44

Re: 自动增量备份Excel表内容 v1.2

Post by nams » 23 Oct 2018, 21:48

为什么不用dropbox?
lx930129
Posts: 10
Joined: 13 Sep 2016, 03:41

Re: 自动增量备份Excel表内容 v1.2

Post by lx930129 » 05 Nov 2018, 21:42

dropbox国内使用不是太友好吧,有些场合也无法联网
Post Reply

Return to “脚本函数”