«формат файла или расширение файла недопустимо» при открытии файла Excel в C # - PullRequest
0 голосов
/ 12 марта 2019

У меня есть программа на C #, которая открывает файл Excel, считывает данные и экспортирует их в другой файл Excel в другом формате.

Программа работает нормально, когда файл Excel, который я пытаюсь открыть, - * .xls, но я получаю исключение (ниже), когда файл Excel, который я открываю, - * .xlsx. Оба файла открываются в Excel, только когда я пытаюсь открыть файл * .xlsx в моей программе на C #, появляется исключение.

Код

private List readExcel(OleDbConnection connection, string filePath, ExcelReportType rptType)
{

    Excel.Application excelApp = null;
    Excel.Workbook workbook = null;
    try
    {
        //Open connection to spreadsheet
        if (connection.State == ConnectionState.Closed)
        {
            connection.Open();
        }

        //open excel and open the workbook
        excelApp = new Excel.Application();
        workbook = excelApp.Workbooks.Open(filePath); //exception is thrown here

        //more code to read the contents of the workbook
    } 
    catch (Exception e)
    {
        Console.WriteLine(e.StackTrace);
    }
    finally
    {
        if (workbook != null)
        {
            workbook.Close();
        }

    }
}

Вот код для создания соединения, который вызывается непосредственно перед вызовом readExcel () и не создает никаких исключений.

private OleDbConnection openExcelConnection(OleDbConnection connection, string filePath)
{
    try
    {
        //establish connection to spreadsheet
        connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + filePath + "';Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\""); 

    }
    catch (Exception e)
    {
        //code to handle exception
    }
    return connection;
}

Сообщение об исключении

"Excel не может открыть файл '51 .0.19.01 (экспорт) .xlsx ', так как формат файла или расширение файла недействительны. Убедитесь, что файл не был поврежден и что расширение файла соответствует формату файла. «

Трассировка стека

at Microsoft.Office.Interop.Excel.Workbooks.Open (Строка Имя файла, Объект UpdateLinks, Объект ReadOnly, Формат объекта, Пароль объекта, Объект WriteResPassword, Объект IgnoreReadOnlyRecommended, Источник объекта, Разделитель объектов, Редактируемый объект, Уведомлять объект, Объектный объект Конвертер, объект AddToMru, объект локальный, объект CorruptLoad)

Что я пробовал

  • Я подтвердил, что строка подключения отформатирована правильно, и попробовал несколько вариантов, ни один из которых не работал (https://www.connectionstrings.com/excel/)
  • Я подтвердил, что файл * .xlsx открывается в Excel (и я воспроизвел ошибку с несколькими различными файлами, поведение такое же).
  • Я скачал и использую последнюю версию Microsoft.Office.Interop.Excel dll через диспетчер пакетов NuGet.
  • У меня изначально была проблема с открытием файлов * .xls, и я следовал инструкциям в этом вопросе , чтобы загрузить драйвер Access 2010, который решил проблему с файлами * .xls.
  • Я обнаружил число из вопросов в переполнении стека, ссылающихся на это исключение, но они возникали, когда пользователь экспортировал в Excel или пытался открыть испорченный документ Я пытаюсь открыть документ, и он не выглядит поврежденным, потому что он открывается в Excel.
...