#vb.net #openxml-sdk
#vb.net #openxml-sdk
Вопрос:
Я пытаюсь удалить пустые абзацы из файла .docx перед преобразованием содержимого в xml. Как бы мне этого добиться?
Protected Sub removeEmptyParagraphs(ByRef body As DocumentFormat.OpenXml.Wordprocessing.Body)
Dim colP As IEnumerable(Of Paragraph) = body.Descendants(Of Paragraph)()
Dim count As Integer = colP.Count
For Each p As Paragraph In colP
If (p.InnerText.Trim() = String.Empty) Then
body.RemoveChild(Of Paragraph)(p)
End If
Next
End Sub
Ответ №1:
Проблема, с которой вы можете столкнуться, заключается в удалении элементов из списка в a для каждого блока. Вы могли бы попробовать использовать linq и метод removeAll:
Protected Sub removeEmptyParagraphs(ByRef body As DocumentFormat.OpenXml.Wordprocessing.Body)
Dim colP As IEnumerable(Of Paragraph) = body.Descendants(Of Paragraph)()
colP.RemoveAll(Function(para) para.InnerText.Trim() = String.Empty)
End Sub
Ответ №2:
Это поможет удалить пустое пространство для абзаца и даже для пустых страниц.
IEnumerable<Paragraph> paragraphs =
myDoc.MainDocumentPart.Document.Body.Elements<Paragraph>();
foreach (Paragraph paragraph in paragraphs)
{
if (paragraph != null amp;amp; string.IsNullOrWhiteSpace(paragraph.InnerText))
{
paragraph.ParagraphProperties = new ParagraphProperties(
new ParagraphStyleId() { Val = "No Spacing" },
new SpacingBetweenLines() { After = "0" }
);
paragraph.ParagraphProperties.SpacingBetweenLines.AfterLines = 0;
paragraph.ParagraphProperties.SpacingBetweenLines.BeforeLines = 0;
paragraph.ParagraphProperties.SpacingBetweenLines.Line = "0";
}
}
Комментарии:
1. Отредактируйте свой ответ, чтобы включить VB.NET версия может быть полезной, тем более что вопрос помечен VB.NET .