2013-02-18 5 views
2

У меня есть файл excel, который содержит 4 листа. Внешняя система ежедневно отправляет файлы excel, и моя программа считывает, затем сохраняет данные в db. У меня есть 3 файла, которые, возможно, были повреждены, когда моя программа пытается прочитать файлы, которые она дает ошибке «Внешняя таблица не в ожидаемом формате». когда я пытаюсь открыть файлы в офисном интерфейсе, он возвращает мне Excel, найденный урезуемым контентом в файле.xlsx. Вы хотите восстановить содержимое этой книги? и т. д.Как восстановить файл Excel?

Когда я запускаю программу после того, как я восстановил файл с превосходным офисом и сохранил его снова, он работает. но мне нужно восстановить эти файлы, прежде чем программа начнет читать. Есть ли способ восстановить файлы excel, например, офис?

Я использую Microsoft.ACE.OLEDB.12.0;

+0

Вы можете разместить свой код? –

+1

Пожалуйста, не просто попросите нас решить проблему за вас. Покажите нам, как _you_ попытался решить проблему самостоятельно, а затем покажите нам _exactly_, каким был результат, и скажите, почему вы считаете, что это не сработало. См. «[Что вы пробовали?] (Http://whathaveyoutried.com/)» за отличную статью, которую вы действительно должны прочитать. –

+0

Я совершенно незнакомец с офисными операциями вроде этого, я не могу сказать, что я что-то пробовал в этой ситуации. Единственное, что я пытался открыть в ms excel и сохранить снова, как этот [здесь] (http://stackoverflow.com/questions/6608228/ssis-excel-connection-error-external-table-is-not-in-the -expected-format) – fealin

ответ

7

Вы можете использовать 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); 
+0

Это именно то, что я пытаюсь сделать. – fealin

3

Поскольку ваш файл поступает из внешнего источника, его можно заблокировать в качестве меры предосторожности. Решение может быть, чтобы разблокировать 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"); 
    } 
} 

Взято из этого ответа: Unblock File from within .net 4 c#

+0

Я попробовал решение, но когда я использовал функцию разблокирования, он вернул false. Я использую Windows 7 x64, возможно, эта функция не работает в x64 или альтернативного потока нет. У вас есть идея по этой функции? – fealin

+0

Можете ли вы проверить, что проблема была заблокированным файлом? Проблемы, возникающие при попытке разблокирования, могут быть разрешены, как указано здесь: http://stackoverflow.com/questions/6375599/looks-this-pinvoke-correct-and-reliable – markoo

Смежные вопросы