Для работы сериализатора .Net объекты, которые он должен сериализовать, должны иметь тип, помеченный как сериализуемый. В этом случае WorkbookClass не помечается как таковой. Вероятно, вы можете обойти это, либо сделав оболочку для WorkbookClass и внедрив ISerializable, либо вы можете сделать суррогаты форматирования / форматирования, чтобы сделать эту работу за вас. Но любое решение, которое вы принимаете, обречено на провал.
Почему? Прежде всего, внутренняя структура COM-объектов неизвестна, только ее интерфейс. Они в основном неуправляемые. .Net просто помещает хорошую оболочку поверх него. Поэтому, просто записывая все его байты в поток, вы можете (читай: будете) сериализовать неуправляемые указатели. Когда их снова десериализуют, они не будут указывать ни на что, ни на что-то неправильное. И поскольку они неуправляемые, нет никакого способа выяснить, являются ли они указателями (а не данными) или на что они указывают. (Или вам придется очень глубоко копать и выяснять его двоичный формат во время выполнения.) Кроме того, из того, что я помню о офисных COM-объектах, они в основном будут порождать свой собственный офисный процесс и общаться с ним, чтобы вы могли даже оказаться в конечном итоге. сериализация дескриптора процесса. В общем, обречено на провал.
Возможно, WorkbookClass (или его родительский / контейнерный) имеет метод, аналогичный .Save (), вы должны использовать его и использовать FileStream для того места, где вы сохранили данные.