Trabajar con documentos de Word con VB.Net

Te agradecería tu ayuda sin darte mucho quebradero de cabeza con esta pregunta, ya que me lleva loco toda la semana y no encuentro solución.
Te cuento...
Hasta ahora he hecho algún que otro programa simple con VB 6.0 pero me he visto en la obligación de actualizarme a VB.net, confiando en que será mucho mejor y más productivo, pero me estoy llevando muchas desilusiones puesto que para hacer cualquier cosa que en VB me funcionaba perfectamente, en Net, surgen problemas por todos sitios, por ejemplo, te cuento lo que estoy intentando y el código que utilizo (resumido para que no te sea muy lioso).
Mi intención es abrir un documento de Microsoft Word 2007 guardado en el directorio de la aplicación y cuando ya consigo después de utilizar de por lo menos 5 formas diferentes el código, el único que me abre el documento y me ingresa los datos es éste:
Imports Microsoft. Office. Interop
Private Sub btnCrearDi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCrearDi.Click
' Abrir un documento de Word e introducir texto en un marcador.
Dim AppWord As Word.Application
Dim sRutaDoc As String
Dim sSalvaDoc As String
Cursor = System.Windows.Forms.Cursors.WaitCursor
btnCrearDiligencias.Enabled = False
Application.DoEvents()
sRutaDoc = Application.StartupPath & "\Documentos\Doc1.doc"
AppWord = New Word.Application()
AppWord.Documents.Open(sRutaDoc)
sSalvaDoc = Application.StartupPath & "\Documentos\DocGuardado1.doc"
' Guardamos el documento y es aquí donde me da el error: "No se encuentra el miembro 'público 'SaveAs' 'en el tipo 'ApplicationClass'.
AppWord.SaveAs(FileName:=sSalvaDoc)
'marcadores para isertar texto
AppWord.Selection.GoTo(What:=Word.WdGoToItem.wdGoToBookmark, Name:="MarcadorNúmero")
AppWord.Selection.TypeText(Text:=TxtNúmero.Text)
AppWord.Visible = True
Cursor = System.Windows.Forms.Cursors.Default
btnCrearDiligencias.Enabled = True
AppWord. Documents. Save()
'AppWord. Close()
' Cerramos Word
'AppWord. Quit()
' Liberamos los recursos
'AppWord = Nothing
End Sub
Se supone que SaveAs es un miembro de Microsoft Word y éste está ya referenciado y en concreto la versión 12 (Word 2007), por lo que no comprendo el mensaje: "No se encuentra el miembro 'público 'SaveAs' 'en el tipo 'ApplicationClass'.
¿Tengo qué agregar otra referencia?... ¿Conoces otro método para grabar los documentos en un directorio?...
Bueno, te agradecería que me eches una mano por lo menos para averiguar por que surge este problema..

1 respuesta

Respuesta
1
Tu problema, es por que el en efecto el SaveAs no es un método directo de la clase word.aplication, sino de word.document
De forma que tu código debe tener la siguiente forma
Dim WordApp as word.application
Dim WordDoc as word.Document
Set WordApp = new Word.Application
Set WordDoc = WordApp.Documents.Open(sNombreDeTuFichero)
WordDoc.SaveAs sNombreDeTuNuevoFichero
'O bien si lo quieres guardar con otro formato html por ejemplo
WordDoc. SaveAs sNombreDeTuNuevoFichero, Word. WdSaveFormat. WdFormatHTML
WordDoc. Close
Básicamente es eso..
Espero no se me haya ido algún error de sintaxis..
Pero de eso se encargará el .net :)..
He hecho varias pruebas con otros métodos como estos:
"AppWord.Documents.Save(sSalvaDoc)" y en éste caso sale este otro error.
A la variable sSalvaDoc le doy este valor:
sSalvaDoc = Application.StartupPath & "\ACCIDENTE1.doc"
Dicho error lo he consultado y me dice que cuando una llamada al método COM devuelve un resultado HRESULT desconocido, se produce una excepción COMException.
Algo tengo que estar haciendo mal, pero con las combinaciones que he hecho no he podido sacar nada en claro.
Por fin me funciona... muchísimas gracias...
Si te digo la verdad, habré hecho mil cambios, incluyendo el objeto Word.Document, pero cuando no daba un problema daba otro, ya sea por no referenciar o por no aplicar correctamente los objetos y llamarlos adecuadamente, al final, era algo tan sencillo como esto, pero que me ha traído de cabeza.
Muchísimas gracias por tu ayuda y no descarto solicitar tu colaboración más adelante...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas