2011-04-28 9 views
6

Necesito contar programáticamente los caracteres y/o palabras y/o párrafos que se han aplicado un estilo conocido específico en un documento DOCX.Cuenta programáticamente número de caracteres/palabras/párrafos con un estilo específico en un documento DOCX

Necesito saber 1) si esto es posible y 2) cualquier pista sobre dónde puedo empezar a resolver este problema.

Estoy familiarizado con la navegación DOM, XPath/XQuery, y puedo usar .Net, PHP o Java o cualquier otra herramienta, siempre que pueda resolver este problema.

+1

creo que puede hacerse fácilmente con un poco de automatización OLE (escrito en C# o VB.NET), realmente creo que es sólo una cuestión de lectura de la documentación e ir por ensayo y error (que es siempre así con la automatización de MS OLE). No te sugiero que analices el documento DOCX por ti mismo, incluso si es XML, es un formato de documento muy complicado y puedes escribir fácilmente algún código no robusto – gd1

+0

¡Excelente sugerencia, investigaré esa opción! Por favor, agregue su comentario como respuesta para que pueda acreditarlo si esto funciona :) – andrerav

+1

¿Es esto un script único o algo que va a ir a una aplicación de producción compatible? Si es lo último, recomendaría al menos investigar el uso del OOXML SDK oficial (que desafortunadamente solo he usado para .xlsx y no para .docx, así que no puedo decir lo fácil que puede ser esta tarea en particular, pero funciona con .xlsx no fue tan malo después de algunos arañazos iniciales), porque las dependencias de Office pueden ser difíciles de manejar. El SDK no es tan sencillo como la automatización OLE, ya que es una envoltura relativamente delgada sobre el XML, pero aún así es mejor que trabajar directamente con DOM. –

Respuesta

2
Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application(); 
     Microsoft.Office.Interop.Word.Document doc = new Microsoft.Office.Interop.Word.Document(); 

     try 
     { 
      object fileName = @"C:\TT\change.docx"; 
      doc = word.Documents.Open(ref fileName, 
       ref missing, ref missing, ref missing, ref missing, 
       ref missing, ref missing, ref missing, ref missing, 
       ref missing, ref missing, ref missing, ref missing, 
       ref missing, ref missing, ref missing); 

      doc.Activate(); 

      int count = doc.Characters.Count ; 
      int words = doc.Words.Count; ; 
      int paragraphs = doc.Paragraphs.Count; 

      doc.Save(); 

      doc.Close(ref missing, ref missing, ref missing); 
      word.Application.Quit(ref missing, ref missing, ref missing); 
     } 
     catch (Exception ex) 
     { 
      doc.Close(ref missing, ref missing, ref missing); 
      word.Application.Quit(ref missing, ref missing, ref missing); 
     } 
Cuestiones relacionadas