sexta-feira, 5 de março de 2010

Começo a reparar que estava tudo a correr bem demais...

...quando me deparo que há pessoal que ignora princípios básicos de Engenharia de Software para que as coisas corram bem no futuro ou simplesmente tiraram o curso por correspondência!

quinta-feira, 4 de março de 2010

Apercebo-me que estava num ambiente de ditadura...

... pelo som das mensagens a cair no msn de uma pessoa aqui ao lado

sexta-feira, 5 de fevereiro de 2010

Fazer queries a um ficheiro Excel? É possível...

Estava eu certo dia a precisar de arranjar uma forma de extrair, de uma forma dinâmica, umas informações de um ficheiro Excel quando me pus a investigar o que haveria por ai.

Ora, aparentemente alguém com essa mesma necessidade decidiu desenvolver uma framework precisamente para este propósito. Designado por MetaModel esta framework, que segue a 3ª revisão da linguagem SQL, não serve necessariamente só para fazer queries a ficheiros Excel. Suporta também ficheiros CSV (comma separated values), access, SGBD's relacionais por JDBC, etc.

Isto é uma pequena peça de um grande puzzle chamado eobjects. Este site é dedicado ao desenvolvimento de soluções Open Source relacionadas com a temática de Business Intelligence e Data Warehousing. A sua estrela é sem dúvida o DataCleaner. Para mais informações consultar este link: http://eobjects.org/trac/wiki/DataQuality.

Voltando então às queries aos ficheiros Excel com um exemplo básico.

1- Supondo que tenho uma tabela em Excel com os seguintes dados:

Nomes
Talásio
Talassa
Taléia
Tales
Tália
Talásio
Tales
Tales
Talassa
Taléia
Tália

2- e com este pedaço de código:

public static void main(String[] args) {
DataContext data = DataContextFactory
.createExcelDataContext(new File(
"C:\\Documents and Settings\\Rafael\\workspace\\Apache POI\\wb.xls"));
Schema[] schemas = data.getSchemas();
for (int i = 0; i < schemas.length; i++) {
System.out.println("Existing schemas: " + schemas[i]);
}
Table[] sheets = schemas[1].getTables();
for (int i = 0; i < sheets.length; i++) {
System.out.println(sheets[i].getName());
}
Table table = data.getDefaultSchema().getTableByName("new Sheet");
Column colA = table.getColumnByName("Nomes");
Query q = new Query();
q.select(colA);
q.selectDistinct();
q.from(table);
DataSet dataSet = data.executeQuery(q);
while (dataSet.next()) {
System.out.println(dataSet.getRow());
}
}


3- temos este resultado com os nomes distintos da tabela anterior:

Existing schemas: Schema[name=information_schema]
Existing schemas: Schema[name=wb.xls]
new Sheet
Row[values={Talásio }]
Row[values={Talassa }]
Row[values={Tales }]
Row[values={Tália }]
Row[values={Taléia }]


Fantástico não é? Ora tentem fazer isto com as funções do Excel...