potrebbe capire che un file venga completamente danneggiato e che pur cercando di aprirlo in sola lettura con con tenetativo di recupero Excel non si atttiva ma da un errore

image003.jpg

il problema sta probabilmente in qualche macro che ha danneggiato il file nell'ultimo salvataggio

ricorda che esiste una procedura per danneggiare un file Office (Microsoft Office - danneggiare i files)

soluzione tentativo
prova ad aprirlo in modalità provvisoria (file danneggiato)




soluzione finale C#
con in software C# in console provo ad aprire il file e salvarlo in vari formati compreso quello senza macro
magari perdi le macro ma i dati li salvi

creo un progetto Console e compila questo codice indicando le giuste variabili


// variabili
string dirorigine = @"C:\Directory dove sta il file\";
string filerotto = "nome del file con estensione";


// console
Console.WriteLine("SistemaExcelDanneggiato (v 1.0)");
Console.WriteLine();


// creo oggetto Excel
Excel.Application xlApp = new Excel.Application();
xlApp.DisplayAlerts = false;
xlApp.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable;


// apri file corrotto
Console.WriteLine("apro file rotto: " + filerotto);
Console.WriteLine();
Excel.Workbook xlFileExcel;
object misValue = System.Reflection.Missing.Value;
xlFileExcel = xlApp.Workbooks.Open(dirorigine + filerotto, 0, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "", false, false, 0, true, true, 1);
xlApp.Calculation = Excel.XlCalculation.xlCalculationManual;


// salva in vari formati
Console.WriteLine("salvo il file");

string filesenzamacro = dirorigine + Path.GetFileNameWithoutExtension(filerotto) + " (sistemato senza macro).xlsx";
Console.WriteLine("- senza macro: " + Path.GetFileName(filesenzamacro));
if (File.Exists(filesenzamacro))
{

File.Delete(filesenzamacro);
}
xlFileExcel.SaveAs(filesenzamacro, Excel.XlFileFormat.xlOpenXMLWorkbook, "", "", false, false, Excel.XlSaveAsAccessMode.xlExclusive, 1, false, misValue, misValue, true);


string fileconmacro = dirorigine + Path.GetFileNameWithoutExtension(filerotto) + " (sistemato con macro).xlsm";
Console.WriteLine("- con macro: " + Path.GetFileName(fileconmacro));
if (File.Exists(fileconmacro))
{
File.Delete(fileconmacro);
}
xlFileExcel.SaveAs(fileconmacro, Excel.XlFileFormat.xlOpenXMLWorkbookMacroEnabled, "", "", false, false, Excel.XlSaveAsAccessMode.xlExclusive, 1, false, misValue, misValue, true);


string filebinario = dirorigine + Path.GetFileNameWithoutExtension(filerotto) + " (sistemato binario).xlsb";
Console.WriteLine("- binario: " + Path.GetFileName(filebinario));
if (File.Exists(filebinario))
{
File.Delete(filebinario);
}
xlFileExcel.SaveAs(filebinario, Excel.XlFileFormat.xlExcel12, "", "", false, false, Excel.XlSaveAsAccessMode.xlExclusive, 1, false, misValue, misValue, true);


// chiudo Excel
xlFileExcel.Close(true, misValue, misValue);
Marshal.ReleaseComObject(xlFileExcel);
xlApp.Quit();
Marshal.ReleaseComObject(xlApp);

Process[] process = Process.GetProcessesByName("Excel");
foreach (Process p in process)
{
p.Kill();
}