[RESUELTO]Macro leer documentos odt y guardar como texto

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...

[RESUELTO]Macro leer documentos odt y guardar como texto

Notapor albfernan » Mar Sep 05, 2017 1:53 pm

Tengo una macro en Microsoft Word que lee todos los documentos de una carpeta y los guarda en otra carpeta como documentos de texto (txt), la macro se ejecuta sola al abrirla. Quiero hacer lo mismo en LibreOffice Writer pero no veo la forma, y por mas que busco no encuentro nada. ¿Alguien sabe si es posible hacerlo?
Última edición por albfernan el Vie Sep 08, 2017 8:10 am, editado 1 vez en total
lo 5.3.0.3 | win 7
albfernan
 
Mensajes: 23
Registrado: Mar Sep 05, 2017 1:21 pm

Re: Macro leer documentos odt y guardar como texto

Notapor fornelasa » Mar Sep 05, 2017 10:22 pm

Considero que si es posible hacerlo. ¿Podrías subir a este foro tu macro de Word?
Saludos, Federico.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3234
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macro leer documentos odt y guardar como texto

Notapor arivas_2005 » Mar Sep 05, 2017 11:27 pm

Saludos.
Hace algun tiempo necesité de transformar muchísimos archivos .docx y .odt a texto plano
la referencia esta en este link
https://forum.openoffice.org/es/forum/viewtopic.php?f=50&t=12954&sid=0ca9f87befac80b75a794a2d264497d4

La tarea fue realizada por linea de comando, usando lo siguiente:
en linux
Código: Seleccionar todo   Expandir vistaContraer vista
/opt/libreoffice4.4/program/soffice --headless --convert-to txt:Text iglesia.odt

en windows
Código: Seleccionar todo   Expandir vistaContraer vista
"c:\program files\libreoffice 4\program\soffice" --headless --convert-to txt:Text D:\iglesia.docx

(ojo con la D:\ mayúscula, ya que los nombres de archivos, son sensibles a mayúsculas)
con ambas extensiones se obtiene igual resultado. Es decir, transforma por igual los dos tipos de archivo.
Libreoffice 4.7
Puppy slacko 6 y windows 7
arivas_2005
 
Mensajes: 144
Registrado: Mié Nov 16, 2011 6:01 pm

Re: Macro leer documentos odt y guardar como texto

Notapor mauricio » Mié Sep 06, 2017 2:02 am

Con EasyMacro es trivial: https://forum.openoffice.org/es/forum/v ... 50&t=13062
Código: Seleccionar todo   Expandir vistaContraer vista
def exportar_txt():
    app = LIBO()

    path = app.get_folder()
    files = app.get_files(path, 'odt')
    for f in files:
        print ('Exportando: {}'.format(f))
        doc = app.open(f, {'Hidden': True})
        path = app.replace_ext(doc.path, 'txt')
        doc.save(path, {'FilterName': 'Text'})
        print ('\tDocumento exportado: {}'.format(path))
        doc.close()
    print ('Exportación terminada...')
    return

Código: Seleccionar todo   Expandir vistaContraer vista
└──> soffice --calc
Exportando: /home/mau/test/writer3.odt
   Documento exportado: /home/mau/test/writer3.txt
Exportando: /home/mau/test/writer1.odt
   Documento exportado: /home/mau/test/writer1.txt
Exportando: /home/mau/test/writer2.odt
   Documento exportado: /home/mau/test/writer2.txt
Exportación terminada...

Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Avatar de Usuario
mauricio
 
Mensajes: 5929
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Macro leer documentos odt y guardar como texto

Notapor albfernan » Mié Sep 06, 2017 11:08 am

fornelasa escribió:Considero que si es posible hacerlo. ¿Podrías subir a este foro tu macro de Word?
Saludos, Federico.


copio las macros completas del documento, la ruta está puesta absoluta y la tengo que cambiar a relativa, pero eso es lo de menos.

Sub AutoOpen()
Dim nombreFichero As String

Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "C:\CARTAS\entrada_word"

Set objFolder = objFSO.GetFolder(objStartFolder)

Set colFiles = objFolder.Files
For Each objFile In colFiles
'Wscript.Echo objFile.Name
nombreFichero = objFile.Name
If (nombreFichero <> "Thumbs.db") Then
Call DocumentoAFicheros(nombreFichero)
End If
Next

ActiveWindow.Close
End Sub

