Skip to content

Backup & Restore Strategy

Chiến lược backup toàn diện cho DVDAddin — license, settings, workbook, dữ liệu tùy biến.

What to backup

4 layers cần backup

LayerTần suấtPhương pháp
Workbook (file Excel dự án)Mỗi save (Ctrl+S)OneDrive sync + weekly archive
License + settings của add-inSau mỗi lần cài mới / kích hoạtCopy 3 file + export registry
Mẫu và dữ liệu tùy biếnKhi sửaCopy trước mỗi lần cập nhật add-in
Custom scripts (VBA, PowerShell)Khi sửaGit repo / cloud folder

Layer 1 — Workbook backup

Mức cơ bản: AutoRecover

Excel có built-in AutoRecover:

  • File → Options → Save → "Save AutoRecover information every" → set 5 phút.
  • Auto save file backup tại %APPDATA%\Microsoft\Excel\.

→ Excel crash → mở Excel lại → có option Recover.

⚠️ Hạn chế: chỉ recover được crash gần nhất, không phải version 1 ngày trước.

Nhiều lệnh của add-in không hoàn tác được

Các lệnh ghi trực tiếp lên bảng tính — Tạo tiêu đề, Lấy Email, Trích bảng, Đánh số, Gộp ô… — không hoàn tác được bằng Ctrl+Z. AutoRecover không cứu được việc này vì file không hề crash. Thói quen an toàn: Ctrl+S ngay trước khi chạy một lệnh ghi hàng loạt, để còn đóng-không-lưu mà quay lại.

Mức trung: OneDrive / Google Drive sync

Lưu dự án trong folder OneDrive:

C:\Users\<user>\OneDrive\Projects\MHC_Van_Phong\

Mỗi save Ctrl+S → tự upload Cloud trong vài giây.

OneDrive có Version History (right-click file → Version history) — restore version cũ.

Mức cao: Weekly archive

PowerShell script chạy mỗi cuối tuần:

powershell
$src = 'D:\Projects\MHC_Van_Phong'
$dst = "D:\Backup\MHC\$(Get-Date -Format 'yyyy-MM-dd').zip"

Compress-Archive -Path "$src\*" -DestinationPath $dst -Force

Schedule: Task Scheduler → Weekly Sunday 11PM.

→ Mỗi tuần 1 file zip → giữ 8 tuần gần nhất.

Mức cao nhất: Off-site backup

Cho dự án quan trọng:

  • Backup local + Cloud + ổ cứng vật lý đặt ở văn phòng khác.
  • 3-2-1 rule: 3 copies, 2 different media types, 1 off-site.

Layer 2 — License + settings của DVDAddin

Toàn bộ trạng thái của add-in nằm ở ba chỗ, không nằm trong file Excel:

Vị tríNội dung
%LocalAppData%\DVDAddin\license.dat, fx_cache.json, admin-config.json
%APPDATA%\DVDAddin\lang.txt (ngôn ngữ UI), TCVN-Custom.json, thư mục Backups\
HKCU\Software\DVD\DVDAddinToàn bộ Tùy chọn, API key, phím tắt, thiết lập Gantt…

Các khóa registry và ý nghĩa

HKCU\Software\DVD\DVDAddin\
├── API Keys        ← GeminiAPI, ChatGPTAPI, GroqAPI, NvidiaAPI (văn bản thường)
├── Preferences     ← toàn bộ thiết lập trong cửa sổ Tùy chọn
├── Shortcuts       ← phím tắt tùy biến
├── GanttSettings   ← cấu hình biểu đồ tiến độ
├── Model / Service / Temperature  ← nhà cung cấp AI và tham số
├── SyncConfig      ← thiết lập Kết nối Server
├── Licensing       ← MaxSeenUtc, LicenseBlob dự phòng
├── Translate / TextTools / FileList / Chat / Onboarding / Settings

Xem thêm Customization → Registry tree.

Script backup

powershell
$dst = "$env:USERPROFILE\Documents\Backup\DVDAddin"
New-Item -ItemType Directory -Path $dst -Force | Out-Null

# 1. License + cache
Copy-Item "$env:LOCALAPPDATA\DVDAddin\*" $dst -Recurse -Force -ErrorAction SilentlyContinue

# 2. Ngôn ngữ UI + TCVN tùy biến
Copy-Item "$env:APPDATA\DVDAddin\*" $dst -Recurse -Force -ErrorAction SilentlyContinue

