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