Secciones de la página

xls. tol


Declaraciones


Variables de control


Constantes


Funciones


Time oriented language


Árbol de ficheros

Funciones

Set XlsSetCtr()

Real XlsIsExcelXls()

Real XlsCopy()

Set XlsReadSheetOdbc()

Set XlsReadSheet()

Tol

Artículos del sitio

Presentación de Tol

Todos los programas

Simuladores visuales

Sitios que me gustan

Por categorías

Algoritmia

Búsqueda y ordenación

Computación fisiológica

Editorial y edición

Gráficos de datos

Herramientas y utilidades

Hipertexto

Informática forense

Lectura óptica de datos

Metaprogramación

No determinista

Ofimática

Recursión e iteración

Reglas y restricciones

Series y estadística









xls.tol de Xls.Reader

Leer ficheros Excel apoyandose en una conexion Odbc. Esta conexion ha de existir y, para no tener que crear una conexion Odbc para cada fichero Excel que hay que leer, ha de apuntar a un fichero Excel especial que hace de buffer temporal de lectura.

Declaraciones

Variables de control

  • Text XlsBuf
    Fichero auxiliar para leer Excel Xls.
  • Text XlsOdb
    Conexion ODBC por defecto para Excel Xls.

Constantes

  • Text Xls2By
    2 bytes del inicio de un Xls.

Funciones

  • Set XlsSetCtr(Text newBuf, Text newOdb)
    Memoriza el camino al fichero buffer Excel por defecto y a la conexion Odbc que se emplearan a partir de la llamada a esta funcion, esto es, actualiza los parametros de control. Retorna los valores anteriores por si se desean restaurar posteriormente.
  • Real XlsIsExcelXls(Text inpPth)
    Retorna cierto si inpPth tiene la extension de un fichero Excel Xls y sus 2 primeros bytes coinciden con los de un fichero Excel Xls.
  • Real XlsCopy(Text filInp, Text filOut)
    Retorna cierto si pueda copiar el fichero filInp sobre filOut. No se copia si el origen no existe o no es un Excel Xls.
  • Set XlsReadSheetOdbc(Text xlsPth, Text shtNam, Text iniPos, Text endPos, Text xlsOdb, Text xlsBuf)
    Retorna una tabla, como conjunto de filas de conjunto de celdas, resultado de leer del fichero Excel Xls de ruta xlsPth, la hoja shtNam, desde la posicion iniPos a la posicion endPos. Esta lectura Odbc mediante Sql asume que la primera fila del fichero Excel son los nombres de los campos. Las posiciones iniciales y finales pueden ser del tipo: - A y K: lee de la columna A a la columna K todas las filas hasta el final o - B4 y Z9: lee el rectangulo de celdas derminado por esas 2 esquinas. Esta funcion recibe como parametros la conexion Odbc xlsObc y la ruta al fichero buffer Excel en el parametro xlsBuf. Retorna el conjunto vacio en caso de error.
  • Set XlsReadSheet(Text xlsPth, Text shtNam, Text iniPos, Text endPos)
    Retorna una tabla, como conjunto de filas de conjunto de celdas, resultado de leer del fichero Excel Xls de ruta xlsPth, la hoja shtNam, desde la posicion iniPos a la posicion endPos. Esta lectura Odbc mediante Sql asume que la primera fila del fichero Excel son los nombres de los campos. Las posiciones iniciales y finales pueden ser del tipo: - A y K: lee de la columna A a la columna K todas las filas hasta el final o - B4 y Z9: lee el rectangulo de celdas derminado por esas 2 esquinas. Esta funcion asume la conexion Odbc (XlsOdb) y la ruta al fichero buffer Excel por defecto (XlsBuf).

Variables de control

Text XlsBuf

//////////////////////////////////////////////////////////////////////////////
Text XlsBuf = "tmp/excelbuffer.xls"; // 
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Fichero auxiliar para leer Excel Xls.",
XlsBuf);
//////////////////////////////////////////////////////////////////////////////

Text XlsOdb

//////////////////////////////////////////////////////////////////////////////
Text XlsOdb = "ExcelBuffer";
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Conexion ODBC por defecto para Excel Xls.",
XlsOdb);
//////////////////////////////////////////////////////////////////////////////

Constantes

Text Xls2By

//////////////////////////////////////////////////////////////////////////////
Text Xls2By = Char(208)+Char(207);
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"2 bytes del inicio de un Xls.",
XlsOdb);
//////////////////////////////////////////////////////////////////////////////

Funciones

Set XlsSetCtr()

//////////////////////////////////////////////////////////////////////////////
Set  XlsSetCtr(Text newBuf, // Camino del fichero Excel buffer por defecto
               Text newOdb) // Identificador Odbc por defecto
//////////////////////////////////////////////////////////////////////////////
{
  Set  oldVal = SetOfSet(Copy(XlsBuf), Copy(XlsOdb)); // Valores actuales
  Text(XlsBuf:=Copy(newBuf)); // Memoriza el nuevo buffer
  Text(XlsOdb:=Copy(newOdb)); // Memoriza la nueva conexion Odbc
  oldVal // Retorna los antiguos valores
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Memoriza el camino al fichero buffer Excel por defecto y a la conexion Odbc
que se emplearan a partir de la llamada a esta funcion, esto es, actualiza
los parametros de control.
Retorna los valores anteriores por si se desean restaurar posteriormente.",
XlsSetCtr);
//////////////////////////////////////////////////////////////////////////////

Real XlsIsExcelXls()

//////////////////////////////////////////////////////////////////////////////
Real XlsIsExcelXls(Text inpPth) // Input path, the Xls Excel file path
//////////////////////////////////////////////////////////////////////////////
{
  If(!TextEndAt(ToLower(inpPth), ".xls"), FALSE, // Comprobar extension
  {
    Text ini2Ch = Sub(ReadFile(inpPth),1,2);
    ini2Ch == Xls2By                             // Comprobar el inicio
  })
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna cierto si inpPth tiene la extension de un fichero Excel Xls y
sus 2 primeros bytes coinciden con los de un fichero Excel Xls.",
XlsIsExcelXls);
//////////////////////////////////////////////////////////////////////////////

Real XlsCopy()

//////////////////////////////////////////////////////////////////////////////
Real XlsCopy(Text filInp, // Input file path
             Text filOut) // Output file path
//////////////////////////////////////////////////////////////////////////////
{
  Text dos(Text pth) { Char(34)+Replace(pth, "/", "\\")+Char(34) };
  
  If(!FileExist    (filInp), FALSE, // Si el origen no existe no se copia
  If(!XlsIsExcelXls(filInp), FALSE, // Si no es Excel Xls no se copia
      System("copy " + dos(filInp) + " " + dos(filOut))))
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna cierto si pueda copiar el fichero filInp sobre filOut.
No se copia si el origen no existe o no es un Excel Xls.",
XlsCopy);
//////////////////////////////////////////////////////////////////////////////

Set XlsReadSheetOdbc()

//////////////////////////////////////////////////////////////////////////////
Set XlsReadSheetOdbc(Text xlsPth, // Direccion del fichero Excel
                     Text shtNam, // Nombre de la hoja a leer (sin $)
                     Text iniPos, // Posicion inicial tipo A1 o A
                     Text endPos, // Posicion final tipo Z9 o Z
                     Text xlsOdb, // Nombre de la conexion Odbc
                     Text xlsBuf) // Rura del buffer Odbc
//////////////////////////////////////////////////////////////////////////////
{
  If(!XlsCopy(xlsPth, xlsBuf), Empty, // No se puede copiar
  {
    Real xlsOpn = DBOpen(xlsOdb, "", ""); // Sin usuario ni password
    Text xlsSql = "select * from ["+shtNam+"$"+iniPos+":"+endPos+"];";
    Set  xlsTab = DBTable(xlsSql);
    Real DBClose(xlsOdb);
    xlsTab
  })
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna una tabla, como conjunto de filas de conjunto de celdas, resultado
de leer del fichero Excel Xls de ruta xlsPth, la hoja shtNam,
desde la posicion iniPos a la posicion endPos.
Esta lectura Odbc mediante Sql asume que la primera fila del fichero Excel
son los nombres de los campos.
Las posiciones iniciales y finales pueden ser del tipo:
- A y K: lee de la columna A a la columna K todas las filas hasta el final o
- B4 y Z9: lee el rectangulo de celdas derminado por esas 2 esquinas.
Esta funcion recibe como parametros la conexion Odbc xlsObc y la ruta al
fichero buffer Excel en el parametro xlsBuf.
Retorna el conjunto vacio en caso de error.",
XlsReadSheetOdbc);
//////////////////////////////////////////////////////////////////////////////

