Archive for the 'office' Category


Programando para Office 2007 com C#… que nada, VB.NET! 0

Não você não leu errado, escrevi VB.NET (Visual Basic dot Net), isso mesmo.

Eu nunca pensei que algum dia programaria em VB, já programei com VBScript na primeira versão do ASP (há muitos anos atrás), nem conhecia PHP. Nesta época, eu procurava por uma forma de fazer páginas dinâmicas, que para mim naquela época pensava: “Essas páginas HTML não fazem p@&*# nenhuma?”, então tinha que ver um jeito de resolver isso. Depois migrei para PHP onde gostei mais, por haver servidores públicos abertos (open source a bla-bla-bla), mas essas histórias ficam para outro post.

Bom, já tive de programar com VBA para Excel, cheguei a escrever um post sobre isso, minha experiência não foi boa, apesar de ter concluído tarefa que tinha de fazer.

Mas VBA é coisa do “passado”, a partir do Office 2003 foi incorporado o VSTO (Visual Studio Tools for Office) que permite fazer coisas mais “bacanas”, assim dizendo, através de addins para o Excel (posso estar completamente errado, talvez isso já exista a nos e para mim é coisa nova).

Como a plataforma é .NET, fica a escolha do programador escolher entre C# ou VB. Entretanto para esses tipos de desenvolvimento em particular, acredito que para o pessoal do VB a tarefa seja um tanto mais, prática.

Eu nunca gostei da sintaxe do VB, acho muito poluído, odeio o esquema de declaração de váriaveis:

   1: // VB
   2: Dim texto As String = "texto"
   3: Dim conn As SqlConnection = New SqlConnection(cs)
   4:  
   5: // C#
   6: string texto = "texto";
   7: SqlConnection conn = new SqlConnection(cs);

Argh, coisa feia! Em termos de tamanho não varia muito, mas em clareza e facilidade de leitura prefiro o C#.

Mas vou dizer aqui algum dos motivos do por que VB é melhor que C# para desenvolvimento Office:

  • VBA para VB é parecido (senão igual);
  • Todos as macros de VBA são facilmente portáveis para VB ;
  • Passagem de parâmetros para rotinas “dinâmico”;
  • Properties ou métodos diretos, como: Value e Offset

Até onde eu estou estudando essas foram os grandes motivos de se trabalhar com VB.

   1: // VB
   2: Dim wb As Excel.Workbook = Me.Application.Workbook
   3: Dim ws As Excel.Worksheet = wb.Sheets(1)
   4:  
   5: Dim range As Excel.Range = ws.Range("A1") // posso passar apenas row ou (row, col)
   6:  
   7: // C#
   8: Excel.Workbook wb = this.Application.Workbook;
   9: Excel.Worksheet ws = wb.Sheets[1];
  10:  
  11: Excel.Range range = ws.get_Range("A1", missing); // tenho que preencher todos

Em C#, eu preciso passar todos os campos, ou seja, quando não desejado é preciso passar “missing”. Também não temos um método direto como Range(cell, cell). Temos que usar os métodos, set_Range, get_Offset entre muitos outros.

Outro ponto que é irritante também é em rotinas:

   1: // VB
   2: Dim ws As Excel.Worksheet = ...
   3: ws.Protect("password") // simples e direto
   4: // quero content como false
   5: ws.Protect("password", Content := False) // indolor
   6:  
   7: // C#
   8: Excel.Worksheet ws = ...;
   9: // preciso passar todos os parametros
  10: ws.Protect("password", missing, missing, missing, ..., missing);
  11: // quero content como false
  12: ws.Protect("password", missing, false, missing, missing, ...); // meu deus...

Infelizmente para o pessoal do C# trabalhar com Office fica um tanto irritante.

Por este motivo acho que trabalhar com VB agiliza e facilita as coisas, embora tenha que aprender como é a sintaxe do VB, mas aposto que o ganho será muito maior do que ter que programar em C#.

