Arquivos de outubro, 2008

Pra quem gosta de Deskmod e pra quem não sabe o que é

Postado por: Tiago Lemos em 30th out, 2008 | Categoria: Diversos

Você é um daqueles usuários que não está nem aí para sua área de trabalho? Você nunca trocou o papel de parede do seu PC? Então você nunca deve ter ouvido falar de Deskmod.

Eu sou um apaixonado por Deskmod. Mas o que é isso? Deskmod é a arte de personalizar sua área de trabalho, não é simplesmente trocar seu papel de parede, mas personalizar com programas que oferecem os mesmos comportamentos de diferentes SO, cores personalizadas, ícones do sistema personalizado, sons e mais .

Esse é o ganhador do mês de setembro do concuso de deskmod que acontece no WinAjuda.

Ganhador do concurso Deskmod do Mês no site WinAjuda

Ganhador do concurso Deskmod do Mês no site WinAjuda

O WinAjuda, DeskBrasil e o Sky Deskmod são uns dos sites que eu acompanho sobre o assunto.

Pra quem gosta de ter uma área de trabalho diferente e bonita vale a pena conferir. Em breve estarei postando um tutorial de como personalizar sua área de trabalho, e é claro que estarei personalizando meu PC.

Usando C# com a biblioteca SharpZipLib - Um forma rápida e fácil de compactar arquivos

Postado por: Tiago Lemos em 28th out, 2008 | Categoria: ASP.NET, C#

Está precisando compactar arquivos para a extensão .zip e não sabe como fazer isso?

A SharpZibLib (#ZipLib) é uma biblioteca que permitir compactar arquivos para os formatos: Zip, GZip, Tar e BZip2. É uma biblioteca toda escrita em C#, mas que pode ser utilizada em qualquer linguagem da plataforma .NET. Com essa biblioteca nós podemos compactar arquivos e determinar alguns parâmetros de configuração como por exemplo, nível de compactação, password e outros.

Mas como utilizar essa biblioteca?

Primeiro adicionamos a ICSharpCode.SharpZipLib.dll a pasta bin da solution, recompilamos o projeto e então continuamos com os seguintes códigos:

1 - Importe a biblioteca em sua página

using ICSharpCode.SharpZipLib.Zip;

2 - Crie um arquivo utilizando a classe File (o arquivo deve ter o nome com a extensão .zip). Declare um objeto do tipo ZipOutputStream passando como parâmetro o arquivo que acabamos de criar. Defina o grau de compactação do Zip (1 à 9). Finalize o arquivo e feche o mesmo.

ZipOutputStream zipOutPut = new ZipOutputStream(File.Create("D:/Projetos/Exemplos/CSharp/ZIP/NomeDoArquivo.zip"));
//Compactação level 9
zipOutPut.SetLevel(9);
zipOutPut.Finish();
zipOutPut.Close();

3 - Declare um objeto do tipo ZipFile passando como parâmetro o arquivo zip que foi criado acima. Libere o zip para receber arquivos.

ZipFile zip = new ZipFile("D:/Projetos/Exemplos/CSharp/ZIP/NomeDoArquivo.zip");
//Inicia a criação do ZIP
zip.BeginUpdate();

4 - Após liberar o zip para receber arquivos, basta adicionar o arquivos de qualquer formato ao ZipFile

//Adicionando arquivos previamente criados ao zipFile
string nomeZIP = "C:/temp/NomeArquivo.txt";
zip.NameTransform = new ZipNameTransform(nomeZIP.Substring(0, nomeZIP.LastIndexOf("/")));
zip.Add(nomeZIP);

nomeZIP = "C:/temp/NomeArquivo2.xls";
zip.NameTransform = new ZipNameTransform(nomeZIP.Substring(0, nomeZIP.LastIndexOf("/")));
zip.Add(nomeZIP);

5- Grave as ações realizadas no zip e feche o arquivo

zip.CommitUpdate();
zip.Close();

6 - Faça as alterações no ContentType para devolver o arquivo zip para o usuário

HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.Buffer = false;
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=NomeDoArquivo.zip");

7 - Crie um FileStream e um array de Byte, para poder retornar o zip para o usuário

FileStream inStr = null;
byte[] buffer = new byte[1024];
long byteCount;

8 - Leia o arquivo zip que foi criado no FileStream instanciado anteriormente. Percorra o FileStream até o final. Verifique se o usuário está conectado, se estiver escreva o arquivo para usuário e atualize a página.

inStr = File.OpenRead("D:/Projetos/Exemplos/CSharp/ZIP/NomeDoArquivo.zip");
while ((byteCount = inStr.Read(buffer, 0, buffer.Length)) > 0)
{
    if (Context.Response.IsClientConnected)
    {
        Context.Response.OutputStream.Write(buffer, 0, buffer.Length);
        Context.Response.Flush();
    }
}
Response.End();

Espero que todos tenham gostado. Em breve tem mais.

Exportando dados para Word e Excel usando C#

Postado por: Tiago Lemos em 24th out, 2008 | Categoria: C#, HTML, VB

Há algum tempo atrás tive um problema com exportação para Word e Excel, no componente RadGrid do Telerik. O problema estava na exportação dos dados para Word e Excel do Office 2007.

Em busca de uma solução que fosse resolver este problema de exportação, indiferente da versão do Office que o usuário possui em sua máquina, eu e meu Gerente de Projetos utilizamos um artifico do Office em que uma estrutura de tabela (table - HTML) é transformada em tabela para o Word ou para o Excel:

Abaixo a descrição de como pode ser feita essa exportação:

  1. Cria-se uma string vazia;
  2. Escreve na string uma estrutura de tabela em HTML, neste caso a tabela deverá ter os dados a serem exportados;
  3. Alteramos os ContentType e AddHeader da página que irá exportar os dados;
  4. Retorne o valor da string para o usuário.

Abaixo segue um exemplo do código para exportar dados:


     //Primeiro cria uma string
     string tabela = String.Empty;

     //Monte uma estrutura HTML
     tabela += <table>
     tabela += <tr><td>Informação 1</td><td>Informação 2</td></tr>
     tabela += <tr><td>Informação 3</td><td>informação 4</td></tr>
     tabela += </table>

     //Escolha se irá exportar para Word ou Excel
     HttpContext.Current.Response.ContentType = "application/vnd.doc";
     HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=Dados.doc");

     HttpContext.Current.Response.ContentType = "application/vnd.xls";
     HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=Dados.xls");

     //Define o Encoding da página
     HttpContext.Current.Response.ContentEncoding = Encoding.Default;

     //Escreva a string
     HttpContext.Current.Response.Write(tabela);
     HttpContext.Current.Response.End();
     

É uma solução simples que funciona tanto no Office (Word/Excel) 2003 e 2007. O código está escrito em C#, mas pode ser utilizado com VB sem nenhum problema.