Set XlsReadSheet()

//////////////////////////////////////////////////////////////////////////////
Set XlsReadSheet(Text xlsPth, // Direccion del fichero Excel
                 Text shtNam, // Nombre de la hoja a leer (sin $)
                 Text iniPos, // Posicion inicial tipo A1 o A
                 Text endPos) // Posicion final tipo Z9 o Z
//////////////////////////////////////////////////////////////////////////////
{ XlsReadSheetOdbc(xlsPth, shtNam, iniPos, endPos, XlsOdb, XlsBuf) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna una tabla, como conjunto de filas de conjunto de celdas, resultado
de leer del fichero Excel Xls de ruta xlsPth, la hoja shtNam,
desde la posicion iniPos a la posicion endPos.
Esta lectura Odbc mediante Sql asume que la primera fila del fichero Excel
son los nombres de los campos.
Las posiciones iniciales y finales pueden ser del tipo:
- A y K: lee de la columna A a la columna K todas las filas hasta el final o
- B4 y Z9: lee el rectangulo de celdas derminado por esas 2 esquinas.
Esta funcion asume la conexion Odbc (XlsOdb) y la ruta al fichero buffer Excel
por defecto (XlsBuf).",
XlsReadSheet);
//////////////////////////////////////////////////////////////////////////////

Time oriented language

//////////////////////////////////////////////////////////////////////////////
// FILE    : xls.tol
// AUTHOR  : http://www.asolver.com
// PURPOSE : Leer ficheros Excel apoyandose en una conexion Odbc.
// Esta conexion ha de existir y, para no tener que crear una conexion Odbc
// para cada fichero Excel que hay que leer, ha de apuntar a un fichero Excel
// especial que hace de buffer temporal de lectura.
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
// CONTROLS
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
Text XlsBuf = "tmp/excelbuffer.xls"; // 
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Fichero auxiliar para leer Excel Xls.",
XlsBuf);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Text XlsOdb = "ExcelBuffer";
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Conexion ODBC por defecto para Excel Xls.",
XlsOdb);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
// CONSTANTS
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
Text Xls2By = Char(208)+Char(207);
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"2 bytes del inicio de un Xls.",
XlsOdb);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
// FUNCTIONS
//////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////
Set  XlsSetCtr(Text newBuf, // Camino del fichero Excel buffer por defecto
               Text newOdb) // Identificador Odbc por defecto
//////////////////////////////////////////////////////////////////////////////
{
  Set  oldVal = SetOfSet(Copy(XlsBuf), Copy(XlsOdb)); // Valores actuales
  Text(XlsBuf:=Copy(newBuf)); // Memoriza el nuevo buffer
  Text(XlsOdb:=Copy(newOdb)); // Memoriza la nueva conexion Odbc
  oldVal // Retorna los antiguos valores
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Memoriza el camino al fichero buffer Excel por defecto y a la conexion Odbc
que se emplearan a partir de la llamada a esta funcion, esto es, actualiza
los parametros de control.
Retorna los valores anteriores por si se desean restaurar posteriormente.",
XlsSetCtr);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Real XlsIsExcelXls(Text inpPth) // Input path, the Xls Excel file path
//////////////////////////////////////////////////////////////////////////////
{
  If(!TextEndAt(ToLower(inpPth), ".xls"), FALSE, // Comprobar extension
  {
    Text ini2Ch = Sub(ReadFile(inpPth),1,2);
    ini2Ch == Xls2By                             // Comprobar el inicio
  })
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna cierto si inpPth tiene la extension de un fichero Excel Xls y
sus 2 primeros bytes coinciden con los de un fichero Excel Xls.",
XlsIsExcelXls);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Real XlsCopy(Text filInp, // Input file path
             Text filOut) // Output file path
