У меня возникают некоторые проблемы при использовании моего Angular Excel Addin (Office js) в нескольких открытых экземплярах Excel.
Прежде чем я опишу проблему более подробно, я хотел бы дать краткое объяснение того, что делает AddIn:
Пользователь может определить функции UDF в Excel для извлечения данных с сервера и отобразить его в Excel. Однако функции UDF не выполняются напрямую, а только при запуске обновления. После этого запросы отправляются на сервер, данные выбираются, форматируются и отображаются в Excel. Если пользователь нажимает кнопку «Обновить», все рабочие листы в рабочей книге перебираются и выполняется поиск соответствующих функций UDF. Запросы отправляются непосредственно на сервер. При определенных обстоятельствах может потребоваться некоторое время, чтобы ответить на запрос и отобразить данные в Excel (например, когда пользователь определил 100 функций UDF на 100 листах, каждая из которых содержит один UDF).
I в настоящее время возникают следующие проблемы:
1) Если пользователь открыл экземпляр Excel с функциями UDF, определенными в 100 листах, и другой экземпляр с 70 листами, содержащими функции UDF, я получаю сообщение «Неожиданная ошибка сервера». произошла ошибка при переключении между открытыми экземплярами Excel. Обновление не выполняется, иногда запросы вообще не отправляются или не могут быть обработаны. Я думаю, что следующий фрагмент кода может вызвать эту проблему:
Excel.run (asyn c context => {const sheet: Excel.Worksheet = context.workbook.worksheets.getActiveWorksheet (); ...}
context.workbook всегда возвращает текущую открытую книгу или ту, которая в данный момент открыта в активном экземпляре Excel, но я не нашел способа получить доступ к книге по имени или идентификатору.
Возможно ли, что надстройка может работать должным образом только в одном случае, или я делаю что-то не так?
2) Если вы запустили обновление рабочей книги через надстройку (например, 100 листов с функциями UDF) и Excel теряет фокус (например, переключаясь на Word или Edge), а затем, как уже упоминалось в пункте 1), не все запросы отправляются или обрабатываются.
Я надеюсь, что у некоторых из вас уже были подобные проблемы и, возможно, есть решение для их.