none
Problema con copiado de documento word a otro RRS feed

  • Pregunta

  • Buenas tardes!

    Quiero copiar un documento en otro pero no lo he logrado, solo me copia el encabezado y si yo mismo hago ctrl+v si que pega el documento (significa que el documento original si se copia el portapapeles pero no se pega completo en el nuevo).

    Ssegun yo todo esta bien, alguien me podria explicar que pasa?

    Uso Office 2013 y Visual Studio 2013

    Dim w As New Word.Application

    'wordf es mi plantilla, el dicumento que voy a pegar varias veces,

    'tiene un bookmark "qr" ahí voy a pegar una imagen eso ya lo esoy haciendo Dim fw As Word.Document = w.Documents.Open(wordf)

    'documento nuevo donde voy a ir pegando las plantillas Dim iw As Word.Document = w.Documents.Add()

    'hago visible a word para ver el proceso en el futuro lo quitaré w.Visible = True

    ' un for de prueba XD For i As Integer = 0 To 1 'selecciono todo el documento fw.Range.WholeStory()

    'copio la seleccion fw.Range.Copy()

    'pego en el documento nuevo

    iw.Range.PasteAndFormat(Word.WdRecoveryType.wdFormatOriginalFormatting)

    'inserto un salto de linea

                iw.Range.InsertBreak(Type:=Word.WdBreakType.wdPageBreak)

    'copio mi imagen en el portapapeles, es un Codigo QR pero puede ser cualqier Image My.Computer.Clipboard.SetImage(qr.imagen("prueba de codigo QR"))

    'pego mi imagen en el bookmark "qr"

    iw.Content.Bookmarks.Item("qr").Range.Paste()

    'elimino el bookmark "qr" para no crear conflictos con el que se va a pegar despues iw.Bookmarks.Item("qr").Delete() next i

    viernes, 25 de julio de 2014 16:17

Respuestas

  • Bueno pues se me prendio el foco, les platico por si a alguien le sirve mi experiencia.

    Termine copiando todo el rango del documento incluido: los margenes del documento y ese salto de linea al final que a veces no queremos (mi caso, prueben en un doc seleccionar un parrafo y veran), y borrandolo a la hora de pagarlo.

    Por que? por que me resulto mas sencillo que copiar los margenes.

    el codigo quedo algo así:

    Dim w As New Word.Application
    Dim o As Word.Document = w.Documents.open( _
    "ruta del doc origen")
    Dim d As Word.Document = w.Documents.Add()
    
    w.Visible = True
    
    for i as integer = 1 to 10 ' es un ejemplo
      o.Range.WholeStory()
      o.Range.Copy()
      
      'para pegarlo al final del documento con formato (y reglas)
      d.Range(d.range().end - 1).PasteAndFormat( _
      Word.WdRecoveryType.wdFormatOriginalFormatting)
    'para borrar ese salto de linea que no quiero
      d.Range(start:=d.Range.end-1, _
      end:=d.Range().end).delete()
    'listo para volver a pegar
    'realizo unos procesos antes de volver a pegar el formato (pego unas imagenes, busco y remplazo algun texto ;-) )
    next i



    lunes, 28 de julio de 2014 21:37

Todas las respuestas

  • Me contesto a mi solito.

    Ya vi cual es el probelma, usaba TODO el rango para incertar el salto de linea y eso sustituye todo lo demas

    iw.Range.InsertBreak(Type:=Word.WdBreakType.wdPageBreak()

    Pero ahora tengo otro detalle, cuando selecciono todo el rango para copiarlo (algo necesario ya que copia incluso los margenes que o modifique) tambien me copia algo que no se como llamarlo pero creo que me entenderan:

    Cundo seleccionas un parrafo entero (y sin mucho cuidado) con el mouse se selecciona un cuadrito al final del parrafo que representa un retorno de carro y hace que al pegar me de un salto de linea que no quiero

    He pensado que la solucion esta en una de dos:

    a) buscar la manera de restringir el copiado hasta la ultima letra del parrafo final pero tambien que copie los margenes

    b) buscarla manera de borrar ese salto de linea que se genera al pegar

    Alguna idea? he probado modificando el rango e insertando el simbolo de retroceso pero no funciona como debe

    Gracias!

    sábado, 26 de julio de 2014 17:09
  • Por favor que alguien me heche una mano!!!!


    Pues intente con la segunda por que se se modificar el rango de copiado, el problema es que no me copia los margenes.

    Investigando un poco descubri que si tengo por ejemplo

    dim w as new word.application
    dim origen as word.document = w.documents.add()
    
    origen.pagesetup.leftMargin 'single

    imagino que es el margen izquierdo pero al hacer esto:

    dim w as new word.application
    dim origen as word.document = w.documents.add()
    dim destino as word.document = w.documents.add()
    
    destino.pageSetup.leftMargin = origen.pageSetup.leftMargin

    no copia el margen del oregen al destino.

    Tambien he descubieto que todos los Range tienen la propiedad PageSetup pero no logro cambiar los margenes.

    Alguna idea? Ayuda please!!




    lunes, 28 de julio de 2014 18:47
  • Bueno pues se me prendio el foco, les platico por si a alguien le sirve mi experiencia.

    Termine copiando todo el rango del documento incluido: los margenes del documento y ese salto de linea al final que a veces no queremos (mi caso, prueben en un doc seleccionar un parrafo y veran), y borrandolo a la hora de pagarlo.

    Por que? por que me resulto mas sencillo que copiar los margenes.

    el codigo quedo algo así:

    Dim w As New Word.Application
    Dim o As Word.Document = w.Documents.open( _
    "ruta del doc origen")
    Dim d As Word.Document = w.Documents.Add()
    
    w.Visible = True
    
    for i as integer = 1 to 10 ' es un ejemplo
      o.Range.WholeStory()
      o.Range.Copy()
      
      'para pegarlo al final del documento con formato (y reglas)
      d.Range(d.range().end - 1).PasteAndFormat( _
      Word.WdRecoveryType.wdFormatOriginalFormatting)
    'para borrar ese salto de linea que no quiero
      d.Range(start:=d.Range.end-1, _
      end:=d.Range().end).delete()
    'listo para volver a pegar
    'realizo unos procesos antes de volver a pegar el formato (pego unas imagenes, busco y remplazo algun texto ;-) )
    next i



    lunes, 28 de julio de 2014 21:37