O exemplo abaixo ilustra como o C# 4.0 trabalha interoperabilidade – palavrinha difícil de falar numa palestra…:) – aproveitando dos novos recursos de parâmetros opcionais e nomeados, dentre outros recursos, para criar uma aplicação C# application que conversa com o Microsoft Office.
using System; using System.Collections.Generic; using Excel = Microsoft.Office.Interop.Excel; using Word = Microsoft.Office.Interop.Word; public class Account { public int ID { get; set; } public double Balance { get; set; } } public class Program { static void Main(string[] args) { var checkAccounts = new List<Account> { new Account { ID = 345, Balance = 541.27 }, new Account { ID = 123, Balance = -127.44 } }; DisplayInExcel(checkAccounts, (account, cell) => { cell.Value = account.ID; cell.Offset[0, 1].Value = account.Balance; if (account.Balance < 0) { cell.Interior.Color = 255; cell.Offset[0, 1].Interior.Color = 255; } }); var word = new Word.Application(); word.Visible = true; word.Documents.Add(); word.Selection.PasteSpecial(Link: true, DisplayAsIcon: true); } public static void DisplayInExcel(IEnumerable<Account> accounts, Action<Account, Excel.Range> DisplayFunc) { var xl = new Excel.Application(); xl.Workbooks.Add(); xl.Visible = true; xl.Cells[1, 1] = "ID"; xl.Cells[1, 2] = " Balance"; xl.Cells[2, 1].Select(); foreach (var ac in accounts) { DisplayFunc(ac, xl.ActiveCell); xl.ActiveCell.Offset[1, 0].Select(); } xl.Range["A1:B3"].Copy(); xl.Columns[1].AutoFit(); xl.Columns[2].AutoFit(); } }
Notem que na linha 43 foi utilizado o recurso de named and optional parameters permitindo que você escolha os parâmetros interessante para a situação desejada sem a necessidade de especificar todos os parâmetros possíveis.
Tradicionalmente, você teria que usar o seguinte código para setar uma propriedade de uma celula:
((Excel.Range)excel.Cells[1, 1]).Value2 = "ID";
Observe na linha 53 que utilizando o novo recurso dinâmico do C# 4.0 a declaração fica bem mais elegante e enxuta. Bacana, não?
Estou tendo problemas em exportar de um datagridview para um excel.
tem como ajudar ?
Olá Paulo,
Não sei exatamente que tipo de problema você está enfrentando, por isso, o que recomendo é você repensar (caso seja possível) a utilização do GridView. Os métodos para exportação direta são manuais. Dependendo de como foi passado o datasource vale mais a pena fazer isso por ele. Vai depender muito do caso.
Abraços,
Leandro Daniel