Antonio "tdj"

(C'è sempre un modo migliore)
posts - 312, comments - 268, trackbacks - 17

My Links

News





Tag Cloud

Article Categories

Archives

Post Categories

Image Galleries

Articoli

Blogs

Controlli WinForm free

Guide

Siti vari

Sviluppo

Esportare dati in Excel con Open XML

Sicuramente Open XML è una bella cosa perché permette di manipolare gli oggetti Office in maniera veramente semplice ma, soprattutto, senza dover avere riferimenti diretti ad Office!

Per sfruttare appieno questa nuova caratteristica esiste un SDK giunto alla versione 2 ma ancora in CTP che potete trovare qui:

Open XML SDK 2.0 for Microsoft Office – CTP December 2009

Giusto per dare un’idea, vediamo come fare una delle attività più comuni: esportare dei dati in Excel :)

Prima di iniziare
Prepariamo un Foglio Excel che funga da modello per le esportazioni della tabella Customer di Northwind (uno a caso!):

01.OpenXMLExportToExcel

 

Il Codice
Il codice necessario è davvero molto semplice:

   1:  Using wb As SpreadsheetDocument = SpreadsheetDocument.Open(FilePath, True)
   2:     Dim wp As WorkbookPart = wb.WorkbookPart
   3:   
   4:     ' Esporta nel primo foglio
   5:     Dim sheet As WorksheetPart = wp.WorksheetParts.First
   6:     Dim data As SheetData = sheet.Worksheet.GetFirstChild(Of SheetData)()
   7:   
   8:     Dim db As New NorthwindDataContext
   9:     Dim Customers = From c In db.Customers
  10:                     Select c
  11:   
  12:      Dim index As Integer = 2  'Escludi la riga d'intestazione
  13:      For Each c In Customers
  14:              data.AppendChild(AddRow(index, c))
  15:              index += 1
  16:      Next
  17:   End Using

 

I namespace da importare sono:

Imports DocumentFormat.OpenXml.Packaging
Imports DocumentFormat.OpenXml.Spreadsheet

L’oggetto importante è SheetData che viene recuperato da un Worksheet del file Excel (riga 6). L’aggiunta delle righe viene fatto con il metodo AppendChild che, come vedremo, è comune a tutti gli oggetti che gestiscono insiemi (riga 14). Vediamo il metodo AddRow:

   1:  Private Function AddRow(ByVal rowIndex As Integer, ByVal data As Customer) As Row
   2:      Dim r As New Row
   3:      r.RowIndex = rowIndex
   4:   
   5:      ' Esporta solo CustomerID, CompanyName, Address, City
   6:      r.AppendChild(CreateCell("A" & rowIndex, data.CustomerID))
   7:      r.AppendChild(CreateCell("B" & rowIndex, data.CompanyName))
   8:      r.AppendChild(CreateCell("C" & rowIndex, data.Address))
   9:      r.AppendChild(CreateCell("D" & rowIndex, data.City))
  10:   
  11:      Return r
  12:  End Function

 

Per ogni riga creata viene specificato l’indice (riga 3) e vengono aggiunte le celle con il solito metodo AppendChild create, a loro volta, con la funzione CreateCell:

 

   1:  Private Function CreateCell(ByVal column As String, ByVal value As String) As Cell
   2:      Dim c As New Cell
   3:      c.CellReference = column
   4:      c.DataType = CellValues.String
   5:   
   6:      ' Valore
   7:      Dim v As New CellValue
   8:      v.Text = value
   9:   
  10:      c.AppendChild(v)
  11:      Return c
  12:  End Function


Come per la riga anche per la cella viene specificata la “coordinata” che, in questo caso, è data dalla coppia riga-colonna tipica di Excel e impostata con la proprietà CellReference (riga 3). Successivamente si specifica il tipo di dato della cella e si inserisce il valore con un oggetto di tipo CellValue.

Il risultato finale è questo:


02.OpenXMLExportToExcel

Print | posted on mercoledì 17 febbraio 2010 23:25 | Filed Under [ .NET ]

Feedback

Gravatar

# re: Esportare dati in Excel con Open XML

interessante ottimo articolo!!!!
é proprio quello che serve ad un mio cliente :D
18/02/2010 00:39 | sundna
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET