fix(core): 优化文件保存逻辑并改进错误处理

- 实现安全保存功能,写入前创建备份文件
- 添加写入失败时自动恢复备份的机制
- 修复旧备份文件清理逻辑
- 改进Excel序列号与日期时间转换精度计算
- 优化日期格式解析逻辑,增强对不同日期格式的支持
This commit is contained in:
macro
2026-04-26 00:01:16 +08:00
parent 642fa49340
commit 68e9f114be
2 changed files with 24 additions and 3 deletions
+23 -2
View File
@@ -180,14 +180,35 @@ enum Commands {
// 安全保存辅助 // 安全保存辅助
fn safe_save_umya(book: &mut Spreadsheet, target: &PathBuf) -> Result<()> { fn safe_save_umya(book: &mut Spreadsheet, target: &PathBuf) -> Result<()> {
if target.exists() { let backup = if target.exists() {
let backup = target.with_extension("xlsx.bak"); let backup = target.with_extension("xlsx.bak");
let _ = fs::remove_file(&backup); let _ = fs::remove_file(&backup);
fs::copy(target, &backup)?; fs::copy(target, &backup)?;
Some(backup)
} else {
None
};
// 尝试写入文件
match writer::xlsx::write(book, target) {
Ok(_) => {
// 写入成功,删除备份文件
if let Some(bak) = backup {
let _ = fs::remove_file(bak);
} }
writer::xlsx::write(book, target).map_err(|e| DexcelError::Umya(e.to_string()))?;
Ok(()) Ok(())
} }
Err(e) => {
// 写入失败,恢复备份
if let Some(bak) = &backup {
if bak.exists() {
let _ = fs::copy(bak, target);
}
}
Err(DexcelError::Umya(e.to_string()))
}
}
}
fn get_sheet_mut<'a>(book: &'a mut Spreadsheet, name: &Option<String>) -> Result<&'a mut Worksheet> { fn get_sheet_mut<'a>(book: &'a mut Spreadsheet, name: &Option<String>) -> Result<&'a mut Worksheet> {
match name { match name {
Binary file not shown.