Date: 03.02.2019 17:08:45
Для того, чтобы подключиться к уже запущенному экземпляру Excel, используйте Marshal.GetActiveObject:
Excel.Application app = (Excel.Application) Marshal.GetActiveObject("Excel.Application");Если результат null, значит Excel не открыт. В противном случае, проходите по Workbooks и смотрите, есть ли там то, что нужно вам (по свойству Name или Path).
Date: 07.02.2019 9:59:39
Современные версии Excel открывают все документы в одном процессе, если их явно не попросить об обратном.
"там по-любому нужно пробежаться циклом foreach по какой-то коллекции, наверное, и по свойству Name отрубить его. "
Да, я же написал:
"В противном случае, проходите по Workbooks и смотрите, есть ли там то, что нужно вам (по свойству Name или Path)."
Name - имя файла, Path - каталог. FullName, вроде, содержит полный путь к файлу.
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