Mostrando postagens com marcador Datas. Mostrar todas as postagens
Mostrando postagens com marcador Datas. Mostrar todas as postagens

quinta-feira, 23 de maio de 2013

LibreOffice: Como Copiar Textos de uma Planilha do Calc para uma Tabela do Writer

1- O Cenário

Creio que muitas pessoas já devam ter passado por este problema: após uma imensa jornada de trabalho, conseguem finalmente concluir uma linda planilha no Calc do LibreOffice. Esta planilha tem, naturalmente, uma coleção gigantesca de linhas, cada uma com muitos dados em várias colunas. Portanto, convém que este volume de informações não deva ser digitada novamente.
Contudo, para a apresentação final de seu trabalho, toda esta planilha, ou, quem sabe, parte dela, deve ser inserida no corpo de um texto maior, gerado no Writer do LibreOffice. Ocorre que estes dados se encaixam perfeitamente em uma tabela do texto, de modo que fiquem facilmente organizados, identificados e estratificados do discurso escrito presente no documento.
Assim, você marca e copia todas as células (das colunas e linhas da sua planilha) que deseja importar para a tabela do documento de texto e, ao clicar na primeira célula da tabela e tentar colar, surpreende-se com um comportamento estranho: todo o conteúdo é colado dentre de uma única célula, aquela onde você estava com o cursor. O Writer não consegue identificar no conteúdo a presença de diferentes células da planilha e fazer a correspondência para as células da tabela do texto.
E agora, como resolver isso??


2- A Solução

Fiquem calmos, é possível fazer esta operação, ainda que não tão automaticamente, mas sem dor. Basta seguir estes passos:

PASSO 01: Vamos à planilha do Calc e copiamos todas as células que desejamos importar para a tabela do editor de textos Writer.

Figura 01: Copiando uma seleção de células da planilha Calc do LibreOffice.



PASSO 02: Agora abrimos o texto do Writer e, em uma posição vazia e fora da tabela, selecionamos a opção Colar Especial do menu Editar (ou Control + Shift + V). Surge uma janela com opções especiais de colagem e selecionamos a opção Texto Formatado (RTF).

Figura 02: Janela de Colar Especial, do menu Editar.

 Selecionada esta opção, o conteúdo das células da planilha entrarão no formato de uma nova tabela, a partir da posição de seu cursor. Esta tabela já é uma tabela comum do Writer e você pode usá-la, adaptá-la ou formatá-la, se desejar.

Figura 03: Conteúdo da planilha do Calc inserido no formato de tabela do Writer.


PASSO 03: Porém, se você já tem uma tabela pronta, vazia e formatada em seu documento de texto e deseja inserir estes dados nela, basta copiar e colar normalmente, ou mesmo marcar e arrastar os valores, dentro do Writer. Neste caso, a tabela criada automaticamente no momento da colagem ficará vazia e, para apagá-la, basta selecionar todas as suas células e clicar no botão Apagar Linha.


3- Conclusões

 Este rápido artigo pretendeu ensinar uma técnica muito simples e rápida de migração de dados de uma planilha eletrônica do Calc do LibreOffice para uma tabela do Writer, sem perda de dados ou da formatação, como também sem qualquer esforço para redigitar todo ou parte dos dados. Possivelmente, versões futuras do LibreOffice permitirão a colagem direta destes conteúdos dentro de uma tabela pré-existente (ao menos é o que os desenvolvedores prometem...).
Espero sinceramente ter ajudado e, claro, como sempre pedimos: COMENTEM!!


sábado, 1 de novembro de 2008

Tutorial: Como Obter e Formatar Datas em Java

