OpenXML SDK (Word) — изменение размера шрифта абзаца, следующего за последней таблицей в документе.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 OpenXML SDK (Word) — изменение размера шрифта абзаца, следующего за последней таблицей в документе.

Сообщение Anonymous »

В Word есть раздражающая особенность: абзац помещается после каждой таблицы, содержащей информацию о форматировании этой таблицы.
Если ваша таблица находится в конце страницы, этот абзац может оказаться на следующей странице создаем пустую/пустую страницу.
Я знаю, что есть обходной путь, установив очень маленький шрифт для этого абзаца. (например, 1 балл), однако я могу заставить это работать только при редактировании документ через Word после создания документа. Попытка изменить размер шрифта этого абзаца программным способом с помощью OpenXML не дает ожидаемых результатов.
Обходной путь вручную неприемлем для моего клиента. Есть ли способ это исправить?
Вот что я пробовал:
1. Удаление последнего абзаца:
  • Ожидание: пустая страница будет удалена.
  • Реальность: файл поврежден.
  • Это имеет смысл, поскольку этот абзац необходим для форматирования информации в таблице.
2 . Захват всех RunProperties последнего абзаца, удаление всех экземпляров FontSize и добавление новых экземпляров FontSize.

Код: Выделить всё

OpenXML.Table lastTable = oNewReportDoc.MainDocumentPart.Document.Body
.Descendants()
.Last();

OpenXML.Paragraph paraToEdit = lastTable.NextSibling();

List runProps = paraToEdit.Descendants().ToList();

foreach (RunProperties rp in runProps)
{
rp.RemoveAllChildren();
rp.AddChild(new FontSize() { Val = "1" });
}
При трассировке через отладчик вот как выглядит InnerXML paraToEdit перед циклом
paraToEdit. ВнутреннийXML:

Код: Выделить всё




 // Font Size





 // Font Size



и теперь после цикла
paraToEdit.InnerXML:

Код: Выделить всё




 // Unchanged font size





 // Changed font size



Как видите, здесь есть 2 экземпляра RunProperties (w:rPr), поэтому мой следующий подход пытается получить первый RunProperties, расположенный внутри ParagraphProperties (w:pPr)
p>
3. (Попытка) дополнительно получить RunProperties из ParagraphProperties

Код: Выделить всё

OpenXML.Table lastTable = oNewReportDoc.MainDocumentPart.Document.Body
.Descendants()
.Last();

OpenXML.Paragraph paraToEdit = lastTable.NextSibling();

List runProps = paraToEdit.Descendants().ToList();

List
 paraProps = paraToEdit.Descendants().ToList();

foreach(ParagraphProperties pp in paraProps)
{
// I also tried using Descendents here, but both return null
RunProperties addRunProps = pp.GetFirstChild();

runProps.Add(addRunProps); // Nothing gets added
}

foreach (RunProperties rp in runProps)
{
rp.RemoveAllChildren();
rp.AddChild(new FontSize() { Val = "1" });
}
Сможет ли кто-нибудь подсказать мне, куда двигаться дальше?


Подробнее здесь: https://stackoverflow.com/questions/793 ... in-documen
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»