2010-09-12 21 views
5

Tengo una gran cantidad de documentos de Word que debo analizar. Como todos fueron creados a partir de la misma plantilla, creo que el mejor enfoque sería guardarlos como archivos HTML y analizar el propio HTML.Guardar varios documentos de Word como HTML a través de la API de Office

Si bien es bastante fácil guardar un solo documento de Word como HTML, no he encontrado una manera de hacer un procedimiento masivo desde Word. Por lo tanto, estoy tratando de encontrar una forma de aprovechar la API de Microsoft Office/Word para lograr esto.

¿Cómo puedo usar la API de Word para guardar muchos documentos de Word como HTML?

Gracias de antemano.

ACTUALIZACIÓN: algunos detalles más ...

Algunos de los documentos son de extensión .doc, mientras que otros son .docx. Espero que esto no sea un problema, pero si lo es, tendré que convertirlos todos a .docx, con suerte con la API o con DocX.

Hablando de DOCX, me saw on the author's blog que es posible guardar un archivo .docx como HTML con el siguiente código:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Word = Microsoft.Office.Interop.Word; 
using Microsoft.Office.Interop.Word; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // Convert Input.docx into Output.doc 
      Convert(@"C:\users\cathal\Desktop\Input.docx", @"c:\users\cathal\Desktop\Output.doc", WdSaveFormat.wdFormatDocument); 

      /* 
      * Convert Input.docx into Output.pdf 
      * Please note: You must have the Microsoft Office 2007 Add-in: Microsoft Save as PDF or XPS installed 
      * http://www.microsoft.com/downloads/details.aspx?FamilyId=4D951911-3E7E-4AE6-B059-A2E79ED87041&displaylang=en 
      */ 
      Convert(@"c:\users\cathal\Desktop\Input.docx", @"c:\users\cathal\Desktop\Output.pdf", WdSaveFormat.wdFormatPDF); 

      // Convert Input.docx into Output.html 
      Convert(@"c:\users\cathal\Desktop\Input.docx", @"c:\users\cathal\Desktop\Output.html", WdSaveFormat.wdFormatHTML); 
     } 

     // Convert a Word 2008 .docx to Word 2003 .doc 
     public static void Convert(string input, string output, WdSaveFormat format) 
     { 
      // Create an instance of Word.exe 
      Word._Application oWord = new Word.Application(); 

      // Make this instance of word invisible (Can still see it in the taskmgr). 
      oWord.Visible = false; 

      // Interop requires objects. 
      object oMissing = System.Reflection.Missing.Value; 
      object isVisible = true; 
      object readOnly = false; 
      object oInput = input; 
      object oOutput = output; 
      object oFormat = format; 

      // Load a document into our instance of word.exe 
      Word._Document oDoc = oWord.Documents.Open(ref oInput, ref oMissing, ref readOnly, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref isVisible, ref oMissing, ref oMissing, ref oMissing, ref oMissing); 

      // Make this document the active document. 
      oDoc.Activate(); 

      // Save this document in Word 2003 format. 
      oDoc.SaveAs(ref oOutput, ref oFormat, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); 

      // Always close Word.exe. 
      oWord.Quit(ref oMissing, ref oMissing, ref oMissing); 
     } 
    } 
} 

¿Es esta la mejor manera de hacerlo?

Respuesta

4

El código que ha publicado anteriormente debería hacer el trabajo por usted. También, por lo que sé, Document.SaveAs Api puede convertir cualquier documento (docx, doc, rtf) que se pueda abrir en Word a HTML (o cualquier otro formato)

también en lugar de crear una instancia de aplicación de palabra para cada archivo pase la cadena [] de nombres a la API de conversión y solo elimine la instancia del documento una vez que haya terminado con guardar como

+0

De acuerdo, esta es la manera de hacerlo y el punto de Vinay sobre crear solo una instancia es perfecto. –

Cuestiones relacionadas