Sub DocumentoAFicheros(nombreFichero)
'DOC
If Mid(nombreFichero, Len(nombreFichero) - 3, 4) = ".doc" Then
nombreFichero_txt = Replace(nombreFichero, ".doc", ".txt")
End If
If Mid(nombreFichero, Len(nombreFichero) - 3, 4) = ".DOC" Then
nombreFichero_txt = Replace(nombreFichero, ".DOC", ".txt")
End If
'DOCX
If Mid(nombreFichero, Len(nombreFichero) - 4, 5) = ".docx" Then
nombreFichero_txt = Replace(nombreFichero, ".docx", ".txt")
End If
If Mid(nombreFichero, Len(nombreFichero) - 4, 5) = ".DOCX" Then
nombreFichero_txt = Replace(nombreFichero, ".DOCX", ".txt")
End If

Documents.Open FileName:="C:\CARTAS\entrada_word\" & nombreFichero _
, ConfirmConversions:=False, ReadOnly:=False, AddToRecentFiles:=False, _
PasswordDocument:="", PasswordTemplate:="", Revert:=False, _
WritePasswordDocument:="", WritePasswordTemplate:="", Format:= _
wdOpenFormatAuto, XMLTransform:=""
ActiveDocument.SaveAs FileName:= _
"C:\CARTAS\salida_txt\" & nombreFichero_txt, FileFormat:= _
wdFormatText, LockComments:=False, Password:="", AddToRecentFiles:=True, _
WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:= _
False, Encoding:=1252, InsertLineBreaks:=True, AllowSubstitutions:=False, _
LineEnding:=wdCRLF
ActiveWindow.Close
End Sub
Última edición por albfernan el Mié Sep 06, 2017 11:15 am, editado 1 vez en total
lo 5.3.0.3 | win 7
albfernan
 
Mensajes: 23
Registrado: Mar Sep 05, 2017 1:21 pm

Re: Macro leer documentos odt y guardar como texto

Notapor albfernan » Mié Sep 06, 2017 11:10 am

arivas_2005 escribió:Saludos.
Hace algun tiempo necesité de transformar muchísimos archivos .docx y .odt a texto plano
la referencia esta en este link
https://forum.openoffice.org/es/forum/viewtopic.php?f=50&t=12954&sid=0ca9f87befac80b75a794a2d264497d4

La tarea fue realizada por linea de comando, usando lo siguiente:
en linux
Código: Seleccionar todo   Expandir vistaContraer vista
/opt/libreoffice4.4/program/soffice --headless --convert-to txt:Text iglesia.odt

en windows
Código: Seleccionar todo   Expandir vistaContraer vista
"c:\program files\libreoffice 4\program\soffice" --headless --convert-to txt:Text D:\iglesia.docx

(ojo con la D:\ mayúscula, ya que los nombres de archivos, son sensibles a mayúsculas)
con ambas extensiones se obtiene igual resultado. Es decir, transforma por igual los dos tipos de archivo.


he probado esta solución y funciona perfectamente bajo ms-dos escribiendo la ruta, pero si lo hago en un .bat no funciona, no lo entiendo. ahora voy a probar a ejecutar el comando desde vb.net
lo 5.3.0.3 | win 7
albfernan
 
Mensajes: 23
Registrado: Mar Sep 05, 2017 1:21 pm

Re: Macro leer documentos odt y guardar como texto

Notapor arivas_2005 » Mié Sep 06, 2017 11:20 pm

Saludos.

Idea..
despues de googlear..... !
suponiendo que usa Windows 7 profesional

1ª crear un archivo de texto con los nombres (y rutas completas) de los documentos a transformar (ej. DIR /B/S D:\*.docx > D:\input.txt y luego se depura manualmente)

2º utilizar un script bat para leer cada uno de los nombres de documentos y transformarlo, como por ejemplo el siguiente
@ echo off
C:
cd \program files\libreoffice 4\
For /F "tokens=* delims=" %%A in (D:\input.txt) do ( " C:\Program Files\Libreoffice 4\program\soffice.exe" --headless --convert-to txt:Text "%%A")
D:


los archivos txt transformados se alojan en \Program Files\Libreoffice 4\
Libreoffice 4.7
Puppy slacko 6 y windows 7
arivas_2005
 
Mensajes: 144
Registrado: Mié Nov 16, 2011 6:01 pm

Re: Macro leer documentos odt y guardar como texto

Notapor fornelasa » Jue Sep 07, 2017 6:05 am

Tambien, tal vez algo como esto:
albfernan escribió:Macro leer documentos odt y guardar como texto
albfernan escribió:Quiero hacer lo mismo en LibreOffice Writer

Esta macro es una especie de traducción de tu macro Word

Asignala al evento "Abrir documento" del menú Herramientas <> Personalizar <> Sucesos (o Eventos)

Código: Seleccionar todo   Expandir vistaContraer vista
Sub Convertir_De_Odt_A_Txt()
   dim Opciones()     
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(1).Name = "FilterName"
args1(1).Value = "Text"   
       carpeta = "C:\TuRuta\"
       destino = "C:\OtraRuta\"
          tipo = "*.odt"
          ruta = carpeta + tipo
         ofile = dir(ruta)       
   do
       archivo = ConvertToUrl(carpeta + ofile)
       DocCalc = StarDesktop.loadComponentFromURL(archivo, "_blank", 0, Opciones())
      document = DocCalc.CurrentController.Frame
       args1(0).Value = ConvertToUrl(destino + Replace(ofile, ".odt", ".txt"))
     dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
       document.Close(True)
         ofile = dir
   loop until ofile = ""
       msgbox "¡Listo!"
End Sub
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3234
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macro leer documentos odt y guardar como texto

Notapor albfernan » Jue Sep 07, 2017 7:21 am

mauricio escribió:Con EasyMacro es trivial: https://forum.openoffice.org/es/forum/v ... 50&t=13062
Código: Seleccionar todo   Expandir vistaContraer vista
def exportar_txt():
    app = LIBO()

    path = app.get_folder()
    files = app.get_files(path, 'odt')
    for f in files:
        print ('Exportando: {}'.format(f))
        doc = app.open(f, {'Hidden': True})
        path = app.replace_ext(doc.path, 'txt')
        doc.save(path, {'FilterName': 'Text'})
        print ('\tDocumento exportado: {}'.format(path))
        doc.close()
    print ('Exportación terminada...')
    return

Código: Seleccionar todo   Expandir vistaContraer vista
└──> soffice --calc
Exportando: /home/mau/test/writer3.odt
   Documento exportado: /home/mau/test/writer3.txt
Exportando: /home/mau/test/writer1.odt
   Documento exportado: /home/mau/test/writer1.txt
Exportando: /home/mau/test/writer2.odt
   Documento exportado: /home/mau/test/writer2.txt
Exportación terminada...

Saludos


gracias, no conocía EasyMacro, echaré un vistazo
lo 5.3.0.3 | win 7
albfernan
 
Mensajes: 23
Registrado: Mar Sep 05, 2017 1:21 pm

Re: Macro leer documentos odt y guardar como texto

Notapor albfernan » Jue Sep 07, 2017 8:10 am

albfernan escribió:
arivas_2005 escribió:Saludos.
Hace algun tiempo necesité de transformar muchísimos archivos .docx y .odt a texto plano
la referencia esta en este link
https://forum.openoffice.org/es/forum/viewtopic.php?f=50&t=12954&sid=0ca9f87befac80b75a794a2d264497d4

La tarea fue realizada por linea de comando, usando lo siguiente:
en linux
Código: Seleccionar todo   Expandir vistaContraer vista
/opt/libreoffice4.4/program/soffice --headless --convert-to txt:Text iglesia.odt

en windows
Código: Seleccionar todo   Expandir vistaContraer vista
"c:\program files\libreoffice 4\program\soffice" --headless --convert-to txt:Text D:\iglesia.docx

(ojo con la D:\ mayúscula, ya que los nombres de archivos, son sensibles a mayúsculas)
con ambas extensiones se obtiene igual resultado. Es decir, transforma por igual los dos tipos de archivo.


he probado esta solución y funciona perfectamente bajo ms-dos escribiendo la ruta, pero si lo hago en un .bat no funciona, no lo entiendo. ahora voy a probar a ejecutar el comando desde vb.net


bueno, ya he conseguido que me funcionen los comandos en el .bat, era una tontería, le puse una pausa en el bat (timeout /t 15 /nobreak) para comprobar el error y era por tema de permisos, me daba el error de que no tenia acceso al fichero pero no lo veía al cerrarse la ventana automáticamente. ejecutando el bat como administrador funciona, pensaba que sería otra cosa, que tendría algún error en el comando ya que soy administrador del equipo, es la primera vez que me ocurre.
lo 5.3.0.3 | win 7
albfernan
 
Mensajes: 23
Registrado: Mar Sep 05, 2017 1:21 pm

Re: Macro leer documentos odt y guardar como texto

Notapor fornelasa » Jue Sep 07, 2017 5:38 pm

albfernan, si consideras que el tema ha sido resuelto por favor marquemoslo como tal, aquí nos dicen como hacerlo:
https://forum.openoffice.org/es/forum/v ... f=3&t=2668

