Добавление Excel файла и работа с ним

Помогите решить проблему, пожалуйста! Задача такая: нужно загнать ячейки таблицы excel в двумерный массив. Я пытаюсь подключить файл с таблицей, но выдает ошибку, мол, не могу его найти. Путь файла проверяла несколько раз, он написан верно. Вот сам код:

using System;
using System.IO;
using Excel = Microsoft.Office.Interop.Excel;
 
namespace Praktika
{
    class Program
    {
        static void Main(string[] args)
        {
            Excel.Application xlApp = new Excel.Application(); //Excel
            Excel.Workbook xlWB; //рабочая книга
 
            string file = "C:\\Nastya\\Praktika\\Perechen_stran.xlsx";
            xlWB = xlApp.Workbooks.Open(file); //название файла Excel
            
            Excel.Worksheet xlSht = (Excel.Worksheet)xlWB.Sheets[1]; //получить 1-й лист
 
            var arrData = xlSht.Range["A1"].CurrentRegion.Value; //значения из диапазона в массив
 
            xlWB.Close(false); // закрываем книгу
            xlApp.Quit(); // закрываем Excel
 
            Console.WriteLine(arrData);
        }   
    }

Тут речь о библиотеке для работы с Офисом.
Видимо она не подключена к проекту, или Офис не установлен, или не соответствует версии подключенной библиотеки.
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/interop/how-to-access-office-onterop-objects#to-add-references


Вообще если Excel 2007+ (xlsx), то проще использовать библиотеки типа этой:

Они не требуют установленного Офиса, быстрее работают и нет сложностей связанных с COM.

1 лайк

@Nastya, точно файл лежит по этому пути? Когда запускаешь программу, он у тебя, число случайно, не открыт в MS Excel ?
может быть, он остался открытым в результате отладки (задача завершилась, а процесс с Excel.exe остался в памяти). Попробуй перезагрузить компьютер и потом, не запуская Excel - запусти свою программу.

Попробуйте иначе указать путь к файлу:

string file = "C:\Nastya\Praktika\Perechen_stran.xlsx"
Форматы путей к файлам в системах Windows

Так не о файле Экселя ж ошибка.

И так точно вряд ли правильно, либо \\ чтоб экранировать, либо @"".

1 лайк

Так там “ошибка загрузки файла или Экселя”.

так точно не прокатит. @AlexP верно сказал - либо @ перед строкой, либо экранировать через двойной слеш \

Точно по этому пути. Я попробовала, как вы сказали, всё по-прежнему

Хорошо, я попробую так сделать, спасибо.

Настя, в вашем коде используется открытие файла через установленный на компьютере MS Excel. Подскажите, а у Вас на компьютере установленный MS Excel есть? Какая версия? Он нормально запускается?

Есть. MS Excel 2010. Версия: 14.0.7248.5000. Да, запускается хорошо.

взял я xlsx файл
Nastya.zip (9.5 КБ)
взял SharpDeveloper (студии у меня нет)

вставил ваш код как есть.
в конце дописал

            Console.WriteLine("Press Enter to exit");
            Console.ReadLine();

получил на экране значение из ячейки A1
sshot0

так что код вряд ли виноват.

а скажите проекте в refference ссылка на Microsoft.Office.Interop.Excel добавилась автоматически?

похоже, что проблема как раз в несовпадении dll с нужными версиями офиса (Excel)

почитайте тут

вот тебе архив с DLL
попробуй положить эту DLL рядом со своим praktika.exe (в папки DEBUG и RELEASE)
// распаковать обязательно!
Microsoft.Office.Interop.Excel.dll.zip (391.7 КБ)

Я сама добавляла. Хорошо, я попробую что-нибудь сделать, спасибо!