ebwb
ebwb

Reputation: 264

How can I export a piece of a DOCX file and keep the same paragraph numbering?

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:


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);

Upvotes: 1

Views: 633

Answers (2)

macropod
macropod

Reputation: 13505

You could use ConvertNumbersToText(wdNumberAllNumbers) before exporting, then _Document.Undo() or close without saving after the export.

Upvotes: 1

Jazimov
Jazimov

Reputation: 13292

There is some good information at this (dated) link that still should work with current Word APIs: https://forums.windowssecrets.com/showthread.php/27711-Determining-which-ListTemplates-item-is-in-use-(VBA-Word-2000)

Information at that link suggests that you can create a name/handle for your ListTemplate so that you can reference it in code--as long as your statute-style bullets are associated with a named style for the document. The idea is to first name the ListTemplate that's associated with the statute bullet style for the active document and then reference that name when accessing the ListLevels collection.

For instance, you could have code that looks something like this:

ActiveDocument.Styles("StatutesBulletStyle").ListTemplate.Name = "StatuteBulletListTemplate";

After the above assignment, you can refer to the template by name:

ActiveDocument.ListTemplates("StatuteBulletListTemplate").ListLevels(1).StartAt = 5;

Using the above technique no longer requires that you try to figure out what the active template is...

Does that help?

Upvotes: 1

Related Questions