Мой codegolfing коллега придумал этот (ES6), включительно:
(s,f)=>[...Array(f-s+1)].map((e,i)=>i+s)
не включительно:
(s,f)=>[...Array(f-s)].map((e,i)=>i+s)
Определенно более важно правильно обрабатывать выпуски при работе с приложениями Office, чем со многими другими библиотеками COM, по двум причинам.
Для обычных, внутрипроцессных библиотек COM последствия неправильной очистки не столь драматичны. Когда ваш процесс завершается, все внутрипроцессные библиотеки уходят вместе с ним. И если вы забудете вызвать ReleaseComObject для объекта, когда он вам больше не нужен, о нем все равно позаботятся, когда объект будет завершен.
Тем не менее,
COM-объекты по сути являются неуправляемым кодом - и как только вы начинаете вызывать неуправляемый код из управляемого приложения, вы обязаны очистить после этого неуправляемый код.
Короче говоря, шаблон, указанный в приведенном выше сообщении, необходим для всех COM-объектов.