Ответы с форумов MSDN

Подключение к уже запущенному экземпляру Excel.Application в C#

Date: 03.02.2019 17:08:45

Для того, чтобы подключиться к уже запущенному экземпляру Excel, используйте Marshal.GetActiveObject:

Excel.Application app = (Excel.Application) Marshal.GetActiveObject("Excel.Application");
Если результат null, значит Excel не открыт. В противном случае, проходите по Workbooks и смотрите, есть ли там то, что нужно вам (по свойству Name или Path).  


Message 297

Date: 07.02.2019 9:59:39

Современные версии Excel открывают все документы в одном процессе, если их явно не попросить об обратном. 

"там по-любому нужно пробежаться циклом foreach по какой-то коллекции, наверное, и по свойству Name отрубить его. "

Да, я же написал:

"В противном случае, проходите по Workbooks и смотрите, есть ли там то, что нужно вам (по свойству Name или Path)."

Name - имя файла, Path - каталог. FullName, вроде, содержит полный путь к файлу.

Message 296

Date: 07.02.2019 10:52:58

И не должно. Вызов GetActiveObject должен быть до создания нового экземпляра Excel. Иначе он вернет этот же вами созданный экземпляр...

Excel.Application app=null;           

try
{
    app = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
}
catch (COMException) { app = null; }

if (app != null)
{
    foreach (Excel.Workbook x in app.Workbooks)
    {
	if (x.FullName == path + @"\file.xlsx")
        {
            x.Save();
            x.Close(true);
            break;
        }
    }
}

app = new Excel.Application();

//работа с Excel...

System.Diagnostics.Process.Start(Directory.GetCurrentDirectory() + @"\file.xlsx");


Автор: VadimTagil

Главная страница - Список тем - Репозиторий на GitHub