¿Cómo leer un fichero de Excel en ASP clásico?

Pues me encontraba estos días trabajando con una aplicación web antigua en ASP clásico que requería una nueva funcionalidad: importar datos que el cliente recibiría en una hoja de Excel, una hoja que en principio siempre tendrá el mismo formato. La duda era ¿cómo hago para leer el fichero de Excel con el viejo VBScript? Pues en este caso he usado el motor de Access 2010 (puede descargarse desde la web de Microsoft) y su conector OLEDB para tratar la hoja de Excel como si fuera una tabla SQL. Aquí os dejo un ejemplo del código:

Declare ExcelFile, Consulta, ExcelConnection, RSDatos
ExcelFile = "C:\Users\MiUsuario\MiCarpeta\MiExcel.xls"

Consulta= "SELECT [Campo1], [Campo2],[Campo3] FROM [Hoja1$]"
Set ExcelConnection = Server.createobject("ADODB.Connection")
ExcelConnection.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ExcelFile & ";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1"";"
SET RSDatos= Server.CreateObject("ADODB.Recordset")
RSDatos.Open Consulta, ExcelConnection

En resumen: creo una consulta para sacar los datos como si fuera un SQL, creo un objeto de conexión ADODB, me sirvo del motor de Access para pasarle como fuente de datos la ruta del fichero excel, creo un recordset y guardo los datos de la consulta en el mismo. Ahora ya puedo usar a mi gusto los datos almacenados en el recordset.

Generar un fichero de EXCEL con ASP

Una entrada rápida: queremos que una página ASP en lugar de mostrarnos la información en el navegador lo que haga sea generar un fichero de EXCEL y que se descargue en nuestro equipo ¿Es posible? Sí.

Solo necesitamos añadir dos cabeceras al inicio del documento:

Response.ContentType="application/vnd.ms-excel"
Response.AddHeader "Content-Disposition", "attachment; filename=NombreFichero.xls"

Emular el funcionamiento de un operador ternario ?: en ASP clásico con VBScript

Hemos hablado sobre el operador ternario ?: en Java o como emularlo en Python. Pero ¿Existe en el viejo VBScript? Pues no. ¿Qué soluciones tenemos?

Realmente cuando trabajamos en ASP Clásico el VBScript nos permite hacer un if-else en una sola línea tal que así:

If diaDeLaSemana < 6 Then seTrabaja = True Else seTrabaja = false

Por otra parte podríamos crear una función que emule su funcionamiento. Recibiría como parámetros una expresión que nos devuelva un valor booleano, una cadena que devolver en caso de que la expresión sea cierta y otra para el caso de que sea falsa:

Function IfT(bExpr, rVerdadera, rFalsa)
    If CBool(bExpr) Then
        IfT = rVerdadera
    Else 
        IfT = rFalsa
    End If
End Function

Veamos un ejemplo:

HoyQueHago = IfT(diaDeLaSemana < 6, "Currar", "Descansar")

Si el día de la semana es menor que seis (es decir, de lunes a viernes) devolvería «Currar» y si es mayor o igual (sábado o domingo) devolvería «Descansar«.

Transformar una fecha de formato anglosajón (mm.dd.yyyy) a formato europeo (dd/mm/yyyy) con ASP clásico

Vamos con una entrada cortita. En el trabajo todavía usamos ASP clásico en uno de los proyectos y cuando usamos un campo de fecha en HTML5 en la vista hay que andar transformando de formato europeo a anglosajón y viceversa. ¿Cómo hacemos en ASP clásico esto?

Supongamos que tenemos una cadena con la fecha en formato mm.dd.yyyy, por ejemplo recibimos el 11.30.2018 de nuestro campo Date. ¿Cómo procedemos?

arFech = split(".","11.30.2018")
strFechaEuro = arFecha(1) & "/" & arFecha(0) & "/" & arFecha(2)

De esta forma la cadena strFechaEuro almacenaría el valor «30/11/2018«

La instrucción Select…Case en Visual Basic

La instrucción Select…Case de Visual Basic tiene un funcionamiento similar al Switch…Case de C: nos permite evaluar el valor de una variable y ejecutar un determinado código según su valor, sin tener que acabar recurriendo a un enorme árbol de estructuras if/else anidadas. La variable se evaluará contra una serie de expresiones por orden descendente, parando en cuanto una de las evaluaciones sea verdadera.

