OpenXML Добавить стиль абзаца (Заголовок1, Заголовок2, Заголовок 3 и т. д.) в текстовый документ

Может ли кто-нибудь подсказать мне, как добавить предопределенные стили в абзац с помощью Open XML Word Processing? Я пробовал различные решения, доступные на форумах, но ничего не работает для меня. Вот чего я хочу добиться:

// Create a document by supplying the filepath. 
WordprocessingDocument wordDocument = WordprocessingDocument.Create("E:/Test/Executive.Docx", WordprocessingDocumentType.Document);

// Add a main document part. 
MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();

// Create the document structure and add some text.
mainPart.Document = new Document();
Body body = mainPart.Document.AppendChild(new Body());
Paragraph para = body.AppendChild(new Paragraph());
   
Run run = para.AppendChild(new Run());
run.AppendChild(new Text("Executive Summary"));
if (para.Elements<ParagraphProperties>().Count() == 0)
    para.PrependChild<ParagraphProperties>(new ParagraphProperties());

// Get the ParagraphProperties element of the paragraph.
ParagraphProperties pPr = para.Elements<ParagraphProperties>().First();

// Set the value of ParagraphStyleId to "Heading3".
pPr.ParagraphStyleId = new ParagraphStyleId() { Val = "Heading1" };

person Nabeel    schedule 29.07.2013    source источник


Ответы (2)


Ваша техника полностью сработает, если вы редактируете существующий документ. Проблема в том, что новый документ не имеет предопределенного «Заголовка 1». Вы должны были бы добавить это. Итак, у вас есть два варианта:

<сильный>1. Работа с существующим шаблоном документа

Создайте шаблон документа (TemplatePath) для использования в качестве основы. В коде скопируйте его в конечный пункт назначения (FinalPath) и добавьте к нему текст/что угодно, применяя стили. Заголовок 1 уже будет в шаблоне.

if (File.Exists(FinalPath))
  File.Delete(FinalPath);
File.Copy(TemplatePath, FinalPath);
WordprocessingDocument wordDocument = WordprocessingDocument.Open(FinalPath, true);
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text("Executive Summary"));
para.ParagraphProperties = new ParagraphProperties(new ParagraphStyleId() { Val="Heading1" });

<сильный>2. Создайте новый документ с нуля

Если вы сделаете это, у него не будет встроенных стилей. Итак, создайте стиль, назовите его «Заголовок 1» и примените его к абзацу.

WordprocessingDocument wordDocument = WordprocessingDocument.Create(FinalPath, WordprocessingDocumentType.Document);
MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
mainPart.Document = new Document();
Body body = mainPart.Document.AppendChild(new Body());
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text("Executive Summary"));
StyleDefinitionPart styleDefinitionsPart = wordDocument.AddStylesDefinitionPart();
Styles styles = styleDefinitionsPart.Styles;
Style style = new Style() {
  Type = StyleValues.Paragraph, 
  StyleId = styleid, 
  CustomStyle = true
};
StyleName styleName1 = new StyleName() { Val = "Heading1" };
style.Append(styleName1);
StyleRunProperties styleRunProperties1 = new StyleRunProperties();
styleRunProperties1.Append(new Bold);
styleRunProperties1.Append(new Italic());
styleRunProperties1.Append(new RunFonts() { Ascii = "Lucida Console" };);
styleRunProperties1.Append(new FontSize() { Val = "24" });  // Sizes are in half-points. Oy!
style.Append(styleRunProperties1);
styles.Append(style);
pPr.ParagraphStyleId = new ParagraphStyleId(){ Val = "Heading1" };
para.PrependChild<ParagraphProperties>(new ParagraphProperties());

‹сарказм›Видите? OpenXML — пустяк!‹/сарказм› Клянусь, мои глаза так сильно закатываются, что у меня начинает болеть голова.

person Rap    schedule 25.11.2013
comment
StyleDefinitionPart должен быть StyleDefinitionsPart - person Nagaraj Raveendran; 24.08.2016
comment
что такое стилид? pPr также не инициализирован. Это плохой ответ. - person Eedz; 04.06.2020

Я думаю, что имена стилей зависят от вашего языка Microsoft Office, например:

Заголовок 1

in English is: "Heading 1"
in Hungarien is: "Címsor 1"  -> style id: "Cmsor1"

Заглянув в XML-файл стиля документа Word, вы сможете найти вышеуказанную информацию.

Шаги:

  1. Переименуйте любой текстовый документ, например. образец.docx в образец.zip
  2. Откройте образец.zip.
  3. Откройте папку Word в zip-архиве.
  4. Откройте файл style.xml.
  5. Найдите имя стиля или свойства того, что вы ищете.

Иерархия стилей очень важна.

person alfred06sas    schedule 11.09.2014