[RESUELTO] Extraer un dato de 13200 archivos diferentes

Discute sobre la aplicación de hojas de cálculo
Responder
mmittelbach
Mensajes: 21
Registrado: Jue Sep 03, 2020 11:37 pm

[RESUELTO] Extraer un dato de 13200 archivos diferentes

Mensaje por mmittelbach »

Hola a todos.

Pués tengo un problema mayúsculo.
Resulta que tengo que extraer un dato de una planilla "Cotizaciones_01_01_1973.xls", a una planilla nueva. y Asi sucesivamente con trece mil doscientas planillas (si señor).
Se me ocurrio utilizar copiar y pegar por medio de pegado especial "enlace" y me devolvio el valor 0 (cero).
No me quede conforme y varie el valor de la planilla en c3 y le puse 7 (siete).
No tuve suerte porque de nuevo me devolvió el valor 0 (cero).
Utilice el metodo mas ortodoxo y escribi la siguiente formula: ='file:///home/matias/documentos/nicolas/fwddolar/series/últimos listados/listadosbcra/Cotizaciones_01_01_1971.xls'#$Hoja1.C3
Pero me devuelve el valor cero y en otras planillas me devuelve #¡REF.

La verdad es que no encuentro manera de extraer el dato que necesito y poder automatizar el proceso.
Gracias a todos.

PD: Puse resuelto al hilo, porque los aportes me resultaron :bravo: , terminé haciéndolo de manera semi automática y logré el objetivo.
Última edición por mmittelbach el Sab Sep 05, 2020 1:56 am, editado 1 vez en total.
Libre Office 6.0.7.3. en Linux Mint 19.3
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Extraer un dato de 13200 archivos diferentes

Mensaje por PepeOooSevilla »

Hola.
Te damos la bienvenida al Foro y, por favor, no dejes de leer la Guía de supervivencia.

Te adjunto un archivo que es el que utilizo para lo que comentas pero en Windows y con muchos menos archivos a leer.
El archivo contiene una macro que es la que se encarga de recorrer todos los archivos de la carpeta que se le indique y si el archivo tiene extensión "ODS" o "XLS" lee la misma celda de la misma hoja de cada uno de los archivos encontrados y pega la información obtenida en un nuevo archivo ODS mediante un enlace tipo

Código: Seleccionar todo

='file:///D:/CARPETA/ARCHIVO_PRUEBAS_01.ods'#$Hoja1.A1
En mi caso decirte que me funciona (como máximo tengo que leer unos 60 archivos y tarda unos 15 segundos aproximadamente), ahora bien, en tu caso y al ser tantos miles te aconsejo que primero hagas pruebas con 100 o 200 archivos para ver qué tal y el tiempo que emplea en leerlos.
Este es el código:

Código: Seleccionar todo

REM *** BASIC ***
Option Explicit

Sub LeerCeldaArchivoCalc()
'Lee la misma celda de la misma hoja de todos los archivos ODS / XLS
'que se encuentren en la carpeta que se le especifique, pegando la
'información obtenida en un nuevo archivo ODS mediante un enlace
'tipo ='file:///D:/CARPETA/ARCHIVO_PRUEBAS_01.ods'#$Hoja1.A1
	Dim EsteDoc As Object
	Dim EstaHoja As Object
	Dim NuevoDoc As Object
	Dim NuevaHoja As Object
	Dim Carpeta As String
	Dim NomHoja As String
	Dim NomCelda As String
	Dim FilaActual As Long
	Dim Archivo As String
	Dim Extension As String

	On Error Goto TRATAR_ERROR

	EsteDoc = ThisComponent
	EstaHoja = EsteDoc.CurrentController.ActiveSheet
	With EstaHoja
		Carpeta = UCase(.getCellRangeByName("B5").String)
		NomHoja = UCase(.getCellRangeByName("B8").String)
		NomCelda = UCase(.getCellRangeByName("B11").String)
	End With
	' Comprobamos que no esté vacía la RUTA del archivo
	If Trim(Carpeta) = "" Or IsNull(Carpeta) Then
		MsgBox "La RUTA de la CARPETA no debe estar VACÍA", 16, "¡Atención!"
		Exit Sub
	End If
	If Right(Carpeta, 1) <> "\" Then
		Carpeta = Carpeta & "\"
	End If
	If Trim(NomHoja) = "" Or IsNull(NomHoja) Then
		MsgBox "El NOMBRE de la HOJA no debe estar VACÍO", 16, "¡Atención!"
		Exit Sub
	End If
	If Trim(NomCelda) = "" Or IsNull(NomCelda) Then
		MsgBox "La CELDA no debe estar VACÍA", 16, "¡Atención!"
		Exit Sub
	End If
	'Creamos nuevo documento Calc donde se volcarán los resultados
	NuevoDoc = StarDesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, Array())
	NuevaHoja = NuevoDoc.Sheets(0)
	FilaActual = 0
	With NuevaHoja
		.getCellByPosition(0, FilaActual).String = "ARCHIVO"
		.getCellByPosition(1, FilaActual).String = "VALOR"
		Archivo = Dir(Carpeta)
		Do While Archivo <> ""
			Extension = UCase(Right(Archivo, 3))
			If (Extension = "ODS") Or (Extension = "XLS") Then
				FilaActual = FilaActual + 1
				.getCellByPosition(0, FilaActual).String = Carpeta & Archivo
				.getCellByPosition(1, FilaActual).Formula = "=" & Chr(39) & "file:///" & Replace(Carpeta, "\", "/") & _
															Archivo & Chr(39) & "#$" & NomHoja & "." & NomCelda
			End If
			' Leer el siguiente archivo
			Archivo = Dir()
		Loop
	End With
	MsgBox "Macro finalizada", 64, "¡Atención!"
	Exit Sub

TRATAR_ERROR:
' Por si hubiera que tratar los posibles errores
	MsgBox "Se ha producido un ERROR en la ejecución de la macro", 16, "¡Atención!"
End Sub
Por cierto, si un enlace da como resultado #¡REF! es porque, o bien la celda no existe, o bien la hoja no existe. Esto ocurre, por ejemplo, si intentamos leer en un archivo XLS una columna superior a la IV (256) o una fila superior a 65536 o en un archivo ODS una columna superior a la AMJ (1024) o una fila superior a 1048576.
Saludos cordiales.
Adjuntos
MACRO_CALC_LEER_CELDA_TODOS_ODS_CARPETA.ods
LibO Calc 6.4.6
(12.9 KiB) Descargado 128 veces
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
mmittelbach
Mensajes: 21
Registrado: Jue Sep 03, 2020 11:37 pm

Re: Extraer un dato de 13200 archivos diferentes

Mensaje por mmittelbach »

Muchas gracias Pepe.
Por ahora lo que hice (solución de carpintería) es hacer un formula que concatena varios pedazos de la instrucción de importar el archivo y como no funciona porque parte de la misma se convierte en hiper enlace, le puse un guion al empezar, conclusión copio y pego y luego tengo que utilizar buscar y reemplazar y reemplazo el guión por vació y me trae el resultado de la importación que es el valor de la celda c3 del archivo externo, pero me sale el cartel bendito de "opciones de importación" al que tengo que darle enter para que traiga el valor, imagínate el trabajo chino!!!
Saludos cordiales.
Matias
PD no se como cargarte una imagen, sino te la envío para que veas, porque el archivo es muy pesado para subirlo
Libre Office 6.0.7.3. en Linux Mint 19.3
mmittelbach
Mensajes: 21
Registrado: Jue Sep 03, 2020 11:37 pm

Re: Extraer un dato de 13200 archivos diferentes

Mensaje por mmittelbach »

Pepe buenas tardes (días). Acabo de porbar la planilla pero no me extrajo datos. sospecho que puede ser porque le pongo mal la direccion de la carpeta del archivo.
Tu me indicas una dirección tipo "windows" (p.e D:/) pero no se como ponerla porque utilizo linux y la dirección mia es:

/home/matias/Documentos/Nicolas/fwddolar/Series/Ultimos Listados/ListadosBCRA
Libre Office 6.0.7.3. en Linux Mint 19.3
Avatar de Usuario
PepeOooSevilla
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Extraer un dato de 13200 archivos diferentes

Mensaje por PepeOooSevilla »

Hola.
Mi conocimiento de Linux es cero.
A ver si algún integrante del Foro que trabaje con Linux puede probar y modificar la macro según convenga para que funcione también en Linux.
Saludos cordiales.
LibreOffice 6.4.6. Windows 10. Java 8 rev. 261 (64 bits)
Por favor, utiliza el Foro para tus consultas, no los mensajes privados
Si usas OpenOffice/LibreOffice trabaja y guarda en ODT, ODS, ODP, ... Y haz copias de seguridad.
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Extraer un dato de 13200 archivos diferentes

Mensaje por mauricio »

Código: Seleccionar todo

file:///home/USER/PATH
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
mmittelbach
Mensajes: 21
Registrado: Jue Sep 03, 2020 11:37 pm

Re: Extraer un dato de 13200 archivos diferentes

Mensaje por mmittelbach »

Gracias Mauricio tengo que anteponer triple barra!!. Voy a probar.
Saludos cordiales.
Buen fin de semana
Libre Office 6.0.7.3. en Linux Mint 19.3
Avatar de Usuario
mauricio
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX
Contactar:

Re: Extraer un dato de 13200 archivos diferentes

Mensaje por mauricio »

______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Responder