//////////////////////////////////////////////////////////////////////////////
{
  Text dos(Text pth) { Char(34)+Replace(pth, "/", "\\")+Char(34) };
  
  If(!FileExist    (filInp), FALSE, // Si el origen no existe no se copia
  If(!XlsIsExcelXls(filInp), FALSE, // Si no es Excel Xls no se copia
      System("copy " + dos(filInp) + " " + dos(filOut))))
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna cierto si pueda copiar el fichero filInp sobre filOut.
No se copia si el origen no existe o no es un Excel Xls.",
XlsCopy);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Set XlsReadSheetOdbc(Text xlsPth, // Direccion del fichero Excel
                     Text shtNam, // Nombre de la hoja a leer (sin $)
                     Text iniPos, // Posicion inicial tipo A1 o A
                     Text endPos, // Posicion final tipo Z9 o Z
                     Text xlsOdb, // Nombre de la conexion Odbc
                     Text xlsBuf) // Rura del buffer Odbc
//////////////////////////////////////////////////////////////////////////////
{
  If(!XlsCopy(xlsPth, xlsBuf), Empty, // No se puede copiar
  {
    Real xlsOpn = DBOpen(xlsOdb, "", ""); // Sin usuario ni password
    Text xlsSql = "select * from ["+shtNam+"$"+iniPos+":"+endPos+"];";
    Set  xlsTab = DBTable(xlsSql);
    Real DBClose(xlsOdb);
    xlsTab
  })
};
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna una tabla, como conjunto de filas de conjunto de celdas, resultado
de leer del fichero Excel Xls de ruta xlsPth, la hoja shtNam,
desde la posicion iniPos a la posicion endPos.
Esta lectura Odbc mediante Sql asume que la primera fila del fichero Excel
son los nombres de los campos.
Las posiciones iniciales y finales pueden ser del tipo:
- A y K: lee de la columna A a la columna K todas las filas hasta el final o
- B4 y Z9: lee el rectangulo de celdas derminado por esas 2 esquinas.
Esta funcion recibe como parametros la conexion Odbc xlsObc y la ruta al
fichero buffer Excel en el parametro xlsBuf.
Retorna el conjunto vacio en caso de error.",
XlsReadSheetOdbc);
//////////////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////////////
Set XlsReadSheet(Text xlsPth, // Direccion del fichero Excel
                 Text shtNam, // Nombre de la hoja a leer (sin $)
                 Text iniPos, // Posicion inicial tipo A1 o A
                 Text endPos) // Posicion final tipo Z9 o Z
//////////////////////////////////////////////////////////////////////////////
{ XlsReadSheetOdbc(xlsPth, shtNam, iniPos, endPos, XlsOdb, XlsBuf) };
//////////////////////////////////////////////////////////////////////////////
PutDescription(
"Retorna una tabla, como conjunto de filas de conjunto de celdas, resultado
de leer del fichero Excel Xls de ruta xlsPth, la hoja shtNam,
desde la posicion iniPos a la posicion endPos.
Esta lectura Odbc mediante Sql asume que la primera fila del fichero Excel
son los nombres de los campos.
Las posiciones iniciales y finales pueden ser del tipo:
- A y K: lee de la columna A a la columna K todas las filas hasta el final o
- B4 y Z9: lee el rectangulo de celdas derminado por esas 2 esquinas.
Esta funcion asume la conexion Odbc (XlsOdb) y la ruta al fichero buffer Excel
por defecto (XlsBuf).",
XlsReadSheet);
//////////////////////////////////////////////////////////////////////////////

Árbol de ficheros

Xls.Reader funciones de lectura de hojas Excel Xls a través de una conexión Odbc

  • make.tol programa de test de las funciones de lectura de Excel con Odbc
  • make.bat mandato de ejecución del programa de test de lectura Excel
  • tol directorios de fichero con código fuente Time Oriented Languaje
    • cmm funciones comunes del programa de lectura con Odbc de Excel Xls
      • xls.tol librería de funciones para leer Excel Xls a través de Odbc
    • inc.tol para la inclusión de ficheros en lenguaje de programación Tol
  • lectura.excel.xls.odbc.png imagen de la lectura Tol de un fichero Excel a través de Odbc
  • xls_reader.pdf documento de funciones de lectura con Odbc de ficheros Excel Xls

2015 asolver.com | Aviso legal | XHTML | Δ Θ Ξ | Creative Commons | Mapa y funciones del sitio

Tol