Aplicando diferentes Cabeçalhos num documento Word 8

Estava formatando um documento no Word 2007, que acredito ser a melhor versão do Office, e precisei colocar diferentes layouts no documento, desde orientação de páginas diferentes à cabeçalhos e rodapés.

Nas referências básicas do Word que se encontram na internet pouco se fala em como fazer este tipo de tarefa.

Nos meus anos de uso do Office, nunca havia usado Sections num documento. As sections servem para diferenciar partes de um documento, possibilitando assim aplicar diferentes cabeçalhos e layouts num mesmo documento.

No Word 2007, basta ir em Page Layout e aplicar um break adicionando uma nova section como mostrado na figura.

diff_format_word_2007_01

Uma vez adionado uma nova section no documento, é possível aplicar diferentes formatações do documento como orientação e cabeçalho. Para realizar isso, é preciso desmarcar a opção “Link to Previous” para que a formatação existente não seja aplicada nesta section.

diff_format_word_2007_02

Desse modo é possível ter diferentes formatações num mesmo documento.

VBA, ADODB de Access para Excel 0

Precisei mexer com ADODB em VBA para poder acessar dados armazenados em Access usando linguagem SQL.

Estava eu testando um tutorial encontrado na internet (obrigado google) e usava o objeto ADODB.Resultset, mas cada ele? Erro de execução. E o Ctrl+Espaço nem funcionava (aliás já não funciona nem pro básico). Mas como pode ter um ferramente como o Office 2007 e não estar integrado ou não ter suporte para isso. Tentei buscar os drivers pela internet ou coisa parecida e nada. Raros os casos de problema sobre isso.

O problema estava que o Driver vem desabilitado e você tem de habilitá-lo no IDE/Editor do VBA do Office.

Basta ir em Tools > References, e ativar o Microsoft ActiveX Data Objects 2.8 Library

Excel References ADODB

Ai você terá acesso ao ADODB.

Nota. Aqui sempre desabilita quando abro um novo Excel, então é necessário sempre marcar novamente a opção. Num arquivo onde o procedimento já foi executado, não há necessidade.

VBA para Excel 2

Esses últimos dias peguei um trabalho que era fora do mundo em que costumo estar. Nunca havia programado em VBA e muito menos mexido com macros em Excel, ou para qualquer aplicação do office.

Estou trabalhando com o Office 2007, que cá entre nós está excelente. Talvez a interface seja um pouco estranha para o pessoal que usava no seu cotidiano o office e conhecia os atalhos e blá blá blá. Eu, para os meus trabalhos, o uso do office sempre foi superficial, apesar de usar os recursos além da grande maioria que pensa que Excel é um gerador de tabelas melhor que o do Word.

Voltando ao assunto, nunca havia usado no Office 2003, mas o Office 2007 torna muito fácil e visível a importação de dados externos. Entretanto, ele apenas puxa dados e deixa para o usuário trabalhar com eles. Tá, até ai tudo bem, mas se eu quiser ficar puxando dados com filtros e etc, vou sempre ter que criar uma conexão e setar os paramêtros e etc. Muito trabalhoso.

Para isso comecei a estudar VBA básico. Comecei a manipular com planilhas, folhas e etc. Sinceramente, foi um stress trabalhar com VBA. Quem já programou com linguagens mais estruturadas deve concordar. Cheguei até pensar em abrir o Visual Studio e passar a programar em C# com Interop.

Mas não, pensei, Office/Macros é sempre VBA deve ter milhares de suportes pela internet. Até tinha, mas muitas vezes é difícil encontrar realmente o que você quer. Senti a IDE que é fornecida no Excel extramente fraca. Os auto-completes deixam a desejar, e muitas vezes não é nem possível obter a interface. Fiquei pensando que só a experiência e saco fará de você um bom programador de macros.

Será que estou enganado?