Workbooks.Open vs OLEDBConnection не может открыть книгу

Я получаю сообщение об ошибке:

Excel не может открыть файл FILE.xlsx, так как формат файла или расширение файла недействительны. Убедитесь, что файл не поврежден и что расширение файла соответствует формату файла.

Я подозреваю, что причина связана с тем, что в File.xlsx у меня есть OleDBConnection, использующий его, и что позже в том же коде я вызываю функцию Interop Open of Excel для этого файла. Кто-нибудь может подтвердить мою теорию?

public ExcelWorkbook(string file)
    {                       
        fileName = file;

        using (var workbookConnection = new OleDbConnection(String.Format(Resource.ExcelConnectionString, file)))
        {
            workbookConnection.Open();
            tabNames = GetDataTabsName(workbookConnection);
            foreach (string tabName in tabNames)
            {
                var newExcelTab = new ExcelTab(workbookConnection, file, tabName);
                excelTabs.Add(tabName, newExcelTab);
            }
        }
    }

Затем моя функция GetDataTabsName(workbookConnection);

private List<string> GetDataTabsName(OleDbConnection workbookConnection)
    {
        var tabsName = new List<string>();
        var tabName = "";

       Excel.Application excelApp = new Excel.Application();
        excelApp.Visible = false;
        Excel.Workbook workbook = excelApp.Workbooks.Open(workbookConnection.DataSource, 0, false, 5, "", "", false, 
            Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
....some more code

Open здесь терпит неудачу... и я думаю, что это связано с тем, что в этом файле существует OleDBConnection ??


person eetawil    schedule 17.10.2013    source источник


Ответы (2)


После дальнейшего тестирования оказалось, что моя догадка была верна. Таким образом, открытие OleDBConnection на листе не может быть открыто одновременно с Microsoft.InterOp.

person eetawil    schedule 17.10.2013

Третий параметр Workbooks.Open указывает, должна ли работа открыт в режиме только для чтения. Если соединение для взаимодействия предназначено только для чтения, попробуйте установить для этого значения значение true. Если подключение OleDb может быть доступно только для чтения, добавьте ReadOnly=true; в строку подключения.

person D Stanley    schedule 17.10.2013
comment
Спасибо, попробую - person eetawil; 17.10.2013