Fichas de Referencia L.O. Basic
Ficha nº 8.
Archivos
Nivel: Avanzado
|
Esta ficha de referencia está bajo licencia de CreativeCommons BY-SA v3 (fr) o posterior.: https://creativecommons.org/licenses/by-sa/3.0/fr/ |
|
Este documento es una adaptación del documento original, en Francés, que se puede obtener en la Wiki de publicaciones de LibreOffice.
|
Versión |
Fecha |
Comentarios |
|
2.0 |
06/04/2019 |
Mise en forme |
|
2.0_ES |
15/09/2026 |
Traducción y cambio de formato para esta versión |
Somos como enanos a hombros de gigantes. Si alcanzamos a ver más cosas y más lejanas que ellos, no es por la perspicacia de nuestra visión, ni por nuestra grandeza, sino porque son ellos quienes nos elevan. (atribuido a Bernard de Chartres )
Mediante las instrucciones nativas
|
Dir() |
Devuelve el nombre de un archivo o directorio o también de todos |
|
FileCopy() |
Copia un archivo. |
|
FileDateTime() |
Devuelve una cadena de caracteres que contiene la fecha y hora de |
|
FileExists() |
Devuelve True si existe el archivo o directorio. |
|
FileLen() |
Devuelve el tamaño de un archivo (en bytes). |
|
GetAttr() |
Devuelve el tipo de archivo, unidad o directorio. |
|
GetPathSeparator() |
Devuelve el separador de ruta usado en el sistema operativo. |
|
Kill() |
Elimina un archivo de la unidad. |
|
MkDir() |
Crea un directorio nuevo. |
|
Name() |
Renombra un archivo o directorio existente |
|
RmDir() |
Elimina un directorio existente |
|
SetAttr() |
Define los atributos del archivo indicado. |
Mediante un objeto SimpleFileAccess
Métodos del servicio com.sun.star.ucb.SimpleFileAccess:
oSFA = createUNOService("com.sun.star.ucb.SimpleFileAccess")
|
copy |
Copia un archivo. |
|
createFolder |
Crea un directorio nuevo. |
|
exists |
Verifica si un archivo o directorio existe. |
|
getContentType |
Devuelve el tipo de contenido del archivo. |
|
getDateTimeModified |
Devuelve la fecha de la última modificación del archivo. |
|
getFolderContents |
Devuelve el contenido de un directorio. |
|
getSize |
Devuelve el tamaño de un archivo. |
|
isFolder |
Verifica si una URL es un directorio. |
|
isReadOnly |
Verifica si un archivo es de solo lectura. |
|
kill |
Elimina un archivo o directorio. |
|
move |
Mueve un archivo. |
|
setInteractionHandler |
Establece un controlador de interacción para operaciones. |
|
setReadOnly |
Activa el indicador de sólo lectura del archivo (se necesitan los |
Rutas de los archivos
Al ser multiplataforma, las rutas de los archivos se expresan en formato URL:
file:///soporte/Ruta/al/archivo.ext
Funciones de conversión:
|
De nativo a URL |
NombreUrl = ConvertToURL(NombreArchivoNativo) |
|
De URL a nativo |
NombreOS = ConvertFromURL(NombreArchivoURL) |
Manualmente
Figura 1: Diálogo de importación de Calc

Elementos de los filtros CSV
Los filtros CSV necesitan 5 parámetros (Tome como referencia el diálogo mostrado).
Opciones de separador:
Formato variable (separado por)
Formato fijo (Anchura fija) "FIX"
Delimitador de cadena
Código Ascii del delimitador (vea tabla Ascii) "34" ("" si no hay ninguno)
Conjunto de caracteres: (si se indica "", se asume UTF-8) los más usuales son:
|
Windows-1252/WinLatin1 |
ANSI |
ISO-8859-1 |
12 |
ISO-8859-15/EURO |
22 |
UTF-8 |
76 |
Primera linea de datos del archivo a importar (desde la fila)
Número de la línea (empezando por 1) "2" ("1" o "" si es la 1ª linea)
Formato de las columnas (tipo de columna)
Variable Por cada columna secuencia de 4 caracteres: rango (base 1) / formato/
(vea la tabla Formatos)"1/2/ 2/2/ 3/1/"("" si utiliza valores predet.)
Fijo Por cada columna secuencia de 4 caracteres: pos.1er carácter (base 0) / formato /
(vea la tabla Formatos)"0/1/ 8/2/ 13/1/"
Puede intercalar espacios para hacer la secuencia más legible.
Puede especificar solamente las columnas útiles.
Filtro de importación CSV
|
El filtro está formado por la concatenación de sus 5 parámetros separados por comas: |
|
Según el contexto, determinados valores se pueden omitir (vea detalles de los parámetros): Filtro = "59,,76,,"
Información adicional
Códigos Ascii más frecuentes (notación decimal)
|
9 |
Tabulador |
32 |
Espacio |
34 |
" |
35 |
# |
36 |
$ |
39 |
' |
44 |
, |
58 |
: |
59 |
; |
Formato de las columnas
|
1 |
Estándar (automático Calc) |
5 |
YY/MM/DD |
|
2 |
Texto |
9 |
(descartar columna (ocultar) |
|
3 |
MM/DD/YY |
10 |
Formato US (sep. decimales y millares) |
|
4 |
DD/MM/YY |
|
Importar un archivo CSV en una hoja de cálculo Calc
Se quiere copiar el contenido de un archivo CSV con nombre con nombre MiArchivo.csv en la hoja con nombre NombreHoja del libro en uso.
El proceso se efectua mediante el empleo de una memoria intermedia (buffer) y después la eliminación de la misma.
Dim CsvURL As String 'ruta del archivo .csv origen
Dim Filtro As String
Dim Hoja As Object 'hoja destino en el libro
Hoja = ThisComponent.Sheets.getByName("Nombre_de_la_Hoja")
CsvURL = ConvertToURL("C:\ruta\a\MiArchivo.csv")
'opciones de lectura del archivo .csv
Filtro = "9,34,ANSI,1,1/2/ 2/2/ 3/1/ 4/1/"
'importación mediante un buffer entre la hoja y el origen .csv
Hoja.link(CsvURL, "", "Text - txt - csv (StarCalc)", _
Filtro, com.sun.star.sheet.SheetLinkMode.VALUE)
'liberación del buffer para volver el libro autonomo
Hoja.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)
El contenido anterior de la hoja se elimina sin previo aviso.
Crear un libro Calc partiendo de un archivo CSV
Se quiere crear un libro Cal a partir de un archivo CSV con nombre MiArchivo.csv.
Dim props1(1) As New com.sun.star.beans.PropertyValue
Dim props2()
Dim CsvURL As String 'ruta del archivo .csv origen
Dim DocURL As String 'ruta del archivo .ods destino
Dim oDoc As Object 'Libro destino
CsvURL = ConvertToURL("C:\ruta\a\MiArchivo.csv")
'opciones de lectura del archivo .csv
props1(0).Name = "FilterName"
props1(0).Value = "Text - txt - csv (StarCalc)"
props1(1).Name = "FilterOptions"
props1(1).Value = "9,34,ANSI,1,1/2/ 2/2/ 3/1/ 4/1/"
'carga del archivo origen .csv en la primera hoja
oDoc = StarDesktop.loadComponentFromURL(CsvURL, "_blank", 0, props1())
'guardado del libro en formato .ods
DocURL = ConvertToURL("C:\ruta\a\MiLibro.ods")
oDoc.storeAsURL(DocURL, props2())
El documento creado contendrá sólo una hoja que toma nombre del origen CSV.
En el ejemplo, el documento creado se muestra en pantalla. Para evitar esto:
– utilice la opción Hidden (valor True) en props1()
– agregue oDoc.close(True) al final del proceso.
Si existe un documento Calc con el mismo nombre se eliminará sin previo aviso.
Pasos del proceso
Obtener el n.º identificativo interno del archivo con (FreeFile),
Abrir el archivo (Open),
Escribir en archivo (Print, Put o Write) o leerlo (Get, Line Input# ou Input#),
Cerrar el archivo (Close)
Acceso al contenido de los archivos mediante su n.º identificativo (handle)
|
Close |
Cierra un archivo previamente abierto con Open. |
|
Eof() |
Determina si el cursor del archivo ha llegado al final del archivo |
|
FileAttr() |
Devuelve el modo de acceso en que el archivo se ha abierto (handle) |
|
FreeFile |
Devuelve un n.º handle disponible antes de la apertura de un archivo. |
|
Get |
Lee un registro de archivo para insertarlo en una variable. |
|
Input |
Lee los datos de un archivo secuencial abierto. |
|
Line Input |
Lee una linea de un archivo. |
|
Loc() |
Devuelve la posición actual en un archivo abierto. |
|
Lof() |
Devuelve el tamaño de un archivo abierto (en bytes) |
|
Open |
Abre un canal de datos |
|
|
Escribe los datos en un archivo secuencial (linea no delimitada). |
|
Put |
Escribe un registro en un archivo. |
|
Reset |
Cierra todos los archivos abiertos y fuerza la escritura en disco del contenido de la memoria intermedia (buffers) de los archivos. |
|
Seek() |
Devuelve la posición de la siguiente escritura o lectura en un archivo abierto con la instrucción Open For Random. |
|
Write |
Escibe los datos en un archivo secuencial (linea, delimitador). |
¿Print o Write?
Print graba el texto mientras que Write inserta el texto con delimitadores que caracterizan el tipo de información (texto: ", hora y booleano: #). Estos delimitadores se desprecian cuando se leen posteriormente con Input
Modos de apertura (archivos de texto)
|
Escritura secuencial |
Open For Output |
Lectura secuencial |
Open For Input |
Para otros tipos de acceso (acceso directo o binario), utilice el «flujo» de la API.
Ejemplo de lectura secuencial de un archivo de texto
Lectura de un archivo identificado por su dirección URL.
Dim Handle As Integer, Linea As String, URLArchivo as String
Handle = FreeFile 'obtiene el n.º identificativo del archivo abierto
Open URLArchivo For Input As #Handle
'bucle para lectura linea a linea
Do While Not Eof(Handle)
Line Input #Handle, Line 'lectura de cada linea
Loop
Close #Handle
Ejemplo de escritura secuencial de un archivo de texto
Escritura en un archivo identificado por su dirección URL.
Dim Handle As Integer
Handle = FreeFile ' obtiene el n.º identificativo de archivo abierto
Open URLArchivo For Output As #Handle
'écritura linea a linea
Print #Handle, "Un Texto."
Print #Handle, "De nuevo otro texto..."
Print #Handle, "Para acabar."
Close #Handle
Usa la llamada a los servicios SimpleFileAccess y Stream de la API de LibreOffice.
Principio
Ejemplo: (vea el código siguiente).
Figura 2: Escritura de un archivo de texto

Pasos del proceso
Crear el objeto de acceso a los archivos.
Conectar el flujo correspondiente al tratamiento (según tipo de acceso).
Escribir en el archivo o leerlo (según el tipo de archivo).
En caso de escritura se debe purgar el flujo (.flush),
Cerrar el archivo (.closeXxx).
Acceso al contenido de los archivos
Servicio SimpleFileAccess (SFA)
|
openFileRead |
Abre el archivo en modo lectura. |
|
openFileWrite |
Abre el archivo en modo escritura. |
|
openFileReadWrite |
Abre el archivo en modo lectura y escritura. |
Servicios Flujo (InputStream, OutputStream y Stream)
Son los servicios «activos». Correspondencia entre los métodos del servicio SFA y los flujos:
|
Método SFA |
Servicio flujo |
|
openFileRead |
com.sun.star.io.InputStream o com.sun.star.io.TextInputStream |
|
openFileWrite |
com.sun.star.io.OutputStream o com.sun.star.io.TextOutputStream |
|
openFileReadWrite |
com.sun.star.io.Stream |
Servicio Stream
|
getInputStream |
Devuelve la parte InputStream del flujo lectura/escritura.
|
|
getOutputStream |
Devuelve la parte OutputStream del flujo lectura/escritura.
|
Servicio InputStream
|
readBytes |
Lee el número especificado de bytes. |
|
readSomeBytes |
Lee el número de bytes disponibles con el máximo especificado. |
|
skipBytes |
Salta el número especificado de bytes (valor positivo). |
|
available |
Indica el n.º de bytes que pueden ser leidos o saltados sin bloqueo |
|
closeInput |
Cierra el flujo. |
Servicio TextInputStream
Heredado de InputStream.
readLine: Lee el texto hasta encontrar un salto de linea (CR, LF, ou CRLF) o EOF y devuelve la cadena correspondiente (omitiendo CR ou LF).
Los caracteres leídos se convierten según la codificación especificada por setEncoding. Si se alcanza EOF antes de la ejecución del método devuelve una cadena vacía.
readString: Lee el texto hasta encontrar uno de los delimitadores o EOF. Y devuelve la cadena correspondiente.
CRLF No es el delimitador predeterminado Si no se ha indicado ningún delimitador o no se encuentra, se supone que es hasta EOF.Los caracteres leidos se convierten según la codificación especificada por setEncoding. Si se alcanza EOF antes de la ejecución del método devuelve una cadena vacía.
isEOF: Devuelve el estado de EOF.
Este estado no se puede detectar al intentar leer una cadena vacía porque esta respuesta puede ser válida para readLine() (cuando la linea está vacía) y readString() (cuando se suceden dos delimitadores).
setEncoding: Establece la codificación de caracteres (UTF-8 predeterminada). Los nombres utilizados son los que se encuentran en el documento: http://www.iana.org/assignments/character-sets (columna Name). El conjunto de caracteres disponibles dependen de la implementación.
Servicio OutputStream
|
writeBytes |
Escribe una secuencia completa en el flujo (llamada de bloqueo). |
|
flush |
Vacía la memoria intermedia (buffers) usada por el flujo |
|
closeOutput |
Se utiliza par indicar que se han escrito todos los datos. |
Service TextOutputStream (Heredado de OutputStream).
writeString: Escribe una cadena en el flujo utilizando la codificación definida por setEncoding.
setEncoding: Establece la codificación de caracteres (UTF-8 predeterminada).
Ejemplo: Lectura de un archivo de texto
Dim oSFA As Object, oInText As Object
Dim URLArchivo As String, Linea As String
oSFA = createUNOService("com.sun.star.ucb.SimpleFileAccess")
URLArchivo = ConvertToURL("C:\ruta\a\MiArchivo.txt")
oInText = createUNOService("com.sun.star.io.TextInputStream")
oInText.setInputStream(oSFA.openFileRead(URLArchivo))
Linea = oInText.readLine()
oInText.closeInput()
Ejemplo: Escritura en un archivo de texto
Dim oSFA As Object, oOutText As Object
Dim URLArchivo As String
oSFA = createUNOService("com.sun.star.ucb.SimpleFileAccess")
URLArchivo = ConvertToURL("C:\ruta\a\MiArchivo.txt")
oOutText = createUNOService("com.sun.star.io.TextOutputStream")
oOutText.setOutputStream(oSFA.openFileWrite(URLArchivo))
'Escritura (se debe especificar el delimitador de linea CRLF)
'- [empleo de CRLF (Windows)]
oOutText.WriteString("Hola Mundo" & Chr(13) & Chr(10))
oOutText.WriteString("Linea 2" & Chr(13) & Chr(10))
'vaciado de los buffers y cierre
oOutText.flush
oOutText.closeOutput()