# 3. Registry (Tùy chọn, API key, phím tắt)
reg export "HKCU\Software\DVD\DVDAddin" "$dst\settings.reg" /y

File settings.reg chứa API key dạng văn bản thường

API key của Gemini/OpenAI/Groq/NVIDIA nằm trong registry không mã hoá, nên bản export cũng vậy. Đừng đẩy file này lên kho chung của công ty hay repo Git. Cất vào nơi chỉ mình bạn đọc được, hoặc mở file .reg xóa nhánh API Keys trước khi chia sẻ.

Restore script

powershell
$src = "$env:USERPROFILE\Documents\Backup\DVDAddin"

# Đóng Excel trước — file .xll đang nạp sẽ khoá mọi thứ
Get-Process EXCEL -ErrorAction SilentlyContinue | Stop-Process -Force

New-Item -ItemType Directory -Path "$env:LOCALAPPDATA\DVDAddin" -Force | Out-Null
New-Item -ItemType Directory -Path "$env:APPDATA\DVDAddin"     -Force | Out-Null

Copy-Item "$src\license.dat"      "$env:LOCALAPPDATA\DVDAddin\" -Force -ErrorAction SilentlyContinue
Copy-Item "$src\lang.txt"         "$env:APPDATA\DVDAddin\"      -Force -ErrorAction SilentlyContinue
Copy-Item "$src\TCVN-Custom.json" "$env:APPDATA\DVDAddin\"      -Force -ErrorAction SilentlyContinue

reg import "$src\settings.reg"

License không chuyển được sang máy khác bằng cách chép file

Machine ID được tính bằng SHA-256(MachineGuid | Tên máy | Phiên bản OS). Chép license.dat sang máy mới — hoặc chỉ đổi tên máy, hoặc nâng cấp Windows lên bản lớn hơn — đều ra Machine ID khác và token bị coi là của máy khác.

Cách đúng: đăng nhập lại bằng email/mật khẩu. Xem Chuyển license sang máy khác.

Nếu license.dat không ghi được

Khi thư mục %LocalAppData%\DVDAddin bị chặn ghi (ACL, Controlled Folder Access, hoặc có thư mục cũ nằm đúng chỗ file), add-in tự chuyển sang lưu ở HKCU\Software\DVD\DVDAddin\Licensing\LicenseBlob. Bản export registry ở trên đã bao gồm cả trường hợp này — không cần làm thêm gì.

Layer 3 — Mẫu và dữ liệu tùy biến

Những gì bộ cài ghi đè mỗi lần cập nhật

Thư mục cài C:\DVDAddin\ được bộ cài ghi đè. Hai thư mục con chứa dữ liệu bạn có thể đã sửa:

C:\DVDAddin\
├── Template\
│   ├── FormNTCV.xlsx            ← Mẫu NT CV
│   ├── FormNTVL.xlsx            ← Mẫu NT VL
│   ├── FormNKCT.xlsx            ← Mẫu Nhật ký
│   ├── SendEmail.xlsx           ← Mẫu Email
│   ├── GanttChart.xlsx          ← Mẫu tiến độ
│   └── RebarCutOptimizer.xlsx   ← Mẫu Cắt thép
└── Library\
    ├── Dinh Muc 1776.xlsx
    ├── Dinh Muc TT10.2019.xlsx
    ├── Ke hoach thi nghiem.xlsx
    ├── TCVN-Standards.json      ← danh mục tiêu chuẩn gốc
    └── TCVN-Custom.template.json

Sửa trực tiếp trong hai thư mục này là mất khi cập nhật. Hai cách an toàn:

  1. Mẫu riêng của đơn vị: đừng sửa file gốc — mở mẫu, Save As sang thư mục dự án hoặc ổ chung, dùng bản đó. Các lệnh mẫu chỉ dùng để "lấy khung", không bắt bạn quay lại file gốc.
  2. Tiêu chuẩn TCVN tự thêm: add-in đọc theo lớp — Library\TCVN-Standards.json là bản gốc, %APPDATA%\DVDAddin\TCVN-Custom.json là lớp phủ của bạn. Thêm tiêu chuẩn riêng vào lớp phủ, vì nó nằm ngoài thư mục cài nên bộ cài không đụng tới. Cửa sổ quản lý danh mục tiêu chuẩn (mở từ Kế hoạch TN) có nút Backup ghi bản sao đóng dấu thời gian ra %APPDATA%\DVDAddin\Backups\TCVN-Custom_yyyy-MM-dd_HHmm.json; add-in cũng tự tạo một bản như vậy ngay trước khi bạn Restore đè lên, nên lỡ khôi phục nhầm file vẫn quay lại được.

