Arquivo da categoria: Desenvolvimento

Novidades, críticas, comentários sobre o desenvolvimento e programação de sistemas, assunto que tanto agrada este autor.

C# – Adicionando um ícone no .exe usando compilador csc (C# Compiler)

Coisa rápida. A necessidade veio do fórum, onde o colega rilton, especificamente na discussão do post Excel – Ativando Macros Automaticamente, onde um executável produzido pelo tutorial é gerado se uma identidade visual, ficando algo como:

Executável sem ícone

Mas é claro que se quisermos transformar isso num produto, o ideal e que esse ícone fosse algo mais apresentável. Isso é possível facilmente através de ferramentas como o Visual Studio, como programadores .NET já o sabem. A boa notícia é que isso também é possível na linha de comando!

Isso é feito através do parâmetro do compilador csc (C# [Sharp] Compiler) chamado win32icon. Nele você deve mencionar o caminho de um arquivo de imagem com a extensão .ico (você pode baixar um exemplo aqui).

Para facilitar, coloque o arquivo .ico dentro da pasta do .csc a ser compilado e no Promp de Comand (veja como fazer isso aqui) use a seguinte sintaxe:

csc /win32icon:excel.ico AbreExcelComMacros.cs

O resultado é algo assim:

Excel.ico Executável com ícone

Note que o executável agora possui o mesmo ícone que o arquivo .ico.

Você ver os detalhes dessa opção no link oficial da Microsoft: http://msdn.microsoft.com/pt-br/library/2aaxe43f.aspx

Bom proveito!

Web – Aprendendo a dominar o Chrome DevTools (e porque você precisa saber disso!)

Google Developer

O Chrome definitivamente tomou seu espaço, tanto no coração dos usuários como no dos desenvolvedores.

Depois do Firefox com seus indispensáveis plugins Firebug e Web Developer, o Chrome (e outros navegadores) correram atrás para oferecer algo no mesmo nível. O fato é que a equipe do Google conseguiu. Pelo menos da experiência que tenho no desenvolvimento Web, o Firefox com seus plugins já facilitou um mundo com essas ferramentas, permitindo edição de CSS e HTML direto na página e também depuração (ou debug) de código Javascript, com a adição de mais alguns plugins.

Pois bem, o que com o Firefox se fazia depois de alguma configuração, o Chrome trouxe nativamente, fácil de acessar e tão completo quanto! A esse conjunto de funcionalidades ele deu o nome de Chrome DevTools. Se você está num Chrome neste momento(desktop), basta ir ao menu do mesmo, Ferramentas->Ferramentas para Desenvolvedor (Tools->Developer Tools).

Seu Chrome deverá mostrar uma barra de ferramentas na parte inferior do mesmo:

Chrome Dev Tools ativado

E é aqui que a brincadeira começa. Você tem domínio absoluto do conteúdo da página e pode praticamente alterar todo seu comportamento, fazer checagens, depurar código, controlar todos os arquivos que pertencem a esta página, quais as falhas, os erros, etc. A partir daqui, não me prolongarei, deixando apenas claro que se você é um desenvolvedor web, planeja ser ou se ao menos a estrutura de páginas web lhe interessam, como no caso de profissionais de usabilidade, acessibilidade e SEO, você PRECISA conhecer do Chrome DevTools!

Ele está praticamente se tornando um padrão na internet. É claro, um desenvolvedor web quer que seu site funcione em todos os navegadores, mas quando você coloca a disposição um conjunto tão poderoso de ferramentas, você faz que com a comunidade acabe preferindo sempre produzir conteúdo para tal. Aconteceu com o Internet Explorer. Prevejo que logo acontecerá com o Chrome.

Quer conhecer mais do Chrome DevTools? Deixarei abaixo links de duas séries de vídeos ótimos que ensinam os segredos dessa funcionalidade.

Explore and MasterChrome DevTools (vídeo, inglês, gratuito)

Criado em parceria com o Google e o Code School, um de meus sites de cursos de programação favorito, essa série passa quase todos os recursos da ferramenta, incluindo testes no final de cada lição.

Pode ser acessado em: http://discover-devtools.codeschool.com/

Segredos do Chrome DevTools (vídeo, português, gratuito)

O Google Developers tem um canal específico de vídeos no Youtube. Esta semana, em parceria com o Expert Zeno Rocha, o canal publicou em português uma série chamada “Segredos do Chrome DevTools”, onde é explicado rapidamente o funcionamento da ferramenta.

Pode ser acessado em: https://www.youtube.com/watch?v=XUgfwYzv-WQ

Concluindo

Como já escrevi acima, se você tem algum envolvimento com web, mesmo que seja uma linha de uma página, conhecer as capacidades do Chrome DevTools é uma obrigatoriedade atualmente.

Bons estudos!

Excel – Ativando Macros Automaticamente

Excel Macros Ativar Para Sempre
Eis um assunto polêmico. Tão polêmico que desde a primeira versão vez em que tive contato com o Microsoft Excel e VBA, ouço falar dele. Para quem programa em VBA, ter as macros ativadas é um requisito para que todo seu código, fruto de suas longas horas de trabalho façam algum sentido na vida de seus usuários e clientes.

Infelizmente, não há como forçar sua ativação pelo próprio Excel. É preciso intervenção externa, seja via configuração (nível de segurança de macros) ou por aplicação externa. Existe a opção de certificados digitais, que é mais segura, mas exigem um nível de conhecimento e acesso ao computador muito específico. Não vou entrar em detalhes, pois acredito que se chegou até aqui, já deve ter passado por tudo isso.

A opção que vamos explorar para obter essa façanha é a “aplicação externa”, onde vamos produzir um aplicativo em um linguagem de programação que não o VBA para ativar as automaticamente as macros. A escolha desta opção se dá, principalmente pelo fato de facilitar a distribuição, uma vez que não é preciso ter acesso a máquina do usuário ou qualquer outra configuração. É a abordagem perfeita para aqueles que distribuem suas planilhas para clientes a distância.

O aplicativo externo

Utilizarei a linguagem C# rodando sobre .NET. Se não a conhece, recomendo dar uma lida neste curso, até porque, todas as instruções para seguir os passos do aplicativo que vamos construir estão nele.

O motivo da escolha é porque, primeiro, já trabalho com ela há mais de 10 anos (UAU!). Segundo, ela tem sido a linguagem  mais utilizada para produzir aplicações para Windows na última década e vem sendo atualizada constantemente. Terceiro, se está lendo este artigo de um computador com Windows, você provavelmente já a tem instalada, tanto para executar como para criar aplicativo.

Nosso aplicativo será responsável por executar o Microsoft Excel, abrir o arquivo  que contém as nossas macros com elas ativadas, sem intervenção  do usuário. Bom demais para ser verdade não? Pois é isso mesmo que iremos fazer.

Criando o aplicativo

Passarei as instruções para que você possa criar o aplicativo sem precisar de programas adicionais. No futuro, você poderá facilitar o processo utilizando ferramentas mais avançadas, como o Visual Studio Express (que possui versões gratuitas). Para o momento, usaremos o Bloco de Notas e o compilador que vem com o .NET Framework, já instalado no seu Windows.

Vamos começar. Primeiro, crie uma pasta no seu disco no caminho:

C:\ExcelMacros.

É aqui que vamos trabalhar neste tutorial. Esse caminho não é obrigatório. No produto final, ele poderá estar onde quiser.

Obtenha seu arquivo Excel com suas macros. De preferência, coloque uma macro no Auto_Open ou no Workbook_Open para ter a visão imediata de que as macros estão sendo executadas. Salve o arquivo dentro da pasta que acabamos de criar acima. Para exemplo, vou usar um arquivo chamado ExcelComMacros.xlsm com o seguinte código VBA:

Private Sub Workbook_Open()
    MsgBox "Funcionou!"
End Sub

Dessa forma, terei certeza se o código funcionou assim que executar o aplicativo.

Agora, abra o Bloco de Notas e insira nele o seguinte código:

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Threading;
using System.Windows.Forms;
 
    static class Program
{
	// variáveis de instãncia
	static object oExcel = null;
	static object oBooks = null;
	static object oBook = null;
	static object oMissing = System.Reflection.Missing.Value;
	static System.Globalization.CultureInfo ci = Thread.CurrentThread.CurrentCulture;
 
	[STAThread]
	static void Main()
	{
		string CaminhoDoArquivo = @"C:\ExcelMacros\ExcelComMacros.xlsm";
 
		if (ExcelEstaInstalado())
		{
			try
			{
				if (System.IO.File.Exists(CaminhoDoArquivo))
				{
					AbrirArquivo(CaminhoDoArquivo); 
				}
				else
				{
					MessageBox.Show(string.Format("O arquivo {0} não foi encontrado", CaminhoDoArquivo));
				}
			}
			catch (System.IO.IOException)
			{
				MessageBox.Show("Erro de acesso ao arquivo. Verifique o arquivo de configuração ou as permissões de pasta");
			}
		}
		else
		{
			MessageBox.Show("Não foi possível encontrar a instalação do Microsoft Excel no seu computador");
		}
 
		Application.Exit();
	}
 
	private static void AbrirArquivo(string caminhoDoArquivo)
	{
		object oFileName = caminhoDoArquivo;
		oExcel = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"));
		oExcel.GetType().InvokeMember("AutomationSecurity", BindingFlags.SetProperty, null, oExcel, new object[] { 1 }, ci);
		oExcel.GetType().InvokeMember("Visible", BindingFlags.SetProperty, null, oExcel, new object[] { true }, ci);
		oBooks = oExcel.GetType().InvokeMember("Workbooks", BindingFlags.GetProperty, null, oExcel, null, ci);
		oBook = oBooks.GetType().InvokeMember("Open", BindingFlags.InvokeMethod, null, oBooks, new object[] { oFileName, oMissing, false }, ci);
	}
 
	public static bool ExcelEstaInstalado()
	{
		Type officeType = Type.GetTypeFromProgID("Excel.Application");
 
		if (officeType == null)
		{
			return false;
		}
		else
		{
			return true;
		}
	}
}

Salve o arquivo com o seguinte nome e caminho:

C:\ExcelMacros\AbreExcelComMacros.cs

A extensão “.cs” é própria para arquivos da linguagem C#. Como o C# é uma linguagem compilada e não script (ver mais no curso já citado), precisamos compilar nosso pequeno programa para que ele se torne um executável. Para isso, no seu computador, navegue até a pasta:

C:\Windows\Microsoft.NET\Framework

Caso seu Windows seja 64bit, a pasta alvo será “Framework64”. Dentro desta pasta, você verá todas as versões do .NET Framework, necessários para executar programas em C# instalados no seu computador. Em nosso caso, vamos utilizar a versão v2.0.50727, ou simplesmente versão 2.0, que tem tudo o que precisamos e também porque temos mais certeza de que os computadores dos clientes o terão instalado.

Agora, abra o Prompt de Comando do Windows (sim, aquela tela preta esquisita) executando-a em modo administrador. Nele, navegue até a pasta que encontramos logo acima com o comando:

cd C:\Windows\Microsoft.NET\Framework\v2.0.50727

Nessa pasta, existe o executável chamado csc.exe (CSharp Compiler), que é nosso compilador, ou seja, o cara que vai transformar nosso “.cs” em um “.exe” pra lá de útil. Se algum dia chegou a estudar Java, ele é equivalente ao “javac”.

Por fim, vamos compilar nosso programa. Execute a seguinte linha de comando:

csc /target:winexe /out:”C:\ExcelMacros\AbreExcelComMacros.exe” “C:\ExcelMacros\AbreExcelComMacros.cs”

O que isso faz? Gera um arquivo “.exe” do nosso código C# pronto para ser executado. Se alguma coisa der errado aqui, como alguma mensagem de erro do compilador, volte e recomece desde a criação da pasta.

Os três parâmetros passados para o compilador foram:

  • out: o caminho do arquivo de saída
  • target: o tipo de aplicativo gerado, no caso, um Windows Application
  • no fim de tudo, o arquivo com o código fonte da aplicação

O resultado será provavelmente este:

A pasta C:\ExcelMacros após a compilação do aplicativo
A pasta C:\ExcelMacros após a compilação do aplicativo

Em destaque, nosso arquivo .exe gerado. Agora, execute-o (duplo-clique, enter, etc). Se tudo der certo, você verá seu arquivo Excel ser aberto com as macros ativadas.

Como funciona?

Aqui, há algumas coisas para explicar. Como a intenção aqui é ser simples, vou resumir ao máximo:

O código que faz a maior parte da mágica está dentro do método AbrirArquivo, que recebe o caminho do arquivo no Excel no disco. O código cria uma instância o aplicativo Excel, o que é bastante trivial até mesmo no VBA. A grande sacada está na propriedade AutomationSecurity, que aqui é definida para o nível de segurança mínimo, o que faz que com o Excel, neste contexto, aceite executar as macros automaticamente.

O resto é simples, abre o arquivo, define o aplicativo como visível, etc. Há algumas verificações “bônus”, como checar se o arquivo existe ou se o Excel está instalado no método ExcelEstaInstalado.

Outro detalhe que merece ser mencionado é o fato do código usar Reflection (no linguajar do VB, Late Binding) ao invés de fazer referência a bibliotecas. O motivo é que o Excel e todo o Office tem APIs versionadas. Se você fizer um código fazendo referência para a versão 2010, abrir na 2007 daria conflito. O código como está, evita esse problema.

Tudo pronto

De posse desta façanha, você pode agora distribuir suas planilhas com este arquivo de apoio que servirá para facilitar a execução de seus aplicativos. Para este caso em específico, se você dominar a linguagem C#, poderá incrementar seu aplicativo com uma séria e outras verificações.

Arquivos de Exemplo:

ExcelMacros.zip (11.5 KiB)

Acompanhem a discussão no fórum:

http://www.tomasvasquez.com.br/forum/viewtopic.php?f=23&t=2946

Bom proveito!

Google Drive – Criando Macros (ou quase isso) no Google Spreadsheet

Admirável mundo novo! Na verdade, o Google Docs, hoje rebatizado para Google Drive, nem é tão novo. Mas o uso deste passou a ser mais comum com a chegada de novos serviços e aplicativos baseados em nuvem, e claro, o Google Chrome, que tornou a vida destes mais amigável.

Não sei ao certo a quanto tempo, mas o aplicativo de planilhas do Google Drive já suporta criação de Scripts, o que na linguagem dos VBAzeiros de plantão significa Macros. Opa! Agora ficou interessante! E como!

Claro, não é exatamente a mesma coisa, mas tem a mesma função e contexto, que é a de automatizar rotinas corriqueiras em planilhas e criar facilitadores. O que pretendo aqui é mostrar que é possível fazer o proposto, sendo uma ótima alternativa para automatizar nossas planilhas que estão cada vez mais fora de nossos computadores.

Criando o Script

Vamos fazer algo simples, mas útil. As planilhas do Google Drive não reconhecem emails como links, a não ser que você use a função HYPERLINK. Se for só um email, tudo bem, mas quando você tem uma lista, a coisa fica chata. Vamos automatizar isso.

Abra o Google Drive e crie uma nova Planilha (nem preciso dizer que você precisa de uma conta no Google, certo?).

Criando uma nova planilha no Google Drive
Criando uma nova planilha no Google Drive

Agora, crie uma lista simples de emails:

Planilha no Google Drive com emails de exemplo
Planilha no Google Drive com emails de exemplo

No menu principal, vá na Ferramentas -> Gerenciador de Scripts para apresentar a seguinte tela:

Gerenciador Scripts
Gerenciador Scripts

Aqui estarão todos os scripts que você tiver criado para sua planilha. No seu caso, essa lista provavelmente estará vazia. De toda forma, clique na opção novo e a seguinte janela se abrirá:

Tela Inicial do Gerenciador de Scripts
Tela Inicial do Gerenciador de Scripts

Nesta tela há toda uma central de ajuda que auxiliar no entendimento e no processo de criação de scripts para seus documentos no Google Drive. Você dar uma passeada por aqui, mas para nosso tutorial, vamos apenas fechar essa tela e continuar.

O que aparece é a tela de código com uma função vazia para você começar a trabalhar.

Gerenciador de Scripts - Nova função
Gerenciador de Scripts – Nova função

E é aqui que começamos. O primeiro fato que você terá que se acostumar, caso você seja um programador VBA, é que aqui, a linguagem de automação não é mais o Visual Basic, mas sim o Javascript. Com isso você vai ter que se acostumar. O lado bom é que além do Javascript ser uma linguagem poderosa, atualmente ela é tida como a linguagem de programação mais promissora do mercado.

Dê um nome para seu projeto (onde está escrito projeto sem título) e onde está sua função vazia (myFunction), substituia pelo seguinte código:

function convertToHyperlink() {
  var range = SpreadsheetApp.getActiveRange();
  var emailpattern = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
 
  var numRows = range.getNumRows();
  var numCols = range.getNumColumns();
  for (var i = 1; i <= numRows; i++) {
    for (var j = 1; j <= numCols; j++) {
      var value = range.getCell(i,j).getValue();
 
      if (value.match(emailpattern))
      {
        value = "=HYPERLINK(\"mailto:" + value + "\"; \"" + value + "\")";
        range.getCell(i,j).setValue(value);
      }
      else {
        Browser.msgBox("Ops! " + value + " on cell '" + range.getCell(i, j).getA1Notation() + "' is not a valid email");
      }
    }
  }
};

Em resumo, o que o código faz é fazer um loop nas células que estão selecionadas (SpreadsheetApp.getActiveRange(), aquivalente ao Selection no VBA do Excel e verifica uma a uma se ela contém um email válido através de uma Expressão Regular. Se a célula conter um email válido, ele aplicar a função HYPERLINK. Caso contrário, emite um aviso usando a função Browser.msgBox, que obviamente é o bom e velho MsgBox.

A parte chata é que o modelo de objetos não oferece um meio facilitado de fazer um loop do tipo ForEach nas células. Como é possível ver no código, é preciso fazer um loop duplo (linha, coluna) para ter acesso a todas as células.

Com o código aplicado, salve seu script (botão salvar) e fecha a janela. Você estará de volta a sua planilha. Selecione todas as celulas preenchidas, vá até o menu Ferramentas->Gerenciador de Scripts. Na tela, deve aparecer a sua função. Clique sobre o nome dela e depois em Executar. O resultado será o seguinte:

Executando a função convertToHyperlink
Executando a função convertToHyperlink

Claro. Como a célula A5 não contém um email válido, ele emitou o aviso. Para o restante, a função é executa e o resultado é:

Email com link
Email com link

Está feito! Nossos emails na planilha agora são clicáveis.

Resumo

É um começo. Nem de longe quis aqui abranger tudo o que os scripts do Google Drive podem fazer, mas sim abrir aqui a possibildade para programadores VBA explorarem essa funcionalidade. Assim como as macros em VBA, o scripts do Google Drive irão facilitar a vida das planilhas online e provavelmente sejam um novo e bem vindo lar para aqueles que se sentiam fora do eixo vendo as aplicações migrarem pouco a pouco para a internet.

Bom divertimento!