Why does the para.ListLabel.LabelString is empty for some Numberedlist items, but we will be seeing the Numberedlist number when we open and check in word document

Hi,
I am trying to pull all the list items using below code -

var listItemParas = paragraphs.Where(p => p.ListFormat.IsListItem);

I see some of the list items don’t have label string but it exist when i open word document. Could you please let me know why this is empty when i use this code - listitempara.ListLabel.LabelString for some list items. Is there any other way to pull the list label string for the ones i am seeing using above code?

Thanks

@KCSR

The issue you’re encountering, where para.ListLabel.LabelString is empty for some numbered list items, can occur due to several reasons related to how lists are structured and formatted in the document.

  1. List Formatting: Ensure that the list items are properly formatted as part of a list. If the list item is not correctly associated with a list, it may not have a label string. You can check if the list is correctly applied to the paragraph.

  2. List Levels: Each list item can belong to a specific level of the list. If the level is not set correctly, it might not generate a label string. Make sure that you are setting the correct list level for each item.

  3. Document Compliance: The way lists are handled can vary based on the document compliance settings. If the document is saved with a compliance level that does not support certain features, it may affect how list labels are generated. You might want to check the compliance settings when saving the document.

  4. Accessing List Labels: If you are still unable to retrieve the label string, consider using the ListFormat property to access the list directly and check its properties. You can also try iterating through the list levels to see if the label is defined at a different level.

Here’s a code snippet that demonstrates how to access the list label strings for all list items:

foreach (Paragraph para in paragraphs)
{
    if (para.ListFormat.IsListItem)
    {
        string labelString = para.ListLabel.LabelString;
        if (string.IsNullOrEmpty(labelString))
        {
            // Handle the case where the label string is empty
            Console.WriteLine("Label string is empty for this list item.");
        }
        else
        {
            Console.WriteLine($"List Item: {labelString}");
        }
    }
}

This code checks each paragraph to see if it is part of a list and retrieves the label string. If the label string is empty, you can implement additional logic to handle that case.

If you continue to experience issues, consider reviewing the structure of your document and the specific properties of the list items to ensure they are set up correctly.

@KCSR To access list labels you should first call Document.UpdateListLabels.

Document doc = new Document(@"C:\Temp\in.docx");
doc.UpdateListLabels();
foreach (Paragraph p in doc.FirstSection.Body.Paragraphs)
{
    if (p.IsListItem)
        Console.WriteLine(p.ListLabel.LabelString);
}

Hi Alexy,
I am doing this. still I am unable to see the label string of some list labels. Any reasons why I am not able to see it?
Does it depends on how the numbered list is created in the document?
Thanks.

@KCSR Could you please attach the problematic document here for testing? We will check the issue and provide you more information.

Hi Alexey,

Please find attached the test document and screenshot below.

NumeredListTest.docx (16.1 KB)

Thanks

@KCSR The problem occurs because the paragraph is under insert revision. You should either accept revisions in your document or specify RevisionsView.Final:

Document doc = new Document(@"C:\Temp\in.docx");
//doc.AcceptAllRevisions();
doc.RevisionsView = RevisionsView.Final;
doc.UpdateListLabels();
foreach (Paragraph p in doc.FirstSection.Body.Paragraphs)
{
    if (p.IsListItem)
        Console.WriteLine(p.ListLabel.LabelString);
}
1 Like

Thanks Alexey!

1 Like