Gỡ cài đặt xoá sạch C:\DVDAddin

Trình gỡ cài đặt xoá cả thư mục cài, kể cả file bạn tự đặt vào đó. Đã chỉnh biểu mẫu trong C:\DVDAddin\Template\ cho hợp đơn vị mình thì phải sao lưu ra chỗ khác trước khi gỡ. Registry và license thì không bị xoá theo.

Master data dùng chung cho nhóm

Bảng giá, danh mục công tác, định mức riêng của đơn vị là workbook Excel bình thường — không có cơ chế đăng ký nào trong add-in. Quản lý như tài liệu:

\\Cloud\DA_MasterData\
├── BangGia_2026_v3.xlsx
├── BangGia_2026.xlsx        ← bản "hiện hành", luôn trỏ tới version mới nhất
└── DanhMucCongTac.xlsx

Workbook con tham chiếu tên file không có hậu tố version để tự lấy bản mới. Khi cập nhật: lưu bản có số version, rồi ghi đè bản "hiện hành".

Kết nối Server không có bản sao trên máy chủ

Kết nối Server đồng bộ ô và định dạng theo thời gian thực giữa các máy — qua LAN hoặc qua broker MQTT. Nó không lưu dữ liệu ở đâu cả: không có cơ sở dữ liệu phía máy chủ, không có snapshot trên đĩa.

Nghĩa là: workbook trên từng máy chính là bản backup duy nhất. Kết thúc phiên làm việc nhóm, mỗi người phải tự Ctrl+S. Ngắt kết nối rồi mà chưa lưu là mất.

Layer 4 — Custom scripts và chuỗi thao tác

VBA macros

Workbook chứa VBA → backup workbook = backup macro.

Để tách macro ra riêng: Excel → Developer → Visual Basic → File → Export File → lưu .bas / .cls vào thư mục Scripts\.

Chuỗi Auto Click

Auto Click không lưu ra file riêng. Chuỗi click được ghi thành bảng ngay trên sheet đang hoạt động, năm cột STT / Timestamp (ms) / X / Y / Wait (ms).

Muốn giữ lại một chuỗi hay dùng: để nguyên sheet đó trong workbook và lưu workbook, hoặc copy bảng sang một workbook "thư viện chuỗi thao tác" riêng. Nhớ kèm ghi chú về độ phân giải màn hình và vị trí cửa sổ lúc ghi — chuỗi phát lại theo tọa độ tuyệt đối, đổi màn hình là click sai chỗ.

PowerShell automation scripts

Đặt scripts ở một thư mục chung và đưa vào Git:

bash
cd //Cloud/DVDAddin_Master/Scripts
git init
git add .
git commit -m "Initial backup"

Mỗi lần sửa script → git commit → có lịch sử.

Disaster recovery scenario

Scenario 1: Máy hỏng — cài lại Windows

Restore steps:

  1. Cài Windows + Excel.
  2. Cài DVDAddin (bộ cài mới nhất, lấy từ lệnh Tải Tool trên máy khác hoặc từ trang tải).
  3. Đóng hoàn toàn Excel rồi mới chạy bộ cài — Excel đang mở sẽ khoá file .xll và bộ cài báo lỗi.
  4. Chạy restore script ở trên: settings.reg trả lại toàn bộ Tùy chọn, API key và phím tắt; lang.txt trả lại ngôn ngữ UI; TCVN-Custom.json trả lại danh mục tiêu chuẩn tự thêm.
  5. Mở Excel → tab DVD AddinBản quyền → đăng nhập lại bằng email/mật khẩu (license.dat cũ không dùng được trên máy mới).
  6. Restore workbook từ Cloud / archive zip.

Time to recover: 30-60 phút nếu có backup tốt.

Scenario 2: Ransomware encrypt file

Worst case:

  • File workbook bị mã hoá → mất hết data nếu không có bản sao.
  • Backup local trên cùng máy cũng có thể bị mã hoá cùng.

Mitigation:

  • Backup off-site / cloud (ransomware không reach).
  • OneDrive Version History có thể restore version trước khi bị mã hoá.

