У меня возникают проблемы при использовании надстройки Angular Excel (Office js) в нескольких открытых экземплярах Excel.

Прежде чем я опишу проблему более подробно, я хотел бы дать краткое объяснение того, что делает надстройка:

Пользователь может определять функции UDF в Excel для получения данных с сервера и отображения их в Excel. Однако функции UDF не выполняются напрямую, а только при запуске обновления. После этого запросы отправляются на сервер, данные выбираются, форматируются и отображаются в Excel. Если пользователь нажимает кнопку «Обновить», выполняется итерация всех листов в книге и выполняется поиск соответствующих функций UDF. Запросы отправляются прямо на сервер. При определенных обстоятельствах может потребоваться некоторое время, чтобы ответить на запрос и отобразить данные в Excel (например, когда пользователь определил 100 функций UDF на 100 рабочих листах, каждый из которых содержит одну UDF).

В настоящее время у меня есть следующие проблемы:

1) Если пользователь открыл экземпляр Excel с функциями UDF, определенными на 100 листах, и другой экземпляр с 70 листами, содержащими функции UDF, я получаю сообщение об ошибке «Произошла непредвиденная ошибка сервера» при переключении между открытыми экземплярами Excel. Обновление не проходит, иногда запросы вообще не отправляются или не могут быть обработаны. Я думаю, что следующий фрагмент кода может вызвать эту проблему:

Excel.run (асинхронный контекст => {const лист: Excel.Worksheet = context.workbook.worksheets.getActiveWorksheet (); ...}

Context.workbook всегда возвращает текущую открытую книгу или ту, которая в настоящее время открыта в активном экземпляре Excel. Но я не нашел способа получить доступ к книге по имени или идентификатору.

Возможно ли, что надстройка может работать правильно только в одном экземпляре, или я что-то делаю не так?

2) Если вы начали обновление книги через надстройку (например, 100 листов с функциями UDF) и Excel теряет фокус (например, при переключении на Word или Edge), то, как уже упоминалось в разделе 1), не все запросы отправляются или обрабатываются .

Я надеюсь, что у некоторых из вас уже были подобные проблемы и, возможно, есть их решение.

1
Marco Siebert 16 Апр 2020 в 09:55

1 ответ

Лучший ответ

Спасибо Марко Зиберту за сообщение нам об этой проблеме.

Для 1 # это известная проблема, которую мы сейчас изучаем, она также отслеживается по адресу https://officespdev.uservoice.com/forums/224641-feature-requests-and-feedback/suggestions/39781582-fix-generalexceptions -being-thrown-when-multiple-e,

Чтобы решить эту проблему, нам нужно исправить для каждого API, который используется в этом сценарии, у нас есть рабочий элемент 3743479 для этой проблемы. вы также можете проголосовать за эту функцию голосом пользователя. Кроме того, не могли бы вы поделиться со мной API, которые вы пытаетесь использовать в сценарии с несколькими книгами?

На ваш вопрос: «context.workbook всегда возвращает текущую открытую книгу или ту, которая в данный момент открыта в активном экземпляре Excel. Но я не нашел способа получить доступ к книге по имени или идентификатору». Это сделано намеренно, поскольку надстройка JS предназначена для каждой книги. Таким образом, мы не поддерживаем доступ к содержимому другой книги, кроме API addFromBase64, который предоставляет возможность копировать рабочие листы из другой книги в текущую.

1
Raymond Lu 16 Апр 2020 в 08:15