TL;DR:
How can I capture the paragraph numbering as a 'part' of the text and export it to a DOCX?
Problem
I have a document that's split into sections and sub-sections that reads similarly to a set of state statutes (Statute 208
, with subsections Statute 208.1
, Statute 208.2
, etc.). We created this by modifying the numbering.xml
file within the .docx zip.
I want to export a 'sub-section' (208.5
) and its text to a separate .docx file. My VSTO add-in exports the text well enough, but the numbering resets to 208.1
. This does make some sense as it's now the first paragraph with that <ilvl>
in the document.
PDF works okay
Funnily enough, I'm able to call Word.Range
's ExportAsFixedFormat
function and export this selection to PDF just fine - even retaining the numbering. This led me down a path of trying to 'render' the selection, possibly as it would be printed, in order to throw it into a new .docx file, but I haven't figured that out, either.
What I've tried:
Range.ExportFragment()
using bothwdFormatStrictOpenXMLDocument
andwdFormatDocumentDefault
as thewdSaveType
values.- These export but also reset the numbering.
Document.PrintOut()
usingPrintToFile = true
and a valid filename. I realize now that this, quite literally, generates 'printout instructions' and won't inject a new file at pathfilename
with any valid file structure.- Plainly doesn't work. :)
Application.Selection.XML
to a variablecontent
and callingDocument.Content.InsertXML(content)
on a newly added Document object.- Still resets the numbering.
Code Section for Context
using Word = Microsoft.Office.Interop.Word;
Word.Range range = Application.ActiveDocument.Range(startPosition, endPosition);
range.Select();
//export to DOCX?
Application.Selection.Range.ExportFragment(
filename, Word.WdSaveFormat.wdFormatDocumentDefault);
ListLevelNumber
is1
, and I think that's because it's a top-level 'section' (domain term).. however, I do seeListString
underListLevelNumber
as well, and that's got the208.5
that I'm talking about.. Maybe when I export that content, I can set theListLevelString
after the fact.. giving that a shot. – ebwbListValue
, representing the 'index' of the List object within the list.. that would have worked too, but it only has a getter - no setter. Next, I found theListFormat.ConvertNumbersToText()
method. That worked!! ... but, I haven't yet found how to un-convert the original text.. – ebwb