Question

Je veux extraire des informations de balles présentes dans le document de mot. Je veux quelque chose comme ceci: Supposons que le texte ci-dessous, figure dans le document de mot:

Les étapes pour démarrer la voiture:

  • Ouvrir la porte
  • Installez-vous à l'intérieur
  • Fermer la porte
  • Insérer la clé
  • etc.

Je veux que mon fichier texte comme ci-dessous:

Les étapes pour démarrer la voiture:

Ouvrir la porte

Sit intérieur

Fermer la porte

Insérer la clé

etc.

J'utilise le langage C # pour le faire.

Je peux extraire les paragraphes de document Word et directement les écrire dans un fichier texte avec des informations de mise en forme comme si le texte est en gras ou en italique, etc., mais ne sais pas comment extraire ces informations de balle.

Quelqu'un peut-il s'il vous plaît me dire comment faire?

Merci d'avance

Était-ce utile?

La solution 3

Je suis la réponse .....

D'abord, je convertissait doc sur la base du paragraphe. Mais au lieu de cela, si nous traitons phrase de fichier doc par base de la phrase, il est possible de déterminer si cette phrase contient des balles ou tout type de forme ou si cette phrase fait partie du tableau. Donc, une fois que nous obtenons cette information, nous pouvons convertir cette phrase appropriée. Si quelqu'un a besoin de code source, je peux partager.

Autres conseils

Vous pouvez le faire en lisant chaque phrase. doc.Sentences est un tableau d'objet Range. Ainsi, vous pouvez obtenir un même objet Range de paragraphe.

        foreach (Paragraph para in oDoc.Paragraphs)
        {
            string paraNumber = para.Range.ListFormat.ListLevelNumber.ToString();
            string bulletStr = para.Range.ListFormat.ListString;
            MessageBox.Show(paraNumber + "\t" + bulletStr + "\t" + para.Range.Text);
        }

Dans paraNumber vous pouvez obtenir le niveau de paragraphe et dans buttetStr vous pouvez obtenir balle sous forme de chaîne.

J'utilise ce outil OpenXMLPower par Eric White. Est gratuit et disponible au package NuGet. vous pouvez l'installer à partir de gestionnaire de package Visual Studio. entrer la description d'image ici

Il a fourni un prêt à l'emploi extrait de code. Cet outil m'a sauvé de nombreuses heures. Ci-dessous la façon dont je l'ai personnalisé extrait de code à utiliser pour mon exigence. Enfait vous pouvez utiliser ces méthodes comme dans votre projet.

 private static WordprocessingDocument _wordDocument;
 private StringBuilder textItemSB = new StringBuilder();
 private List<string> textItemList = new List<string>();


/// Open word document using office SDK and reads all contents from body of document
/// </summary>
/// <param name="filepath">path of file to be processed</param>
/// <returns>List of paragraphs with their text contents</returns>
private void GetDocumentBodyContents()
{
    string modifiedString = string.Empty;
    List<string> allList = new List<string>();
    List<string> allListText = new List<string>();

    try
    {
_wordDocument = WordprocessingDocument.Open(wordFileStream, false);
        //RevisionAccepter.AcceptRevisions(_wordDocument);
        XElement root = _wordDocument.MainDocumentPart.GetXDocument().Root;
        XElement body = root.LogicalChildrenContent().First();
        OutputBlockLevelContent(_wordDocument, body);
    }
    catch (Exception ex)
    {
        logger.Error("ERROR in GetDocumentBodyContents:" + ex.Message.ToString());
    }
}


// This is recursive method. At each iteration it tries to fetch listitem and Text item. Once you have these items in hand 
// You can manipulate and create your own collection.
private void OutputBlockLevelContent(WordprocessingDocument wordDoc, XElement blockLevelContentContainer)
{
    try
    {
        string listItem = string.Empty, itemText = string.Empty, numberText = string.Empty;
        foreach (XElement blockLevelContentElement in
            blockLevelContentContainer.LogicalChildrenContent())
        {
            if (blockLevelContentElement.Name == W.p)
            {
                listItem = ListItemRetriever.RetrieveListItem(wordDoc, blockLevelContentElement);
                itemText = blockLevelContentElement
                    .LogicalChildrenContent(W.r)
                    .LogicalChildrenContent(W.t)
                    .Select(t => (string)t)
                    .StringConcatenate();
                if (itemText.Trim().Length > 0)
                {
                    if (null == listItem)
                    {
                        // Add html break tag 
                        textItemSB.Append( itemText + "<br/>");
                    }
                    else
                    {
                        //if listItem == "" bullet character, replace it with equivalent html encoded character                                   
                        textItemSB.Append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + (listItem == "" ? "&bull;" : listItem) + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + itemText + "<br/>");
                    }
                }
                else if (null != listItem)
                {
                    //If bullet character is found, replace it with equivalent html encoded character  
                    textItemSB.Append(listItem == "" ? "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&bull;" : listItem);
                }
                else
                    textItemSB.Append("<blank>");
                continue;
            }
            // If element is not a paragraph, it must be a table.

            foreach (var row in blockLevelContentElement.LogicalChildrenContent())
            {                        
                foreach (var cell in row.LogicalChildrenContent())
                {                            
                    // Cells are a block-level content container, so can call this method recursively.
                    OutputBlockLevelContent(wordDoc, cell);
                }
            }
        }
        if (textItemSB.Length > 0)
        {
            textItemList.Add(textItemSB.ToString());
            textItemSB.Clear();
        }
    }
    catch (Exception ex)
    {
        .....
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top