Добавить заголовок к таблице или рисунку в OpenXml

Я пытаюсь создать эту структуру в OpenXml:

<P>
 <Table />
 <Caption>Table 1 - Some Text 1 </Caption>
 <Picture />
 <Caption>Figure 1 - Some Text 2 </Caption>
</P>

С точки зрения кода у меня есть:

var currentLine = new Paragraph();
currentLine.AppendChild(new Run(elem));  -> Where the elem is Table
...
currentLine.AppendChild(new Run(elem2)); -> Where the elem2 is Drawing

Так что мне не хватает только способа добавления подписей, тех же самых подписей, которые я могу сделать в Справочнике MS Word-> Вставить подпись.

Некоторая информация о том, как это сделать, была бы очень признательна.

Руи


person rsantos    schedule 21.03.2013    source источник


Ответы (2)


Используйте это: http://www.microsoft.com/en-us/download/details.aspx?id=5124

(Инструмент повышения производительности) - чтобы проверить текстовый документ и посмотреть, из чего он состоит.

Поместите вот код:

 SimpleField sf = new SimpleField(new Run(new Text("Figure 1")));

Чтобы на самом деле связать что-либо, вам нужно установить свойство instruction sf.

person jn1kk    schedule 21.03.2013
comment
Знаете ли вы, как обновить номера подписей? Нравится номер главы и позиции? В моем случае я создаю что-то вроде таблицы 3.1. Некоторый текст проблема заключается в том, что после добавления всех подписей я хочу обновить все подписи в документе, поэтому таблица 3.1 может быть обновлена ​​​​до 3.3, если есть уже 2 таблицы раньше. . Спасибо - person rsantos; 21.03.2013
comment
Вам нужно использовать Interop для обновления оглавления. stackoverflow.com/questions/3982624/ Interop означает, что вам нужно установить Word.exe на сервер. - person jn1kk; 21.03.2013
comment
На самом деле есть способ сделать это без использования Interop: simpleField2.Dirty = OnOffOnlyValues.FromBoolean(true); -› когда документ Word открыт, пользователь попросит обновить все ссылки, чего я и хотел ;) - person rsantos; 22.03.2013
comment
Ссылка теперь 404. :-( - person james.garriss; 18.06.2021
comment
@James.garriss кажется, что он устарел, основной репозиторий Microsoft GitHub теперь также ссылается на него: github.com/rmboggs /DocxToSource - person jn1kk; 21.06.2021

Вот метод, который я использовал для создания подписей. По сути, создайте SimpleField и добавьте его к абзацу.

public Paragraph CreateCaption( string caption, string name )
        {
            Run run = new Run( new Text() { Text= name + " ", Space = SpaceProcessingModeValues.Preserve } );
            SimpleField simpleField = new SimpleField( new Run( new RunProperties( new NoProof() ), new Text() { Text= " ", Space = SpaceProcessingModeValues.Preserve } ) );
            simpleField.Instruction = @"SEQ " + name;
            Run runLabel = new Run( new Text() { Text= " " + caption, Space = SpaceProcessingModeValues.Preserve } );

            ParagraphProperties captionPr = new ParagraphProperties( new ParagraphStyleId() { Val = "Caption" } );
            Paragraph paragraph = new Paragraph();
            paragraph.ParagraphProperties = captionPr;
            paragraph.Append( run );
            paragraph.Append( simpleField );
            paragraph.Append( runLabel );
            return paragraph;
        }
person Tarveen    schedule 23.12.2014