Цитата:
Сообщение от
gl00mie
Я лично для себя пришел к выводу, что надо все нафиг переписать на .NET, как
рекомендовали тут. Объем модификаций вроде как ощутимый, но хочется реально решить проблему "враз и навсегда", а не шаманить с макросами try/catch. Семейство классов SysExcel* модифицируется на раз, с ComExcelDocument_RU все сложнее из-за того, что его экземпляры создаются напрямую через new(). Пока есть реализация на уровне proof of concept, о результатах тестирования непременно доложусь.
Переписал семейство классов SysExcel на .NET, по ходу дела пришлось добавить несколько новых оберток для интерфейсов Excel, чтобы избавиться от необходимости работать напрямую через COM. Пока повсеместно включать не решился - ограничился лишь стандартным импортом из Excel (класс SysDataExcelCOM) - там тоже понадобилось в несских местах избавиться от прямой работы через COM, но результат превзошел все ожидания! При запуске на терминальном сервере с полусотней параллельно работающих пользовательских сессий импорт из Excel через .NET несмотря на нещадные переключения между окнами (которые раньше валили импорт на раз) не только стабильно завершался без ошибок, но и отрабатывал при этом достаточно шустро - в отличие от "залатанного" импорта через COM, где за счет дополнительных try/catch/retry ошибки вроде как маскировались, но приводили к
очень ощутимому замедлению работы.
На очереди - ComExcelDocument_RU, но с ним все сложнее, потому что в отличие от SysExcel* в нем не используется инкапсулированный конструктор, в результате чего подменить класс наследником так вот просто нельзя, и остается либо править кучу мест, где создается его экземпляр, либо нещадно переписывать сам класс...
PS. Тестировалось все на Ms Office 2010.