diff --git a/dexcel/src/main.rs b/dexcel/src/main.rs index 08f2f97..a9ab360 100644 --- a/dexcel/src/main.rs +++ b/dexcel/src/main.rs @@ -180,13 +180,34 @@ enum Commands { // 安全保存辅助 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 _ = fs::remove_file(&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); + } + Ok(()) + } + Err(e) => { + // 写入失败,恢复备份 + if let Some(bak) = &backup { + if bak.exists() { + let _ = fs::copy(bak, target); + } + } + Err(DexcelError::Umya(e.to_string())) + } } - writer::xlsx::write(book, target).map_err(|e| DexcelError::Umya(e.to_string()))?; - Ok(()) } fn get_sheet_mut<'a>(book: &'a mut Spreadsheet, name: &Option) -> Result<&'a mut Worksheet> { diff --git a/dexcel/测试表.xlsx b/dexcel/测试表.xlsx deleted file mode 100644 index 589f021..0000000 Binary files a/dexcel/测试表.xlsx and /dev/null differ