Su sintaxis sería la siguiente:

SELECT mivariable
  CASE expresión1
   'código
  CASE expresión2
    'otro código
  CASE ELSE
    'Código por defecto
END SELECT

La variable mivariable del ejemplo sería la que vamos a evaluar. Puede ser una variable de los siguientes tipos: Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, SByte, Short, Single, String, UInteger, ULong, y UShort.

Tanto expresión1, como expresión2 y demás expresiones que queramos usar será valores o conjuntos de valores numéricos o de texto contra los que se evaluará mivariable. Puede responder a tres formas: un valor solo, una comparación con la sintaxis IS seguido de un operador de comparación (mayor, menor, igual, distinto) o un conjunto de valores, que puede mostrarse de dos formas: un grupo de valores separados por comas o un rango del que daremos el valor inicial y el final unidos por un TO.

Finalmente tenemos el CASE ELSE, esto es opcional y es un código que se ejecutará si el valor de mivariable no ha dado true en ninguna de sus evaluaciones.

Veamos una serie de ejemplos. Primero, veamos un código que asigna un valor de color de fondo a un grupo de usuarios:

SELECT Grupo
  CASE "Dirección"
    colorfondo="verde"
  CASE "Producción"
    colorfondo="gris"
  CASE ELSE
    colorfondo="rojo"
END SELECT

Segundo ejemplo, un código que asigna un grupo poblacional según la edad, evaluando por rangos:

SELECT Edad
  CASE 0 to 14
    grupo="Infantil"
  CASE 15 to 20
    grupo="juvenil"
  CASE 20 to 70
    grupo="adulto"
  CASE ELSE
    grupo="anciano"
END SELECT

Tercer ejemplo, en este caso con grupos de valores por comas. Evaluamos el último número de un código y marcamos si es par o impar (sí, ya se que es más fácil hacerlo con una operación de módulo, pero esto es un simple ejemplo teórico):

SELECT Numero
  CASE 1,3,5,7,9
    impar=True 
  CASE ELSE
    impar=False
END SELECT

Y vamos a cerrar con el cuarto ejemplo, usando una expresión aritmética para la evaluación, en este caso para los pesos de una competición de lucha:

SELECT Peso
  CASE IS < 48
    categoria="minimosca" 
  CASE IS < 51
    categoria="mosca" 
  CASE IS < 54
    categoria="gallo" 
  CASE IS < 57
    categoria="pluma" 
  CASE IS < 60
    categoria="ligero"
  CASE IS < 64
    categoria="superligero" 
  CASE IS < 69
    categoria="wélter" 
  CASE IS < 75
    categoria="mediano" 
  CASE IS < 81
    categoria="semipesado" 
  CASE IS = 91
    categoria="superpesado" 
END SELECT

Cómo hacer un Hello World! en distintos lenguajes de programación.

El Hello World es un ejercicio básico de programación. Casi en cualquier lenguaje de programación que estudies empezarás en la primera lección programando uno. Aquí te dejo diversos ejemplos en distintos lenguajes
, lo que además te permitirá ver algunas de las pequeñas diferencias que hay entre ellos.

ASP:

Response.Write "Hello World!" 

Script de Bash:

#!/bin/bash
echo "Hello, World!" 

C:

#include 
main(){
  printf ("Hello World!\n");
}

C++:

#include 
using namespace std;
void main(){
  cout << "Hello World!" << endl;
}

C#:

using System;
namespace HelloWorld
{
    class Hello 
    {
        static void Main() 
        {
            Console.WriteLine("Hello World!");            
        }
    }
}

Java:

class hellWorldJava{
  public static void main(String args[]){
    System.out.println("Hello World!");
  }
}

Javascript:

window.alert( 'Hello, world!' );

Objective C:

#import 

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
    }
    return 0;
}

Perl:

#!/usr/bin/perl
print “Hello World.\n”;

PHP:

echo "Hello World!";

Script de Powershell:

$strString = "Hello World"
write-host $strString

Python:

print "Hello, World!"

R:

print("Hello World!", quote = FALSE)

Ruby:

puts 'Hello world'