miércoles, 22 de mayo de 2013

Quitar Tags de MS Word

Hace ya un tiempo estaba actualizando un proyecto y le agregue el control Editor del AjaxControlToolKit 4 y pues la pantalla de captura de texto se miraba bien chida y todo funcionando bien (según las pruebas de funcionamiento) así que se le entrego al usuario, unas semanas después todo iba bien hasta que un cierto día nos llamo el usuario comentando que cuando generaba un reporte el contenido no se mostraba bien por que aparecía demasiado texto que no había incluido y algunos signos raros, por lo que incrédulos a tales explicaciones decidimos mirarlo nosotros mismos, así que pedimos al usuario que nos mostrara lo que había hecho y efectivamente en el reporte salia demasiado texto y unas etiquetas un poco raras <!--[if gte mso 9]><xml> <w:WordDocument> ... por lo que deducimos que al copiar texto formateado de un documento de Word al control Editor agregaba ciertas etiquetas de formateo, por lo que no puede evitar exclamar ¡WTF! y así que de inmediato me puse a analizar como obtener el texto que se ingreso pero que tenia que mantener el formateo, puse manos a la obra e intente  hacerlo desde la Base de Datos con una función pero no trabajo como lo esperaba así que intente haciéndolo por programación y antes de guardar la información pasarla por una función de filtrado de etiquetas MSWord y este fue el resultado:

'Un snippet para quitar el contenido de las Tags MSWord
  Protected Function QuitarTagsMSWord(ByVal CadenaOriginal As String) As String
    Dim CadenaSinEtiquetas As String = String.Empty
    Dim i As Integer = 0
    Dim Inicio As Integer = 0
    Dim Fin As Integer = 0

    Inicio = CadenaOriginal.IndexOf("")

    If Inicio >= 0 And Fin > 0 Then
    CadenaSinEtiquetas = CadenaOriginal.Remove(Inicio, Fin - Inicio + 3)

    For i = 0 To 9
      Inicio = CadenaSinEtiquetas.IndexOf("")
      If Inicio <> -1 And Fin <> -1 Then
        CadenaSinEtiquetas = CadenaSinEtiquetas.Remove(Inicio, Fin - Inicio + 3)
      End If
      Next
    Else
      CadenaSinEtiquetas = CadenaOriginal
    End If

    Return CadenaSinEtiquetas
  End Function


Hay otras funciones que eliminan las etiquetas de word pero que también eliminan el formateo, la función que le dejo tal vez no sea la mejor pero cumple con el objetivo, ademas ya no quise matar mis neuronas para buscar una mejor opción, si les sirve de algo qui les dejo la descarga QuitarTagsMSWord.


Ejemplo de Implementación de la Funcion QuitarTags

No hay comentarios:

Publicar un comentario

Deja tu Comentario