Programando para Office 2007 com C#... que nada, VB.NET!
- excel
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 e 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 há anos mas 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:
vb.net VB
Dim texto As String = "texto"
Dim conn As SqlConnection = New SqlConnection(cs)
csharp C#
string texto = "texto";
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.
``` vb.net VB Dim wb As Excel.Workbook = Me.Application.Workbook Dim ws As Excel.Worksheet = wb.Sheets(1)
Dim range As Excel.Range = ws.Range("A1") // posso passar apenas row ou (row, col) ```
``` csharp C# Excel.Workbook wb = this.Application.Workbook; Excel.Worksheet ws = wb.Sheets[1];
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:
vb.net VB
Dim ws As Excel.Worksheet = ...
ws.Protect("password") // simples e direto
// quero content como false
ws.Protect("password", Content := False) // indolor
csharp C#
Excel.Worksheet ws = ...;
// preciso passar todos os parametros
ws.Protect("password", missing, missing, missing, ..., missing);
// quero content como false
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#.