Files
autodesk/migration/audits/p-rec-bop-plant3d-2019/document-generation-flow.md

2.0 KiB
Raw Permalink Blame History

Формирование Word-документа

ReportWithWorder.OutputReport проверяет .docx-шаблон, создает каталог проекта и имя Ведомость объемов работ (yyyy.MM.dd HH.mm.ss).docx (ReportWithWorder.cs:30-54). Движок по умолчанию — Microsoft Office Interop, но пользователю предлагается переключиться на SautinSoft (ReportWithWorder.cs:54-85).

Worder.Load копирует шаблон в %TEMP% (Worder.cs:305-322). Office-ветка создает Word.Application, открывает временный документ, берет Tables[1], таблицы footer первой и основной страницы, делает Word видимым и меняет View/Selection (Worder.cs:326-355). SautinSoft-ветка загружает DocumentCore и берет первую таблицу и footer-таблицы по индексам (Worder.cs:357-370).

Основные строки результата строятся ReportWithWorder.cs:93-1287: группы PipingElement и сварные стыки превращаются в строки Cells12345TableRow; строки добавляются через Worder.AddNewRowToTable. Worder.cs:588-626 показывает, что Office использует _wordTable.Rows.Add(ref oMissing), а SautinSoft клонирует вторую строку.

Поля обновляются в основном тексте и headers/footers (Worder.cs:742-763), затем документ сохраняется, закрывается и Word завершается (Worder.cs:383-420). Важный риск: COM-объекты не освобождаются через Marshal.FinalReleaseComObject, а Load/SaveAndUnload ловят исключения и продолжают путь копирования (Worder.cs:372-380, 508-519); возможны поврежденный результат и зависший WINWORD.EXE.