diff --git a/src/Html2OpenXml/Expressions/Numbering/HeadingElementExpression.cs b/src/Html2OpenXml/Expressions/Numbering/HeadingElementExpression.cs
index 1039fae8..24b34ad7 100644
--- a/src/Html2OpenXml/Expressions/Numbering/HeadingElementExpression.cs
+++ b/src/Html2OpenXml/Expressions/Numbering/HeadingElementExpression.cs
@@ -40,26 +40,43 @@ public override IEnumerable Interpret (ParsingContext context)
paragraph ??= new(childElements);
paragraph.ParagraphProperties ??= new();
- paragraph.ParagraphProperties.ParagraphStyleId =
- context.DocumentStyle.GetParagraphStyle(context.DocumentStyle.DefaultStyles.HeadingStyle + level);
-
+
var runElement = childElements.FirstOrDefault();
if (runElement != null && context.Converter.SupportsHeadingNumbering && IsNumbering(runElement))
{
- var abstractNumId = GetOrCreateListTemplate(context, HeadingNumberingName);
- var instanceId = GetListInstance(abstractNumId);
- if (!instanceId.HasValue)
+ if (string.Equals(context.DocumentStyle.DefaultStyles.HeadingStyle, context.DocumentStyle.DefaultStyles.NumberedHeadingStyle))
{
- instanceId = IncrementInstanceId(context, abstractNumId);
+ // Only apply the numbering if a custom numbered heading style has not been defined.
+ // If the user defined a custom numbered heading style (with numbering), Word has
+ // the numbering automatically done.
+ // Defining a numbering here messes that up, so we only add the numbering if
+ // a specific numbering heading style has not been provided
+ var abstractNumId = GetOrCreateListTemplate(context, HeadingNumberingName);
+ var instanceId = GetListInstance(abstractNumId);
+
+ if (!instanceId.HasValue)
+ {
+ instanceId = IncrementInstanceId(context, abstractNumId);
+ }
+
+ var numbering = context.MainPart.NumberingDefinitionsPart!.Numbering!;
+ numbering.Append(
+ new NumberingInstance(
+ new AbstractNumId() { Val = abstractNumId }
+ )
+ { NumberID = instanceId });
+ SetNumbering(paragraph, level - '0', instanceId.Value);
}
- var numbering = context.MainPart.NumberingDefinitionsPart!.Numbering!;
- numbering.Append(
- new NumberingInstance(
- new AbstractNumId() { Val = abstractNumId }
- )
- { NumberID = instanceId });
- SetNumbering(paragraph, level - '0', instanceId.Value);
+ // Apply numbered heading style
+ paragraph.ParagraphProperties.ParagraphStyleId =
+ context.DocumentStyle.GetParagraphStyle(context.DocumentStyle.DefaultStyles.NumberedHeadingStyle + level);
+ }
+ else
+ {
+ // Apply normal heading style
+ paragraph.ParagraphProperties.ParagraphStyleId =
+ context.DocumentStyle.GetParagraphStyle(context.DocumentStyle.DefaultStyles.HeadingStyle + level);
}
return [paragraph];
diff --git a/src/Html2OpenXml/Primitives/DefaultStyles.cs b/src/Html2OpenXml/Primitives/DefaultStyles.cs
index 013adb3a..3512e68f 100644
--- a/src/Html2OpenXml/Primitives/DefaultStyles.cs
+++ b/src/Html2OpenXml/Primitives/DefaultStyles.cs
@@ -54,6 +54,13 @@ public class DefaultStyles
/// Heading
public string HeadingStyle { get; set; } = PredefinedStyles.Heading;
+ ///
+ /// Default style for numbered headings
+ /// Appends the level at the end of the style name
+ ///
+ /// Heading
+ public string NumberedHeadingStyle { get; set; } = PredefinedStyles.Heading;
+
///
/// Default style for hyperlinks
///