Подключение к процессу Excel (обработка случая, когда таких процессов несколько) - C#
Формулировка задачи:
Написал функцию, которая в случае, если Excel открыт, ищет в нем WorkBook и WorkSheet с заданными именами, и если они там есть, возвращает объект WorkSheet, который уже дальше обрабатывается:Всё работает. Однако я не могу понять, как отловить ситуацию, когда открыто несколько процессов Excel. Как сделать поиск открытого файла с заданным именем во всех открытых процессах Excel?
////// Зная имя файла Excel и имя листа, получаем объект Worksheet в открытой книге. /// /// имя файла Excel (включая расширение) /// имя листа ///объект Worksheet public static Excel.Worksheet getWorkSheetInOpenedWorkBook(string workBookName, string workSheetName) { // Получаем открытое приложение Excel Excel.Application xlsApp = null; try { xlsApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); } catch { return null; } // Ищем открытую книгу с заданным именем Excel.Workbook wb = null; foreach (Excel.Workbook _wb in xlsApp.Workbooks) { if (_wb.Name == workBookName) { wb = _wb; break; } } if (wb == null) { return null; } // Ищем в книге лист с заданным именем Excel.Worksheet ws = null; foreach (Excel.Worksheet _ws in wb.Worksheets) { if (_ws.Name == workSheetName) { ws = _ws; break; } } return ws; }
Решение задачи: «Подключение к процессу Excel (обработка случая, когда таких процессов несколько)»
textual
Листинг программы
Excel.Workbook myExcelWorkbook = null; try { myExcelWorkbook = System.Runtime.InteropServices.Marshal.BindToMoniker(fileName) as Excel.Workbook; } catch (System.Runtime.InteropServices.COMException e) { MessageBox.Show(String.Format("File name {0} was not found running: {1}", fileName, e.Message)); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д