Scenario 3: Cập nhật Excel làm add-in lỗi

Fix:

  • Tạm tắt DVDAddin: File → Options → Add-ins → Manage: Excel Add-ins → Go → bỏ tick DVDAddin.
  • Chờ bản vá của add-in, hoặc quay lại bản Excel trước đó nếu môi trường cho phép.
  • Trong lúc đó workbook vẫn mở được, chỉ thiếu tính năng của add-in.

Đã sửa mà "vẫn còn lỗi"?

Excel giữ code của add-in trong bộ nhớ đến khi tắt hẳn. Cài đè bản mới trong lúc Excel đang chạy thì bản cũ vẫn tiếp tục chạy. Đóng tất cả cửa sổ Excel (kiểm tra Task Manager không còn EXCEL.EXE), cài, rồi mở lại.

Scenario 4: Lỡ chạy nhầm một lệnh ghi hàng loạt

Không có Undo. Ba đường thoát, theo thứ tự:

  1. Đóng workbook không lưu → mở lại bản trên đĩa.
  2. OneDrive/SharePoint → Version history → khôi phục bản trước.
  3. Weekly archive zip.

Nếu cả ba đều không có thì không còn cách nào — đó là lý do mục này nằm trong trang backup.

Backup automation

All-in-one backup script

powershell
# backup-all.ps1
$ErrorActionPreference = 'Continue'
$today = Get-Date -Format 'yyyy-MM-dd'
$root  = "D:\Backup\$today"

New-Item -ItemType Directory -Path $root -Force | Out-Null

# 1. Trạng thái add-in
New-Item -ItemType Directory -Path "$root\DVDAddin" -Force | Out-Null
Copy-Item "$env:LOCALAPPDATA\DVDAddin\*" "$root\DVDAddin" -Recurse -Force -ErrorAction SilentlyContinue
Copy-Item "$env:APPDATA\DVDAddin\*"      "$root\DVDAddin" -Recurse -Force -ErrorAction SilentlyContinue
reg export "HKCU\Software\DVD\DVDAddin" "$root\DVDAddin\settings.reg" /y

# 2. Workbook dự án
if (Test-Path 'D:\Projects') {
    Compress-Archive -Path 'D:\Projects\*' -DestinationPath "$root\projects.zip" -Force
}

# 3. Master data + scripts dùng chung
if (Test-Path '\\Cloud\DA_MasterData') {
    Compress-Archive -Path '\\Cloud\DA_MasterData\*' -DestinationPath "$root\master.zip" -Force
}

# 4. Dọn backup cũ (giữ 8 tuần)
Get-ChildItem 'D:\Backup' -Directory |
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-56) } |
    Remove-Item -Recurse -Force

Write-Output "Backup done at $root"

Schedule

Task Scheduler:

  • Trigger: Weekly Sunday 11PM.
  • Action: PowerShell -File D:\Scripts\backup-all.ps1.
  • Settings: Run whether user logged on or not.

Notification khi thất bại

powershell
try {
    # backup logic
} catch {
    Send-MailMessage -To '[email protected]' -Subject 'Backup FAILED' `
                     -Body $_.Exception.Message -SmtpServer 'smtp.company.com'
}

Restore checklist

Khi dựng lại máy:

  • [ ] Cài Windows + Excel.
  • [ ] Đóng hết Excel, rồi cài DVDAddin.
  • [ ] Copy lại %LocalAppData%\DVDAddin\%APPDATA%\DVDAddin\.
  • [ ] reg import settings.reg.
  • [ ] Mở Excel → thấy đủ hai tab: DVD AddinDVD Cons.
  • [ ] Bản quyền (DVD Addin › Thông tin) → đăng nhập lại → trạng thái hiện đúng edition (STANDARD hay PRO).
  • [ ] Thử một lệnh không cần license: Xoá space thừa (DVD Addin › Văn bản và Số › Xử lý văn bản).
  • [ ] Thử một lệnh cần license: Nhập nhanh hoặc In hàng loạt.
  • [ ] Thử một lệnh cần API key: mở Dịch ngôn ngữ rồi chọn dịch vụ Gemini hoặc ChatGPT (đường Google không cần key nên không kiểm được) — báo thiếu key nghĩa là settings.reg chưa vào.
  • [ ] Restore workbook từ cloud / archive.

→ Done: máy mới giống y hệt máy cũ.

Liên quan

Released under DVDAddin License.