[RESUELTO] Extraer un dato de 13200 archivos diferentes

Discute sobre la aplicación de hojas de cálculo

[RESUELTO] Extraer un dato de 13200 archivos diferentes

Notapor mmittelbach » Vie Sep 04, 2020 1:51 am

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
mmittelbach
 
Mensajes: 6
Registrado: Jue Sep 03, 2020 11:37 pm

Re: Extraer un dato de 13200 archivos diferentes

Notapor PepeOooSevilla » Vie Sep 04, 2020 7:30 am

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   Expandir vistaContraer vista
='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   Expandir vistaContraer vista
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) 8 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.
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

Notapor mmittelbach » Vie Sep 04, 2020 12:09 pm

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: 6
Registrado: Jue Sep 03, 2020 11:37 pm

Re: Extraer un dato de 13200 archivos diferentes

Notapor mmittelbach » Vie Sep 04, 2020 12:30 pm

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
mmittelbach
 
Mensajes: 6
Registrado: Jue Sep 03, 2020 11:37 pm

Re: Extraer un dato de 13200 archivos diferentes

Notapor PepeOooSevilla » Vie Sep 04, 2020 1:01 pm

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
PepeOooSevilla
 
Mensajes: 1480
Registrado: Sab Abr 04, 2009 6:10 pm
Ubicación: Sevilla (España)

Re: Extraer un dato de 13200 archivos diferentes

Notapor mauricio » Vie Sep 04, 2020 4:09 pm

Código: Seleccionar todo   Expandir vistaContraer vista
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
Avatar de Usuario
mauricio
 
Mensajes: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX

Re: Extraer un dato de 13200 archivos diferentes

Notapor mmittelbach » Vie Sep 04, 2020 4:21 pm

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
mmittelbach
 
Mensajes: 6
Registrado: Jue Sep 03, 2020 11:37 pm

Re: Extraer un dato de 13200 archivos diferentes

Notapor mauricio » Vie Sep 04, 2020 6:15 pm

______________________________________________
"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: 6092
Registrado: Sab Nov 22, 2008 5:36 am
Ubicación: CDMX


Volver a Calc

¿Quién está conectado?

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