Mês passado, publiquei um extenso tutorial sobre como obter e formatar datas em javascript, dividido em duas partes: parte 01 e parte 02. Reparei que algumas pessoas, ao lidar com o mesmo problema, porém em java, têm iguais dificuldades, devido à maneira específica com que o objeto Date é tratado no momento de se formatar uma data.
Em java, uma data é comumente armazenada no objeto java.util.Date. Como em muitas outras lingugens, este objeto retém uma certa quantidade de informações internas além da data em si. Esta é representada por um número gigantesco e único, correspondete à quantidade de milissegundos decorridos desde a data convencionada como inicial (dependendo do caso, pode ser 01/01/1900, às 00:00:00, ou outra data parecida, anterior ou posterior, dependendo de qual objeto e qual linguagem você esteja utilizando) até a data do momento em que o objeto foi instanciado na memória. Por isso, converter este número imenso em uma data inteligível, com dia, mês, dia da semana, ano, hora, minuto, segundo e centésimo... isto é uma operação interna do objeto que envolve diversos cálculos, ou seja, não é simplesmente recuperar um dado guardadinho ali dentro.
Embora pareça complicado, formatar datas em java é muito simples!! Existe uma classe especial só para fazer o trabalho de tradução da formatação de data que o desenvolvedor deseja para o conteúdo que o objeto Date armazena em si. Esta classe é o SimpleDateFormat, do pacote java.text.
O SimpleDateFormat tem dois métodos de especial interesse:

  • format - recebe um objeto Date e retorna uma String formatada, segundo a configuração desejada;
  • parse - faz o inverso; recebe uma String e, baseado na configuração desejada, interpreta-a, gerando um objeto Date correspondete.
Como você já deve ter notado, para se formatar uma data é preciso, antes, informar como é esse formato que imaginamos. Em outras palavras, é preciso configurar o formatador. Felizmente, o SimpleDateFormat foi construído baseado em abstract factory (um padrão de projeto prórpio para este tipo de situação), e sua configuração é muito fácil!! Basta construí-lo passando uma String, com caracteres que representam as partes do formato de data que queremos. Exemplos:

SimpleDateFormat formatador1 = new SimpleDateFormat("dd/MM/yyyy")
(formataria datas para: 25/12/2008)
SimpleDateFormat formatador2 = new SimpleDateFormat("HH:mm:ss")
(formataria datas para apenas a hora: 23:45:02)

Apenas esta String é o suficiente para o SimpleDateFormat entender como você deseja o formato de sua data. Todavia, opcionalmente você ainda pode definir em que localidade você está! Isto é útil para dados de formatação que dependam de idioma e país, como o nome dos dias da semana ou do mês. Para fazer isto, basta acrescentar mais um argumento no construtor do SimpleDateFormat, o objeto Locale, do pacote java.util. O locale deve ser construído com as siglas da língua e do país, como nos exemplos:

Locale local1 = new Locale("pt", "BR"); //Português, Brasil
SimpleDateFormat formatador1 = new SimpleDateFormat("EEE", local1)
(formataria datas para: "Seg")
Locale local2 = new Locale("fr", "FR"); //Francês, França
SimpleDateFormat formatador1 = new SimpleDateFormat("EEE", local2)
(formataria datas para: "Lun")

No caso acima, "E" significa o nome do dia da semana. Ele foi repetido 3 vezes porque queríamos exatos 3 caracteres do nome. Para saber quais letras significam o que e como manipular a quantidade de caracteres de cada item, verifique a lista completa na documentação da Sun: aqui.

Exemplo 01: formatando uma data:

//Configurando tudo...
Locale local = new Locale("pt", "BR");
String dataHoraConfig = "dd/MM/yyyy HH:mm:ss";
SimpleDateFormat formatador = new SimpleDateFormat(dataHoraConfig, local);

//Obtendo e formatando a data...
Date data = new Date(); //Data do exato instante em que o objeto é carregado
String dataFormatada = formatador.format(data);

Isto cospirá algo como "01/11/2008 03:08:50".

Exemplo 02: recuperando o objeto Date correspondente a uma data formatada:

//Configurando tudo...
Locale local = new Locale("pt", "BR");
String dataHoraConfig = "dd/MM/yyyy HH:mm:ss";
SimpleDateFormat formatador = new SimpleDateFormat(dataHoraConfig, local);

//Obtendo o objeto Date...
String dataString = "01/11/2008 03:08:50";
Date data = formatador.parse(dataString);

