Подключение к процессу Excel (обработка случая, когда таких процессов несколько) - C#

Узнай цену своей работы

Формулировка задачи:

Написал функцию, которая в случае, если Excel открыт, ищет в нем WorkBook и WorkSheet с заданными именами, и если они там есть, возвращает объект WorkSheet, который уже дальше обрабатывается:
        /// 
        /// Зная имя файла 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. Как сделать поиск открытого файла с заданным именем во всех открытых процессах Excel?

Решение задачи: «Подключение к процессу 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));
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.714 из 5
Похожие ответы