Saludos.
lo 6.2.0 | aoo 4.1.6 | win 7/10
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Avatar de Usuario
fornelasa
 
Mensajes: 3234
Registrado: Jue Feb 17, 2011 8:30 pm
Ubicación: Estado de México, México.

Re: Macro leer documentos odt y guardar como texto

Notapor albfernan » Vie Sep 08, 2017 7:32 am

arivas_2005 escribió:Saludos.

Idea..
despues de googlear..... !
suponiendo que usa Windows 7 profesional

1ª crear un archivo de texto con los nombres (y rutas completas) de los documentos a transformar (ej. DIR /B/S D:\*.docx > D:\input.txt y luego se depura manualmente)

2º utilizar un script bat para leer cada uno de los nombres de documentos y transformarlo, como por ejemplo el siguiente
@ echo off
C:
cd \program files\libreoffice 4\
For /F "tokens=* delims=" %%A in (D:\input.txt) do ( " C:\Program Files\Libreoffice 4\program\soffice.exe" --headless --convert-to txt:Text "%%A")
D:


los archivos txt transformados se alojan en \Program Files\Libreoffice 4\


sí, esa es la idea ya que el programa se usa diariamente y lo ejecutan varios usuarios, lo he automatizado y funciona perfectamente
lo 5.3.0.3 | win 7
albfernan
 
Mensajes: 23
Registrado: Mar Sep 05, 2017 1:21 pm

Re: Macro leer documentos odt y guardar como texto

Notapor albfernan » Vie Sep 08, 2017 7:35 am

fornelasa escribió:Tambien, tal vez algo como esto:
albfernan escribió:Macro leer documentos odt y guardar como texto
albfernan escribió:Quiero hacer lo mismo en LibreOffice Writer

Esta macro es una especie de traducción de tu macro Word

Asignala al evento "Abrir documento" del menú Herramientas <> Personalizar <> Sucesos (o Eventos)

Código: Seleccionar todo   Expandir vistaContraer vista
Sub Convertir_De_Odt_A_Txt()
   dim Opciones()     
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(1).Name = "FilterName"
args1(1).Value = "Text"   
       carpeta = "C:\TuRuta\"
       destino = "C:\OtraRuta\"
          tipo = "*.odt"
          ruta = carpeta + tipo
         ofile = dir(ruta)       
   do
       archivo = ConvertToUrl(carpeta + ofile)
       DocCalc = StarDesktop.loadComponentFromURL(archivo, "_blank", 0, Opciones())
      document = DocCalc.CurrentController.Frame
       args1(0).Value = ConvertToUrl(destino + Replace(ofile, ".odt", ".txt"))
     dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
       document.Close(True)
         ofile = dir
   loop until ofile = ""
       msgbox "¡Listo!"
End Sub


lo he resuelto utilizando los comandos en el bat, me era más fácil ya que no estoy familiarizado con lo. De todas formas voy a probar tu macro a ver si soy capaz de adaptarla y que funcione ya que me puede venir muy bien para otros trabajos, muchas gracias.
lo 5.3.0.3 | win 7
albfernan
 
Mensajes: 23
Registrado: Mar Sep 05, 2017 1:21 pm

Re: Macro leer documentos odt y guardar como texto

Notapor albfernan » Vie Sep 08, 2017 8:17 am

fornelasa escribió:albfernan, si consideras que el tema ha sido resuelto por favor marquemoslo como tal, aquí nos dicen como hacerlo:
https://forum.openoffice.org/es/forum/v ... f=3&t=2668

Saludos.


marcado como resuelto
lo 5.3.0.3 | win 7
albfernan
 
Mensajes: 23
Registrado: Mar Sep 05, 2017 1:21 pm

Re: [RESUELTO]Macro leer documentos odt y guardar como texto

Notapor albfernan » Vie Sep 08, 2017 10:23 am

pego el código completo para VB.NET por si alguna vez os hiciera falta y lo explico un poco:

-borrar la bbdd temporal donde se va a volcar la información
-borrar los ficheros en la ruta de salida donde se van a crear los documentos creados (los ficheros txt son un paso intermedio)
-creo un fichero bat de forma dinámica con todos los ficheros odt que se encuentran en la carpeta a convertir en txt
-ejecuto el bat (que funciona perfectamente)
-más código ...

Código: Seleccionar todo   Expandir vistaContraer vista
Imports System.IO
Imports System.Data.SqlClient