Cuidado!

  • O parse pode falhar, então é preciso tratar a exceção ParseException;
  • O objeto Date tem sempre a precisão do milésimo de segundo. Se a sua String não chega até lá, o objeto terá os itens de maior precisão iniciados em zero. Exemplo: se a String informar apenas o ano "1980", o objeto Date será algo como "01/01/1980 00:00:00".

É isso aí, gente!! Espero ter ajudado!! Gostou?? Não gostou?? Comente!!

domingo, 21 de setembro de 2008

JavaScript Tutorial: O Objeto Date (Parte 2)

Esta é a segunda parte do tutorial. Você já leu a primeira parte??
Nesta parte, vamos aprender a personalizar o objeto Date, usando a palavra (ou keyword) prototype. O que vem a ser isto? Bom, sabemos que o javascript manipula, na memória, objetos e funções. Cada objeto pode ter propriedades, que são valores simples, ou funções, que são rotinas associadas ao objeto.
Existem objetos inerentes ao javascript, como o objeto Math, Date, etc. Através da palavra prototype, podemos modificar estes objetos, acrescentando a eles (ou a qualquer objeto do javascript previamente existente) propriedades e funções novas, declaradas por nós! Portanto, o prototype é uma excelente ferramenta de otimização e personalização. Vejamos como funciona:

Date.prototype.nomeDaPropriedade = 50;
Date.prototype.nomeDaFuncao = function(){
this.getTime();
};


No primeiro caso, estamos pegando o objeto Date, nativo do javascript, e, através do prototype, declaramos uma nova propriedade para ele, chamada "nomeDaPropriedade" e que terá valor "50". Para acessar esta propriedade, basta instanciar o objeto e usar o operador ponto ".":

var data = new Date();
window.alert(data.nomeDaPropriedade);

No segundo caso, fazemos o mesmo, mas agora estamos declarando uma função nova (e não uma propriedade), denominada "nomeDaFuncao". O código que esta função executará está dentro das chaves. As funções declaradas via prototype podem ou não ter valor de retorno, e podem receber nenhum ou quantos parâmetros quisermos, exatamente como qualquer função de javascript. Podemos, de dentro de uma função declarada via prototype, acessar qualquer propriedade ou função daquela instância do objeto, com o parâmetro "this".

Importante: não esqueça de colocar o ";" no final, após fechar a chave da função!! Muita gente erra isso!!


Para acesar esta função, basta instanciar o objeto e chamá-la:

var data = new Date();
window.alert(data.nomeDaFuncao());

Importante: não esqueça que, sendo uma função, é preciso chamá-la com o "()" no final de seu nome. Parece muito bobo, mas tem gente que erra isso e fica horas perdida procurando o erro...

Agora, vamos aplicar isto ao nosso caso, fazendo algo mais útil ao nosso objeto Date. As funções abaixo fazem:
ajustaDuasCasas: força que o número sempre tenha duas casas, mesmo menor que 10. Isto é bom para manter a formatação em datas e horas com valores menores que 10.
getDataFormatada: transforma a data do objeto (e não a atual!!) em uma String do tipo "07/09/2008".
getDataHoraFormatada: faz o mesmo que a de cima, mas acrescenta a hora: "07/09/2008 13:20:00".
getHoraFormatada: faz o mesmo, mas retorna apenas a hora: "13:20:00".

Date.prototype.ajustaDuasCasas = function(numero) {
if (!isNaN(numero)) {
if (numero < 10) {
return "0" + numero;
} else {
return numero;
}
} else {
return "00";
}
};

Date.prototype.getDataFormatada = function() {
var dia = this.ajustaDuasCasas(this.getDate());
var mes = this.ajustaDuasCasas(this.getMonth() + 1);
var ano = this.getFullYear();
return dia + "/" + mes + "/" + ano;
};

