[RESUELTO]Macro leer documentos odt y guardar como texto
[RESUELTO]Macro leer documentos odt y guardar como texto
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
Re: Macro leer documentos odt y guardar como texto
Considero que si es posible hacerlo. ¿Podrías subir a este foro tu macro de Word?
Saludos, Federico.
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!
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
-
- Mensajes: 162
- Registrado: Mié Nov 16, 2011 6:01 pm
Re: Macro leer documentos odt y guardar como texto
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/v ... 2d264497d4
La tarea fue realizada por linea de comando, usando lo siguiente:
en linux
en windows
(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.
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/v ... 2d264497d4
La tarea fue realizada por linea de comando, usando lo siguiente:
en linux
Código: Seleccionar todo
/opt/libreoffice4.4/program/soffice --headless --convert-to txt:Text iglesia.odt
Código: Seleccionar todo
"c:\program files\libreoffice 4\program\soffice" --headless --convert-to txt:Text D:\iglesia.docx
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
Puppy slacko 6 y windows 7
Re: Macro leer documentos odt y guardar como texto
Con EasyMacro es trivial: https://forum.openoffice.org/es/forum/v ... 50&t=13062
Saludos
Código: Seleccionar todo
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
└──> 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...
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Re: Macro leer documentos odt y guardar como texto
copio las macros completas del documento, la ruta está puesta absoluta y la tengo que cambiar a relativa, pero eso es lo de menos.fornelasa escribió:Considero que si es posible hacerlo. ¿Podrías subir a este foro tu macro de Word?
Saludos, Federico.
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
Re: Macro leer documentos odt y guardar como texto
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.netarivas_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/v ... 2d264497d4
La tarea fue realizada por linea de comando, usando lo siguiente:
en linuxen windowsCódigo: Seleccionar todo
/opt/libreoffice4.4/program/soffice --headless --convert-to txt:Text iglesia.odt
(ojo con la D:\ mayúscula, ya que los nombres de archivos, son sensibles a mayúsculas)Código: Seleccionar todo
"c:\program files\libreoffice 4\program\soffice" --headless --convert-to txt:Text D:\iglesia.docx
con ambas extensiones se obtiene igual resultado. Es decir, transforma por igual los dos tipos de archivo.
lo 5.3.0.3 | win 7
-
- Mensajes: 162
- Registrado: Mié Nov 16, 2011 6:01 pm
Re: Macro leer documentos odt y guardar como texto
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
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
los archivos txt transformados se alojan en \Program Files\Libreoffice 4\@ 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:
Libreoffice 4.7
Puppy slacko 6 y windows 7
Puppy slacko 6 y windows 7
Re: Macro leer documentos odt y guardar como texto
Tambien, tal vez algo como esto:
Asignala al evento "Abrir documento" del menú Herramientas <> Personalizar <> Sucesos (o Eventos)
albfernan escribió:Macro leer documentos odt y guardar como texto
Esta macro es una especie de traducción de tu macro Wordalbfernan escribió:Quiero hacer lo mismo en LibreOffice Writer
Asignala al evento "Abrir documento" del menú Herramientas <> Personalizar <> Sucesos (o Eventos)
Código: Seleccionar todo
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!
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Re: Macro leer documentos odt y guardar como texto
gracias, no conocía EasyMacro, echaré un vistazomauricio escribió:Con EasyMacro es trivial: https://forum.openoffice.org/es/forum/v ... 50&t=13062Código: Seleccionar todo
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
SaludosCódigo: Seleccionar todo
└──> 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...
lo 5.3.0.3 | win 7
Re: Macro leer documentos odt y guardar como texto
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.albfernan escribió: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.netarivas_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/v ... 2d264497d4
La tarea fue realizada por linea de comando, usando lo siguiente:
en linuxen windowsCódigo: Seleccionar todo
/opt/libreoffice4.4/program/soffice --headless --convert-to txt:Text iglesia.odt
(ojo con la D:\ mayúscula, ya que los nombres de archivos, son sensibles a mayúsculas)Código: Seleccionar todo
"c:\program files\libreoffice 4\program\soffice" --headless --convert-to txt:Text D:\iglesia.docx
con ambas extensiones se obtiene igual resultado. Es decir, transforma por igual los dos tipos de archivo.
lo 5.3.0.3 | win 7
Re: Macro leer documentos odt y guardar como texto
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.
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!
¡Un aplauso para todos los que luchan por proteger y promover la Web abierta!
Re: Macro leer documentos odt y guardar como texto
sí, esa es la idea ya que el programa se usa diariamente y lo ejecutan varios usuarios, lo he automatizado y funciona perfectamentearivas_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 siguientelos archivos txt transformados se alojan en \Program Files\Libreoffice 4\@ 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:
lo 5.3.0.3 | win 7
Re: Macro leer documentos odt y guardar como texto
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.fornelasa escribió:Tambien, tal vez algo como esto:albfernan escribió:Macro leer documentos odt y guardar como textoEsta macro es una especie de traducción de tu macro Wordalbfernan escribió:Quiero hacer lo mismo en LibreOffice Writer
Asignala al evento "Abrir documento" del menú Herramientas <> Personalizar <> Sucesos (o Eventos)
Código: Seleccionar todo
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 5.3.0.3 | win 7
Re: Macro leer documentos odt y guardar como texto
marcado como resueltofornelasa 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.
lo 5.3.0.3 | win 7
Re: [RESUELTO]Macro leer documentos odt y guardar como texto
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 ...
muestra del contenido del fichero bat que se crea cada vez que se procesa el programa
-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
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
Código: Seleccionar todo
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
Re: Macro leer documentos odt y guardar como texto
funciona perfectamente, muchas gracias.fornelasa escribió:Tambien, tal vez algo como esto:albfernan escribió:Macro leer documentos odt y guardar como textoEsta macro es una especie de traducción de tu macro Wordalbfernan escribió:Quiero hacer lo mismo en LibreOffice Writer
Asignala al evento "Abrir documento" del menú Herramientas <> Personalizar <> Sucesos (o Eventos)
Código: Seleccionar todo
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 5.3.0.3 | win 7