COM - это счетчик ссылок. Система отслеживает каждый раз, когда вы используете вещи, поэтому вы должны очистить эти ссылки перед выходом следующим образом:
Marshal.ReleaseComObject(myVaraible);
Вероятно, вам не нужны WaitForPendingFinalizers, и даже GC.Collect является дорогим вызовом, который не требуется, если вы отпускаете каждый com-объект, используя приведенный выше код, чтобы уменьшить количество ссылок.
Также я не уверен, используете ли вы основные сборки взаимодействия, но вам нужно убедиться, что вы используете правильную их версию для версии Excel, на которую вы нацеливаетесь, или вы можете получить ошибки, например ту, с которой вы столкнулись.