Date.prototype.getDataHoraFormatada = function() {
var dia = this.ajustaDuasCasas(this.getDate());
var mes = this.ajustaDuasCasas(this.getMonth() + 1);
var ano = this.getFullYear();
var hora = this.ajustaDuasCasas(this.getHours());
var minutos = this.ajustaDuasCasas(this.getMinutes());
var segundos = this.ajustaDuasCasas(this.getSeconds());
return dia + "/" + mes + "/" + ano + " " +
hora + ":" + minutos + ":" + segundos;
};

Date.prototype.getHoraFormatada = function() {
var hora = this.ajustaDuasCasas(this.getHours());
var minutos = this.ajustaDuasCasas(this.getMinutes());
var segundos = this.ajustaDuasCasas(this.getSeconds());
return hora + ":" + minutos + ":" + segundos;
};


Utilizando tudo isso:
var hoje = new Date();
window.alert(hoje.getDataFormatada());
window.alert(hoje.getDataHoraFormatada());
window.alert(hoje.getHoraFormatada());


Observe que isto funcionará com qualquer instância do objeto Date, formatando automaticamente qualquer valor que o objeto carregue. Assim, seu código fica bem mais simples e enxuto, claro e fácil de entender. As chances de erro são menores e o desempenho é maior.

  • Implementando um Relógio

O javascript provê uma função denominada setInterval(a, b), onde a é uma String representando uma chamada em javascript que será repetida continuamente e b é um inteiro representando o intervalo em milisegundos que o navegador esperará entre as repetições da chamada. Com isto é possível implementar um pequeno relógio:

function mostraRelogio(campoRelogio) {
if (campoRelogio != null) {
// Recarregando a hora a cada 100 milisegundos, para
// fazer o relógio andar.
setInterval("campoRelogio.innerHTML = (new Date()).getHoraFormatada()", 100);
}
}

CONCLUSÃO: utilizar o objeto Date do javascript é uma forma simples e fácil de diminuir a carga de seu portal, melhorar e otimizar o desempenho de seu sistema de informação e fazer inúmeros testes e validações antes de ir ao servidor. Utilizando a palavra-chave prototype, podemos adicionar ao objeto nativo funções e propriedades úteis, personalizadas e recorrentes em nosso sistema, evitando a aglomeração excessiva de funções externas e garantindo mais agilidade, simplicidade e clareza no código.

JavaScript Tutorial: O Objeto Date (Parte 1)

Quando criamos nosso sistema de informações, é apenas uma questão de tempo até precisarmos manipular, medir, alterar, calcular e comparar datas e horas. Quando nosso sistema é (como a grande maioria!) baseado em web, então grande parte desta etapa é feita no próprio navegador do cliente, via javascript, o que é muito bom, pois aumenta a produtividade, envitando posts desnecessários e diminuindo a carga sobre o servidor.
Interessante que tenho visto pessoas com dificuldade neste assunto, e nem sempre se acha um bom tutorial em português para ajudar. Assim, O Pajé ficou motivado a escrever este artigo, contendo todas as ferramentas básicas para aprender e utilizar o objeto Date do JavaScript sem medo. Como pretendo um tutorial abrangente, dividi-o em duas partes (em breve sairá do forninho a segunda!!).
Bom, vamos do começo: o objeto Date é o objeto responsável, no javascript, por lidar com informações de tempo, desde o ano atual até o último milisegundo, passando pelo dia da semana, mês, hora, minuto, etc. Se seu sistema contiver campos como Período, Data Inicial, Horário, Duração, Diurno, Noturno, Calendário, etc., então freqüentemente você precisará do objeto Date entrando em ação! E não se engane: estes campos são dos mais corriqueiros!!
Manipular as datas no javascript é bom porque evita que o usuário envie para o servidor informações que certamente não vão passar pela validação e vão ter que retornar ao mesmo ponto. Com Date, você pode validar se a data informada está correta, se o período compreende ao menos um valor mínimo, e se a data final é maior que a inicial, por exemplo.
Claro que, no servidor, você deverá revalidar tudo (não seja bobo!! Tem clientes tentando passar a perna também!!), mas, tendo uma validação prévia no cliente, então as chances da validação falhar no servidor e se retornar ao mesmo ponto são menores. Acredite: este tipo de artifício ajuda muito a desafogar seu servidor!!
Então vamos ao que interessa!! Antes de utilizar o objeto, é preciso criá-lo:

