2015-10-19 2 views
0

Я написал код с использованием OpenXML для преобразования datatable в Excel. Теперь я хочу отформатировать таблицу так, чтобы она выглядела как таблица Excel с заголовком. Я предполагаю, что мне нужно добавить стили заголовков и установить диапазон таблиц, но я до сих пор не смог этого добиться. Вот мой код для преобразования из DataTable в Excel:Создать таблицу Excel с заголовками

Dim oData As New ReportData(_ReportObject.ConnectionString) 
Dim source As DataTable = oData.GetDataTable(_ReportObject.DataSource, _ReportObject.Parameters) 
Dim cellData As Object 

Dim draftFile As String = _ReportObject.Tmp & "\" & Guid.NewGuid().ToString() & ".tmp" 
Using xl As SpreadsheetDocument = SpreadsheetDocument.Create(draftFile, SpreadsheetDocumentType.Workbook) 
    Dim oxa As List(Of OpenXmlAttribute) 
    Dim oxw As OpenXmlWriter 

    xl.AddWorkbookPart() 
    Dim wsp As WorksheetPart = xl.WorkbookPart.AddNewPart(Of WorksheetPart)() 

    oxw = OpenXmlWriter.Create(wsp) 
    oxw.WriteStartElement(New Worksheet()) 
    oxw.WriteStartElement(New SheetData()) 

    ' add header 
    oxa = New List(Of OpenXmlAttribute)() 
    oxa.Add(New OpenXmlAttribute("r", Nothing, "1")) 
    oxw.WriteStartElement(New Row(), oxa) 
    For Each header As DataColumn In source.Columns 
    oxa = New List(Of OpenXmlAttribute)() 
    oxa.Add(New OpenXmlAttribute("t", Nothing, "str")) 
    oxw.WriteStartElement(New Cell(), oxa) 
    oxw.WriteElement(New CellValue(header.Caption)) 
    oxw.WriteEndElement() 
    Next 
    oxw.WriteEndElement() 

    For i As Integer = 0 To source.Rows.Count - 1 
    Dim rowData As DataRow = source.Rows(i) 
    oxa = New List(Of OpenXmlAttribute)() 
    ' this is the row index 
    oxa.Add(New OpenXmlAttribute("r", Nothing, (i + 2).ToString())) 

    oxw.WriteStartElement(New Row(), oxa) 

    For j As Integer = 0 To source.Columns.Count - 1 
     oxa = New List(Of OpenXmlAttribute)() 
     oxa.Add(New OpenXmlAttribute("t", Nothing, "str")) 

     oxw.WriteStartElement(New Cell(), oxa) 

     cellData = rowData(j) 
     If IsDBNull(cellData) Then cellData = String.Empty 
     oxw.WriteElement(New CellValue(cellData)) 

     ' this is for Cell 
     oxw.WriteEndElement() 
    Next 

    ' this is for Row 
    oxw.WriteEndElement() 
    Next 

    ' this is for SheetData 
    oxw.WriteEndElement() 
    ' this is for Worksheet 
    oxw.WriteEndElement() 
    oxw.Close() 

    oxw = OpenXmlWriter.Create(xl.WorkbookPart) 
    oxw.WriteStartElement(New Workbook()) 
    oxw.WriteStartElement(New Sheets()) 

    Dim sheet As New Sheet() 
    sheet.Name = "Sheet1" 
    sheet.SheetId = 1 
    sheet.Id = xl.WorkbookPart.GetIdOfPart(wsp) 
    oxw.WriteElement(sheet) 

    ' this is for Sheets 
    oxw.WriteEndElement() 
    ' this is for Workbook 
    oxw.WriteEndElement() 
    oxw.Close() 

    xl.Close() 
End Using 

ответ

0

Вы можете ввести его вручную в коде следующим образом:

Sheet.Cells(1, 1).value = "Header for cell A1" 
Sheet.Cells(1, 2).value = "Header for cell B1" 
Sheet.Cells(1, 3).value = "Header for cell C1" 

CMIIW :)

Смежные вопросы