Esportare dati in formato Excel con Silverlight 4.0

di Alessio Leoncini, in Silverlight 4.0, Out of browser,

Una delle nuove funzionalità disponibili in Silverlight 4.0 è la possibilità di istanziare oggetti attraverso interfaccia COM, in modo da poter interagire con diverse applicazioni presenti nel sistema operativo.

Questa funzionalità è disponibile nelle applicazioni Silverlight installate sul client dell'utente, le cosidette applicazioni Out Of Browser; tali applicazioni, inoltre, devono essere eseguite in modalità full trust sotto specifica autorizzazione da parte dell'utente.

Nell'esempio seguente vediamo come poter creare documenti Microsoft Excel inserendo una serie di dati visualizzati nella tradizionale interfaccia utente, in un datagrid.

C#
private bool firstTime = true;
delegate void SheetChangedDelegate(dynamic excelSheet, dynamic rangeArgs);

public void Export()
{
  dynamic excel = AutomationFactory.CreateObject("Excel.Application");
  excel.Visible = true;

  dynamic workbook = excel.workbooks;
  workbook.Add();
  dynamic sheet = excel.ActiveSheet;

  dynamic cell = null;

  int i = 1;
  foreach (People item in Items)
  {
    cell = sheet.Cells[i, 1];
    cell.Value = item.FirstName;
    cell.ColumnWidth = 30;

    cell = sheet.Cells[i, 2];
    cell.Value = item.LastName;
    cell.ColumnWidth = 40;

    i++;
  }

  if (firstTime)
  {
    firstTime = false;
    excel.SheetChange += new SheetChangedDelegate(SheetChangedEventHandler);
  }
}

Grazie alla classe AutomationFactory (e ai nuovi dynamic) andiamo a creare un oggetto "Excel" nel quale aggiungiamo un workbook ed uno sheet.
Scorrendo gli elementi della nostra collezione di dati aggiungiamo progressivamente le celle ed i corrispondenti valori.
Grazie alla proprietà Visibile dell'oggetto "Excel" l'applicazione viene aperta automaticamente visualizzando i dati appena aggiunti.

Una ulteriore funzionalità interessante è la possibilità di mantenere collegati i dati aggiunti al foglio di Excel con i dati "sorgente", nell'esempio in binding nel datagrid.
Attraverso l'evento SheetChange possiamo intercettare la modifica dei dati in Excel e fare in modo che le modifiche si riflettano automaticamente nell'applicazione, così come realizzato nello snippet seguente.

C#
private void SheetChangedEventHandler(dynamic excelSheet, dynamic rangeArgs)
{
  dynamic sheet = excelSheet;

  dynamic range1 = sheet.Range("A1:A" + Items.Count);
  for (int i = 0; i < Items.Count; i++)
  {
    Items<i>.FirstName = (range1.Item(i + 1).Value == null) ? string.Empty : range1.Item(i + 1).Value.ToString();
  }

  dynamic range2 = sheet.Range("B1:B" + Items.Count);
  for (int i = 0; i < Items.Count; i++)
  {
    Items<i>.LastName = (range2.Item(i + 1).Value == null) ? string.Empty : range2.Item(i + 1).Value.ToString();
  }
}

Nelle immagini sottostanti possiamo vedere l'interazione dei dati in tempo reale.


Nel nostro articolo su
https://www.silverlightitalia.com/articoli/silverlight/novita-silverlight-4.0.aspx
è possibile conoscere le nuove funzionalità disponibili in Silverlight 4.0.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata

I più letti di oggi