Module func_procesos

    Public Sub procesos(rutaEntrada As String, rutaSalida As String)

        Dim connSQL As New SqlConnection
        Dim cmdSQL As New SqlCommand
        connSQL = New SqlConnection(ConexionValidada.ToString)
        connSQL.Open()
        cmdSQL.Connection = connSQL

        'BORRAR TABLAS TEMPORALES
        cmdSQL.CommandText = "DELETE FROM wrk_bbdd"
        cmdSQL.ExecuteNonQuery()

        '******************************************************************************
        'BORRAR FICHEROS EN CARPETA DE SALIDA ANTES DE PROCESAR
        '******************************************************************************
        For Each listaCarpeta As String In My.Computer.FileSystem.GetFiles(rutaSalida)
            My.Computer.FileSystem.DeleteFile(listaCarpeta)
        Next

        '******************************************************************************
        'CREAR BAT
        '******************************************************************************
        Dim array_lista As New ArrayList
        Dim conta_bat As Integer = 0
        Dim ficheroSalidaBat As String = "proceso_bat.bat"

        'listar ficheros a procesar para incluir en bat
        Dim rutacarpeta As New DirectoryInfo(rutaEntrada)
        For Each file As FileInfo In rutacarpeta.GetFiles("*.odt")
            array_lista.Add(file.Name)
        Next

        'comprobar que haya ficheros
        Dim countArray_lista = array_lista.Count
        If countArray_lista = 0 Then
            Console.Write("No hay ficheros")
            Console.ReadLine()
            Exit Sub
        End If

        Dim st As StreamWriter
        st = New StreamWriter("C:\rutaSalidaBat\" & ficheroSalidaBat, False)
        Dim texto As String = ""

        'añadir lineas a bat
        If array_lista IsNot Nothing Then
            For i = 0 To countArray_lista - 1
                conta_bat += 1
                If conta_bat = 1 Then
                    texto = "cd /d " & """" & rutaSalida.Remove(rutaSalida.Length - 1) & """"
                    texto &= vbCrLf
                    st.Write(texto)
                End If
                texto = """c:\program files\libreoffice 5\program\soffice""" & " --headless --convert-to txt:Text " & """" & rutaEntrada & array_lista(i) & """"
                texto &= vbCrLf
                st.Write(texto)
            Next
            st.Close()
        End If

        '******************************************************************************
        'CONVERTIR DOCUMENTOS A TXT PROCESANDO BAT
        '******************************************************************************
        Shell("C:\ruta_bat\proceso_bat.bat", AppWinStyle.Hide, True)

        'MAS CODIGO....

    End Sub

End Module


muestra del contenido del fichero bat que se crea cada vez que se procesa el programa
Código: Seleccionar todo   Expandir vistaContraer vista
cd /d "c:\ruta_salida"
"c:\program files\libreoffice 5\program\soffice" --headless --convert-to txt:Text "c:\ruta_entrada\file1.odt"
"c:\program files\libreoffice 5\program\soffice" --headless --convert-to txt:Text "c:\ruta_entrada\file2.odt"
lo 5.3.0.3 | win 7
albfernan
 
Mensajes: 23
Registrado: Mar Sep 05, 2017 1:21 pm

Re: Macro leer documentos odt y guardar como texto

Notapor albfernan » Lun Sep 11, 2017 12:02 pm

fornelasa escribió:Tambien, tal vez algo como esto:
albfernan escribió:Macro leer documentos odt y guardar como texto
albfernan escribió:Quiero hacer lo mismo en LibreOffice Writer

Esta macro es una especie de traducción de tu macro Word

Asignala al evento "Abrir documento" del menú Herramientas <> Personalizar <> Sucesos (o Eventos)

Código: Seleccionar todo   Expandir vistaContraer vista
Sub Convertir_De_Odt_A_Txt()
   dim Opciones()     
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(1).Name = "FilterName"
args1(1).Value = "Text"   
       carpeta = "C:\TuRuta\"
       destino = "C:\OtraRuta\"
          tipo = "*.odt"
          ruta = carpeta + tipo
         ofile = dir(ruta)       
   do
       archivo = ConvertToUrl(carpeta + ofile)
       DocCalc = StarDesktop.loadComponentFromURL(archivo, "_blank", 0, Opciones())
      document = DocCalc.CurrentController.Frame
       args1(0).Value = ConvertToUrl(destino + Replace(ofile, ".odt", ".txt"))
     dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
       document.Close(True)
         ofile = dir
   loop until ofile = ""
       msgbox "¡Listo!"
End Sub


funciona perfectamente, muchas gracias.
lo 5.3.0.3 | win 7
albfernan
 
Mensajes: 23
Registrado: Mar Sep 05, 2017 1:21 pm


Volver a Macros y API UNO

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados