19
Archivos 1 Programación y Tratamiento de datos para la Gestión http://progra.usm.cl UTFSM INF-130 (UTFSM) Programación y TDG 1/19

Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

Archivos 1

Programación y Tratamiento de datos para la Gestión

http://progra.usm.clUTFSM

INF-130 (UTFSM) Programación y TDG 1/19

Page 2: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

Manejo de archivos

¿Por qué manejar archivos?

En cualquier lenguaje de programación, es importante el manejar archivos ajenos al

programa que está ejecutándose. En el caso de Excel implica tener una base de muchos

datos guardadas en distintos archivos.

En esta sección aprenderás a leer y manipular datos, y cómo son útiles para tus subrutinas

de macros.

INF-130 (UTFSM) Programación y TDG 2/19

Page 3: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

Un archivo .csv (comma-separated-values) es uno de texto que almacena datos en forma

de columnas, donde cada columna está separada por comas, y las filas se distinguen por

los saltos de línea.

¿Para qué sirve? Normalmente se usa para importar o exportar bases de datos de

algunas aplicaciones o sistemas. En Excel se da la opción de guardar en este formato

mediante Guardar Como -> formato delimitado por comas (CSV).

Ej:

En este caso, se guardó separado por ‘;’. Esto es algo configurable dentro de Excel.

INF-130 (UTFSM) Programación y TDG 3/19

Manejo de archivos

CSV

Guardar como csv

Page 4: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

Manejo de archivos

Objeto WorkbookObjeto que representa un archivo de Excel, parte de la colección Workbooks. Con esteobjeto se pueden realizar varias acciones: abrir un workbook en particular, guardar ycerrar workbooks, crear nuevos workbooks, cambiar las propiedades del workbook, etc.• Creando un objeto Workbook:

Workbooks.AddLuego, el nuevo workbook se convierte en el que está activo dentro del código.• Mostrando el nombre:

ActiveWorkbook.NameEsto mostrará el nombre del objeto Workbook activo; cuando se crea uno nuevo pordefecto es “Libro1”.• Abriendo un Workbook:

Workbooks.Open(“<ruta-al-archivo\<nombre-archivo.extension>”)Donde ruta-al-archivo es la ruta por los directorios, ej: C:\Users\Gabs\Documents.Y nombre-archivo.extension es el nombre del archivo que se quiere abrir y .extension esel tipo de archivo, ej: Libro1.xlsx, MisMacros.xlsm, Datos.csv. Notar que si el archivo estáen la misma carpeta que la Macros, sólo se coloca el nombre de este (sin ruta).

INF-130 (UTFSM) Programación y TDG 4/19

Page 5: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

INF-130 (UTFSM) Programación y TDG 5/19

Manejo de archivos

Objeto WorkbookSe puede validar la existencia de un archivo haciendo la siguiente comprobación:If Dir(“<ruta-al-archivo\<nombre-archivo.extension>”) <> “” Then

Workbooks.Open(“<ruta-al-archivo\<nombre-archivo.extension>”)Else

MsgBox “El archivo no existe”End If• Seleccionando un archivo para abrir:

Dim rutaYArchivo As StringrutaYArchivo = Application.GetOpenFilenameWorkbooks.Open (rutaYArchivo)

Esto abre un diálogo de abrir un archivo desde archivo, selecciona el archivo que deseasabrir y esa ruta quedará guardada en la variable rutaYArchivo.• Guardando un Workbook:

ActiveWorkbook.SaveGuarda un archivo que ya existe.

Page 6: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

INF-130 (UTFSM) Programación y TDG 6/19

Manejo de archivos

Objeto Workbook - Guardar

Si se guarda por primera vez el archivo, es mejor utilizar esta opción:

ActiveWorkbook.SaveAs Filename:=“C:\Test.xlsm”, FileFormat:=xlOpenXMLWorkbookMacroEnabled

Si se quiere que el usuario escoja donde guardar el archivo, se puede llamar al Box deGuardarComo y seleccionar la ubicación.

Dim rutaYArchivo As StringrutaYArchivo = Application.GetSaveAsFilenameActiveWorkbook.SaveAs Filename:=rutaYArchivo & “.xlsm”, FileFormat:=xlOpenXMLWorkbookMacroEnabled

Page 7: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

INF-130 (UTFSM) Programación y TDG 7/19

Manejo de archivos

Objeto Workbook - FileFormat

En FileFormat se puede abreviar el texto del tipo de formato por un código; la siguiente tablacontiene los códigos que se utilizan:

Tipo de Formato Código Extensión Tipo

lWorkbookNormal -4143 xls Excel 1997 - 2003

xlOpenXMLWorkbook 51 xlsx Sin Macros

xlOpenXMLWorkbookMacroEnabled 52 xlsm Con o sin Macros

xlExcel12 50 xlsb Achivo Excel binario, con o sin Macros.

xlExcel8 56 xls Excel 2007 o posteriorxlCSV 6 csv Archivo local CSV

Page 8: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

INF-130 (UTFSM) Programación y TDG 8/19

Manejo de archivos

Objeto Workbook

En el código a veces es necesario trabajar con el archivo que se crea o se abre; entonces sedebe asignar el objeto Workbook a una variable.

Dim wb As Workbook ’ o As Excel.WorkbookSet wb = Workbooks.Addwb.SaveAsFilename:=“C:\Ejemplo.xlsx”

• Cerrar Archivo:

wb.Close SaveChanges:=True

Page 9: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

INF-130 (UTFSM) Programación y TDG 9/19

Manejo de archivos

EjemploEl siguiente ejemplo lee el nombre del archivo desde la celda D3, y si no lo encuentra, abre eldiálogo de abrir archivo para seleccionarlo. Si se cancela la operación, aparece un mensaje ”Nose seleccionó archivo.”.

Ejercicio: Modifique el código anterior para que, mientras no se seleccione un archivo,continuará mostrándose el diálogo de abrir archivo.

Page 10: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

INF-130 (UTFSM) Programación y TDG 10/19

Se pueden leer archivos de distintas maneras. En esta parte veremos cómo manipular unarchivo de texto plano (en este caso un .csv).Para trabajar con un archivo, primero debemos indicar a VBA qué es lo que queremosabrir (ubicación y archivo), después se debe abrir con algún método. Posterior a lasacciones que se realizan con el archivo, este se cierra.Elementos que se utilizarán:• Application.ActiveWorkbook.Path: Entrega la ruta actual del archivo que ejecuta el

código VBA que escribimos. Dependiendo de tu Sistema Operativo, los directorios pueden ir escritos con un “/”, o un “\”.

• Open <archivo> For Input As #<numeroArchivo>: Abre el archivo especificado en la variable que va en <archivo> (se puede especificar la ruta y el archivo; si sólo se escribe el nombre, VBA asume que se encuentra en la carpeta del Active Workbook). <numeroArchivo> es un número cualquiera que se le asigna al archivo que se lee; si se abre más de un archivo, se deben utilizar números distintos. For Input significa que el archivo es una entrada de datos (se lee).

Leyendo Archivos de texto plano (CSV)

Manejo de archivos

Page 11: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

INF-130 (UTFSM) Programación y TDG 11/19

• Do Until EOF (<numeroArchivo>) ... Loop: Ciclo que se utiliza para leer un archivo de texto plano. El EOF (End Of File) indica que se repetirá hasta que alcance el Fin del Archivo.

• Line Input #<numeroArchivo>, <variable_para_guardar_línea>: Se utiliza para guardar en <variable_para_guardar_línea>, la línea que se lee desde el archivo número <numeroArchivo>.

• Split(<variable>,<delimitador>): En archivos CSV se leen líneas con datos unidos por medio de “,” o “;” (depende de tu configuración). Para poder leer los datos de las líneas, se debe hacer un Split o división de esta. Por ejemplo, supongamos que leemos la siguiente línea del CSV:

lineaArchivo=“ID;Nombre;Categoría;Valor unitario;Stock;Unidades solicitadas”

El <delimitador> sería aquel carácter que une cada dato, en este caso es un “;”. Al hacer un Split, creamos un arreglo unidimensional, donde la cantidad de elementos depende de los valores resultantes del Split realizado, en este caso se tendría:(“ID”, “Nombre”, “Categoría”, “Valor unitario”, “Stock”, “Unidades solicitadas”) → 6 datos!!

Leyendo Archivos de texto plano (CSV)

Manejo de archivos

Page 12: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

INF-130 (UTFSM) Programación y TDG 12/19

• Split(<variable>,<delimitador>): Los 6 datos leídos anteriormente se guardan en una variable, por lo que el Split() debe ser asignado a una:

variable_con_el_Split = Split(lineaArchivo, “;”)Para acceder a los datos generados con el Split(), se debe referenciar al arreglo variable_con_el_Split, tomando en cuenta que el primer índice es 0 y el último es la “cantidad de elementos – 1” (6-1 = 5); es decir, para el ejemplo en concreto sería:

variable_con_el_Split(0) → “ID”variable_con_el_Split(1) → “Nombre”variable_con_el_Split(2) → “Categoría”variable_con_el_Split(3) → “Valor unitario”variable_con_el_Split(4) → “Stock”variable_con_el_Split(5) → “Unidades solicitadas”

Leyendo Archivos de texto plano (CSV)

Manejo de archivos

• Close #<numeroArchivo>: Cierra el archivo abierto con Open. Debes recordar siempre que todo archivo que se abre, debe cerrarse al finalizar la función o procedimiento.

Page 13: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

INF-130 (UTFSM) Programación y TDG 13/19

Ejemplo: A partir de un archivo .csv existente que está en la misma carpeta que el código VBA, se copian los datos en la hoja activa.

Leyendo Archivos de texto plano (CSV)

Manejo de archivos

Page 14: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

Elementos que se utilizarán:• Range.SpecialCells(<tipo>): retorna un objeto de tipo Range que encaja con el <tipo> de dato

especificado. En <tipo> se pueden colocar varias palabras constantes; para este tema queestamos revisando, se utilizará xlCellTypeLastCell, el cual entrega la última celda que seencuentra en el rango especificado.

• Open <archivo> For Output As #<numeroArchivo>: Al igual como se vió en la parte de lecturaCSV, se utiliza la palabra Open para abrir lo que está indicado en <archivo>, pero en estaocasión “For Output” indica que #<numeroArchivo> se abre en modo “salida” o bien,escritura. Se utiliza cuando se quiere crear un archivo nuevo (no existe en los directorios).

• Trim(<texto>): Elimina los espacios sobrantes antes y después de un <texto>.

• Write #<numeroArchivo>, <dato>: Escribe en el archivo indicado en #<numeroArchivo> elstring o texto que está almacenado en la variable <dato>.

INF-130 (UTFSM) Programación y TDG 14/19

Guardando datos en archivo (CSV)

Manejo de archivos

Page 15: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

Ejemplo: En el siguiente código se presenta cómo se leen los datos de una hoja activa, yposteriormente se guarda cada fila dentro de una variable, tomando en cuenta que si se quieregenerar un .csv, cada dato de una fila debe ir separado por “;”. Finalmente se guarda elcontenido de esa variable en el archivo de destino. Al finalizar la escritura, se cierra el nuevoarchivo.

INF-130 (UTFSM) Programación y TDG 15/19

Guardando datos en archivo (CSV)

Manejo de archivos

Page 16: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

Para trabajar con los datos de un archivo Excel existente, se utiliza el objeto Workbook; con estopodemos abrir el archivo, leer las celdas, copiarlas en el Active Workbook, crear un nuevoarchivo Excel desde cero... ¡En fin! Se pueden realizar muchas acciones, en esta sección semostrarán algunas.

• Crear un nuevo archivo Excel:Dim src As WorkbookSet src = Workbooks.Addsrc.Save

Si se quiere colocar el nombre al archivo se debe reemplazar la última línea por:src.SaveAs <ruta_y_archivoXlsx> , o,src.SaveAs Filename:=<ruta_y_archivoXlsx>

INF-130 (UTFSM) Programación y TDG 16/19

Usando objeto Workbook

Manejo de archivos

Page 17: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

• Abrir un archivo Excel para trabajar: Se realiza en un modo “sólo Lectura”; esto esconfigurable en el método Open antes visto.Dim src As WorkbookSet src = Workbooks.Open(<ruta_y_archivoXlsx>,True,True)

• Obtener filas y columnas utilizadas en el archivo Excel: Existen varias maneras de obtenerestos valores; se puede definir si se quiere saber para filas/columnas en particular o bienpara todo el documento. Se debe tener en cuenta que hay especificar el nombre de la hojade trabajo que se utilizará para la lectura y llamarla usando la variable Workbook.‘ todas las filastotalFilas = src.Worksheets(<nombre_hoja>).UsedRange.Rows.Count‘ todas las columnastotalCols = src.Worksheets(<nombre_hoja>).UsedRange.Columns.Count‘ filas en una columna en especialtotalFilas= src.Worksheets(<nombre_hoja>).Cells(src.Worksheets(<nombre_hoja>).Rows.Count, <columna>).End(xlUp).Row

* Recuerda que todo lo que sea el nombre de algo es un string y en VBA debe ir entre comillas.INF-130 (UTFSM) Programación y TDG 17/19

Usando objeto Workbook

Manejo de archivos

Page 18: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

• Trabajando con datos del objeto Workbook: al igual como se ha venido trabajando con celdasde un Active Workbook anteriormente, se utilizan los mismos métodos. Sólo debesincorporar antes el nombre de la variable que contiene al objeto Workbook.

Ej: Dim src As WorkbookSet src = Workbooks.Open(...)’ para acceder al dato de la Hoja1 en la celda A1... = src.Worksheets(“Hoja1”).Range(“A1”).Formula

Por supuesto, puedes utilizar todos los métodos visto durante el curso.• Cerrar un archivo: Se utiliza el método Close. Se añade la opción False para indicar que no se

guardarán datossrc.Close FalseSet src = Nothing ‘ es necesario indicar que la variable src ya no

“apunta” a ningún archivo

INF-130 (UTFSM) Programación y TDG 18/19

Usando objeto Workbook

Manejo de archivos

Page 19: Archivos 1 · Un archivo .csv(comma-separated-values) es uno de texto que almacena datos en forma de columnas, donde cada columna está separada por comas, y las filas se distinguen

Ejercicios:

• Utilice el objeto Workbook para que, dado el archivo productos.xlsx, copie la columna B en la

hoja “hoja1” columna A de su archivo.

• Realice una subrutina para que copie la tabla completa del archivo productos.xlsx en la hoja

“hoja2” de su archivo (deben quedar en la misma posición que en el archivo original).

INF-130 (UTFSM) Programación y TDG 19/19

Usando objeto Workbook

Manejo de archivos