2017-01-10 4 views
1

Ich kann keine Beispiele für den Export mehrerer Datensätze/Tabellen in ein einzelnes Excel-Arbeitsblatt mit der EPPlus-Bibliothek finden. Wenn ich die Codes ausfühle, gibt es einen Satz zurück, der zufällig der letzte ist. Was mache ich falsch mit den folgenden Codes? Vielen Dank!Exportieren mehrerer Datensätze in ein einzelnes Excel-Arbeitsblatt mit EPPlus

Dim dSets as DataSets 
Dim dGrid as DataGrid 
Dim dTable as DataTable 
Dim sheet as String 
sheet = "DumpSets" 
Dim attachment as String 
attachment = "attachment; filename=" + sheet + ".xlsx" 
Dim xlPack as ExcelPackage = New ExcelPackage() 
Dim ws as ExcelWorksheet = xlPack.Workbook.Worksheets.Add(sheet) 
Response.Clear() 
Response.AddHeader("content-disposition", attachment) 
Response.Charset = "" 

For each dTable in dSets.Tables 
    dGrid = New DataGrid 
    Me.EnableViewState = False 

    dGrid.DataSource = dTable 
    ws.Cells(1, 1).LoadFromDataTable(dGrid.DataSource, True) 

    dGrid.DataBind() 
Next 

Response.BinaryWrite(xlPack.GetAsByteArray()) 
Response.End() 
+0

Sie speichern jeden Tisch an der gleichen Stelle '.Cells (1, 1)'. Wenn Sie die Tabellen nicht überschreiben möchten, müssen Sie sie an einem anderen Ort speichern. – Blackwood

+0

Hallo Blackwood, danke für deine Antwort. Ich bin ein Neuling mit EPPlus und nicht vertraut mit den meisten integrierten Funktionen, die mit der Bibliothek geliefert werden. Wie würden Sie diese Zeile umschreiben, um ein Überschreiben der Tabellen zu verhindern? –

+0

Sie müssen nur entscheiden, wo Sie jeden Tisch speichern möchten. Siehe die Antwort des VDWWD für Vorschläge. – Blackwood

Antwort

2

Wie @Blackwood bereits erwähnt, fügen Sie immer die Daten an der gleichen Stelle.

So sollte es so etwas wie dieses:

Dim cnt As Integer = 1 

For each dTable in dSets.Tables 
    dGrid = New DataGrid 
    Me.EnableViewState = False 

    dGrid.DataSource = dTable 
    ws.Cells(1, cnt).LoadFromDataTable(dGrid.DataSource, True) 

    dGrid.DataBind() 

    cnt = (cnt + 1) 
Next 

Sie können auch jeden Datensatz seinen eigenen Blatt hinzuzufügen.

Dim cnt As Integer = 1 
For Each dt As DataTable In dSets.Tables 
    Dim ws As ExcelWorksheet = xlPack.Workbook.Worksheets.Add(("Sheet " + cnt)) 
    ws.Cells(1, 1).LoadFromDataTable(dGrid.DataSource, True) 
    cnt = (cnt + 1) 
Next 
+0

Hallo VDWWD, vielen Dank für Ihre Antwort und Beratung. Ich habe versucht, Ihr erstes Beispiel ws.Cells (1, cnt) anzuwenden. Es gab mir einen 'Spalte außerhalb der Reichweite' Fehler. Verständlicherweise gilt das Beispiel für Spalten. Wie würde ich N Nummern von Tabellen und die Datensätze in ihnen durchlaufen? Ich bin mir nicht sicher, ob LoadFromDataTable dafür ideal ist. –

+0

Behoben meine Antwort, sollte die ganze Zahl bei "1", nicht "0" beginnen. EPPlus erste Spalte ist in einem Blatt hat den Index "1". Aber es sollte funktionieren, wenn alle Ihre DataTables in "dSets" sind – VDWWD

Verwandte Themen