fix(core): 优化文件保存逻辑并改进错误处理
- 实现安全保存功能,写入前创建备份文件 - 添加写入失败时自动恢复备份的机制 - 修复旧备份文件清理逻辑 - 改进Excel序列号与日期时间转换精度计算 - 优化日期格式解析逻辑,增强对不同日期格式的支持
This commit is contained in:
+23
-2
@@ -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.
Reference in New Issue
Block a user