var data = new Date();

Isto cria um objeto Date válido, contendo a data e instante atual (do momento da criação). Mesmo que a data desejada seja outra, para começar é preciso instanciar assim.
Abaixo, as funções mais importantes do objeto Date e suas descrições:

var data = new Date();
// Número de millisegundos desde 01/01/1970 @ 00:00
data.getTime();
// Número de segundos (0-59)
data.getSeconds();
// Número de miutos (0-59)
data.getMinutes();
// Número da hora (0-23)
data.getHours();
// Número do dia da semana, sendo 0=domingo e 6=sábado
data.getDay();
// Dia do mês (0-31)
data.getDate();
// Número do mês. CUIDADO: 0=janeiro, e 11=dezembro.
// Muita gente erra achando que janeiro é mês 1!!
data.getMonth();
// Número do ano, com 4 dígitos
data.getFullYear();

Apenas com estes comandos já dá para resolver grande parte dos problemas. Lembre-se de que o objeto date suporta comparações com os operadores ">", "<", ">=", "<=", "+", "-" e que é sempre seguro, quando necessário, convertê-lo para inteiro com a função getTime(). Com estes operadores, podemos somar ou diminuir uma data da outra (importante para cálculo de períodos!!), podemos comparar qual data é maior e qual é menor (importante em validações), etc. Uma referência completa, embora exaustiva, sobre o objeto Date de javascript encontra-se aqui.


  • Definindo uma data específica
Claro que o "var data = new Date()" nem sempre é o que a gente quer. Muitas vezes, queremos que o objeto criado represente uma data específica, seja ela lida de um campo da tela, seja ela calculada de alguma forma. Assim, podemos utilizar outros construtores do objeto Date, conforme mostrado a seguir:

var hoje = new Date();
var anoQueVem = new Date('January 1, '+(hoje.getFullYear()+1));
var diasRestantes = anoQueVem - hoje;

Este construtor recebe uma String com o nome do mês, dia e ano. No código acima, também usamos os operadores para saber quanto tempo resta até o fim do ano. Assim, posso calcular os dias, minutos, segundos e milisegundos para o reveillón!! Se você tem um portal que espera um grande lançamento, é isto que você deve usar!!
Outra maneira de inserir uma data, utilizando apenas valores numéricos, é esta:

var dataNova = new Date(ano, mes, dia[, hora[, minuto[, segundo[,milisegundo]]]]);

Assim é possível se criar um objeto Date com o valor de qualquer data, até a precisão dos milisengundos. Lembre-se de que o valor do mês parece sempre diminuído de 1, porque janeiro=0, fevereiro=1, março=2, ..., dezembro=11!! Até o argumento "dia" é obrigatório, os outros são opcionais. Exemplos:

//Dia de natal: 25/12/2008.
var data1 = new Date(2008, 11, 25);

//Independência: 07/09/2001.
var data2 = new Date(2001, 8, 7);

//Meu almoço, no aniversário do Rio de Janeiro.
var data3 = new Date("March 20, 2008 12:20:00 pm");
var data4 = new Date(2008, 2, 20, 12, 20, 00);


Observe que data3 e data4 são iguais.

Ocorre menos assiduamente, mas, caso você tenha um número inteiro (geralmente advindo do em data.getTime()) e quer convertê-lo para uma data, basta usar a função estática Date.parse, ou o construtor que recebe um único inteiro:

var data1 = new Date(inteiro); //inteiro = número inteiro
var data2 = Date.parse(inteiro); //inteiro = número inteiro

É isso, gente!! Na segunda parte do tutorial, vamos fazer um aplicativo para mostrar a data e hora, e vamos construir um lindo relógio digital para seu portal!! Qualquer coisa (gostou, não gostou, ajudou, foi inútil, etc. e tal...), comentem!! É só clicar aí embaixo!!

Veja a continuação na segunda parte!!