如何修复一个Excel文件?

我有一个包含4个工作表的Excel文件。 外部系统每天发送excel文件,我的程序读取然后将数据存储到db。 我有3个文件可能已经损坏,当我的程序试图读取文件,它给出了错误“外部表格是不是所需的格式”。 当我尝试在办公室界面中打开文件时,它会返回我Excel在file.xlsx中发现的可读内容是否要恢复此工作簿的内容? 等等…

当我用office excel修复文件后再启动程序,并再次保存,它的工作原理。 但是我需要在程序开始读取之前修复这个文件。 有没有办法像办公室那样修复excel文件?

我正在使用Microsoft.ACE.OLEDB.12.0;

您可以使用Excel Interop来打开文件并像Excel一样进行修复。 但是你不能在没有MS Office的机器上使用你的程序。 您可以尝试第三方库:

Excel Interop的代码如下:

Missing missing = Missing.Value; Application excel = new Application(); Workbook workbook = excel.Workbooks.Open(sourceFilePath, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, XlCorruptLoad.xlRepairFile); workbook.SaveAs(savedFile, XlFileFormat.xlWorkbookDefault, missing, missing, missing, missing, XlSaveAsAccessMode.xlExclusive, missing, missing, missing, missing, missing); workbook.Close(true, missing, missing); 

由于您的文件来自外部来源,因此可能会将其作为安全防范措施予以屏蔽。 解决scheme可能是像这样编程解锁Excel文件:

 public class FileUnblocker { [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool DeleteFile(string name); public bool Unblock(string fileName) { return DeleteFile(fileName + ":Zone.Identifier"); } } 

采取从这个答案: 解除阻止文件从.net 4 c#