2011-02-04 56 views
0

我有多个gridview要导出到excel。每个工作表1个gridview。将多个gridviews导出到Excel中

如何做到这一点? (或一般如何写一个HTML字符串到工作表)

这是要在asp.net,服务器端完成。

我可以通过epplus.codeplex.com很好地创建多个工作表,但它适用于单元级别。我可以导出DataTable,但是如何导出Gridview的HTML?

回答

0

我不知道这是否与GridView的,但它是值得一试:

http://www.codeproject.com/KB/office/ExcelDataTable.aspx

编辑:它仍然有效,用下面的代码进行测试:

 Dim data As New DataTable("Sample-Data") 
     data.Columns.Add("ID", GetType(Int32)).AutoIncrement = True 
     data.Columns.Add("Text", GetType(String)) 
     For i As Int32 = 1 To 100 
      Dim newRow As DataRow = data.NewRow 
      newRow("Text") = i & ". Row" 
      data.Rows.Add(newRow) 
     Next 

     Dim grid As New System.Web.UI.WebControls.GridView 
     grid.HeaderStyle.Font.Bold = True 
     grid.DataSource = data 
     grid.DataMember = data.TableName 
     grid.DataBind() 

     ' render the GridView control to a file ' 
     Using sw As New IO.StreamWriter("c:\\Temp\test.xls") 
      Using hw As New HtmlTextWriter(sw) 
       grid.RenderControl(hw) 
      End Using 
     End Using 

的诀窍是,Excel可以显示HTML-Table,并且GridView呈现为表格。

但是,如果要生成多个WorkSheet,则这不起作用。

0

Excel完全适用于XML。

将Excel中的某些工作簿保存为XML表格,然后在记事本中将其打开以查看其工作原理。

0

我刚刚完成了同样的事情。每个数据库的一个excel工作表talbe/gridview

您会在this blog post中找到所有内容。让我知道你是否需要更多的帮助。

Public Shared Sub CreateWorkBook(ByVal cList As Object, ByVal wbName As String, ByVal CellWidth As Integer) 
    Dim attachment As String = "attachment; filename=""" & wbName & ".xml""" 

    HttpContext.Current.Response.ClearContent() 

    HttpContext.Current.Response.AddHeader("content-disposition", attachment) 
    HttpContext.Current.Response.ContentType = "application/ms-excel" 

    Dim sw As System.IO.StringWriter = New System.IO.StringWriter() 
    sw.WriteLine("<?xml version=""1.0""?>") 

    sw.WriteLine("<?mso-application progid=""Excel.Sheet""?>") 
    sw.WriteLine("<Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet""") 

    sw.WriteLine("xmlns:o=""urn:schemas-microsoft-com:office:office""") 
    sw.WriteLine("xmlns:x=""urn:schemas-microsoft-com:office:excel""") 

    sw.WriteLine("xmlns:ss=""urn:schemas-microsoft-com:office:spreadsheet""") 
    sw.WriteLine("xmlns:html=""http://www.w3.org/TR/REC-html40"">") 

    sw.WriteLine("<DocumentProperties xmlns=""urn:schemas-microsoft-com:office:office"">") 
    sw.WriteLine("<LastAuthor>Try Not Catch</LastAuthor>") 

    sw.WriteLine("<Created>2010-05-15T19:14:19Z</Created>") 
    sw.WriteLine("<Version>11.9999</Version>") 

    sw.WriteLine("</DocumentProperties>") 
    sw.WriteLine("<ExcelWorkbook xmlns=""urn:schemas-microsoft-com:office:excel"">") 

    sw.WriteLine("<WindowHeight>9210</WindowHeight>") 
    sw.WriteLine("<WindowWidth>19035</WindowWidth>") 

    sw.WriteLine("<WindowTopX>0</WindowTopX>") 
    sw.WriteLine("<WindowTopY>90</WindowTopY>") 

    sw.WriteLine("<ProtectStructure>False</ProtectStructure>") 
    sw.WriteLine("<ProtectWindows>False</ProtectWindows>") 

    sw.WriteLine("</ExcelWorkbook>") 
    sw.WriteLine("<Styles>") 

    sw.WriteLine("<Style ss:ID=""Default"" ss:Name=""Normal"">") 
    sw.WriteLine("<Alignment ss:Vertical=""Bottom""/>") 

    sw.WriteLine("<Borders/>") 
    sw.WriteLine("<Font/>") 

    sw.WriteLine("<Interior/>") 
    sw.WriteLine("<NumberFormat/>") 

    sw.WriteLine("<Protection/>") 
    sw.WriteLine("</Style>") 

    sw.WriteLine("<Style ss:ID=""s22"">") 
    sw.WriteLine("<Alignment ss:Horizontal=""Center"" ss:Vertical=""Center"" ss:WrapText=""1""/>") 

    sw.WriteLine("<Borders>") 
    sw.WriteLine("<Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""") 

    sw.WriteLine("ss:Color=""#000000""/>") 
    sw.WriteLine("<Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""") 

    sw.WriteLine("ss:Color=""#000000""/>") 
    sw.WriteLine("<Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""") 

    sw.WriteLine("ss:Color=""#000000""/>") 
    sw.WriteLine("<Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""") 

    sw.WriteLine("ss:Color=""#000000""/>") 
    sw.WriteLine("</Borders>") 

    sw.WriteLine("<Font ss:Bold=""1""/>") 
    sw.WriteLine("</Style>") 

    sw.WriteLine("<Style ss:ID=""s23"">") 
    sw.WriteLine("<Alignment ss:Vertical=""Bottom"" ss:WrapText=""1""/>") 

    sw.WriteLine("<Borders>") 
    sw.WriteLine("<Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""") 

    sw.WriteLine("ss:Color=""#000000""/>") 
    sw.WriteLine("<Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""") 

    sw.WriteLine("ss:Color=""#000000""/>") 
    sw.WriteLine("<Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""") 

    sw.WriteLine("ss:Color=""#000000""/>") 
    sw.WriteLine("<Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""") 

    sw.WriteLine("ss:Color=""#000000""/>") 
    sw.WriteLine("</Borders>") 

    sw.WriteLine("</Style>") 
    sw.WriteLine("<Style ss:ID=""s24"">") 

    sw.WriteLine("<Alignment ss:Vertical=""Bottom"" ss:WrapText=""1""/>") 
    sw.WriteLine("<Borders>") 

    sw.WriteLine("<Border ss:Position=""Bottom"" ss:LineStyle=""Continuous"" ss:Weight=""1""") 
    sw.WriteLine("ss:Color=""#000000""/>") 

    sw.WriteLine("<Border ss:Position=""Left"" ss:LineStyle=""Continuous"" ss:Weight=""1""") 
    sw.WriteLine("ss:Color=""#000000""/>") 

    sw.WriteLine("<Border ss:Position=""Right"" ss:LineStyle=""Continuous"" ss:Weight=""1""") 
    sw.WriteLine("ss:Color=""#000000""/>") 

    sw.WriteLine("<Border ss:Position=""Top"" ss:LineStyle=""Continuous"" ss:Weight=""1""") 
    sw.WriteLine("ss:Color=""#000000""/>") 

    sw.WriteLine("</Borders>") 
    sw.WriteLine("<Font ss:Color=""#FFFFFF""/>") 

    sw.WriteLine("<Interior ss:Color=""#FF6A6A"" ss:Pattern=""Solid""/>") 'set header colour here 
    sw.WriteLine("</Style>") 

    sw.WriteLine("</Styles>") 
    For Each gView As GridView In cList 
     CreateWorkSheet(gView.ID.ToString, sw, gView, CellWidth) 
    Next 
    sw.WriteLine("</Workbook>") 
    HttpContext.Current.Response.Write(sw.ToString()) 
    HttpContext.Current.Response.End() 

End Sub 
Private Shared Sub CreateWorkSheet(ByVal wsName As String, ByVal sw As System.IO.StringWriter, ByVal gv As GridView, ByVal cellwidth As Integer) 
    If IsNothing(gv.HeaderRow) = False Then 
     sw.WriteLine("<Worksheet ss:Name=""" & wsName & """>") 
     Dim cCount As Integer = gv.HeaderRow.Cells.Count 
     Dim rCount As Long = gv.Rows.Count + 1 
     sw.WriteLine("<Table ss:ExpandedColumnCount=""" & cCount & """ ss:ExpandedRowCount=""" & rCount & """ x:FullColumns=""1""") 
     sw.WriteLine("x:FullRows=""1"">") 
     For i As Integer = (cCount - cCount) To (cCount - 1) 
      sw.WriteLine("<Column ss:AutoFitWidth=""1"" ss:Width=""" & cellwidth & """/>") 
     Next 

     GridRowIterate(gv, sw) 
     sw.WriteLine("</Table>") 
     sw.WriteLine("<WorksheetOptions xmlns=""urn:schemas-microsoft-com:office:excel"">") 

     sw.WriteLine("<Selected/>") 
     sw.WriteLine("<DoNotDisplayGridlines/>") 

     sw.WriteLine("<ProtectObjects>False</ProtectObjects>") 
     sw.WriteLine("<ProtectScenarios>False</ProtectScenarios>") 

     sw.WriteLine("</WorksheetOptions>") 
     sw.WriteLine("</Worksheet>") 
    End If 
End Sub 
Private Shared Sub GridRowIterate(ByVal gv As GridView, ByVal sw As System.IO.StringWriter) 
    sw.WriteLine("<Row>") 

    For Each tc As TableCell In gv.HeaderRow.Cells 
     Dim tcText As String = tc.Text 

     Dim tcWidth As String = gv.Width.Value 
     Dim dType As String = "String" 

     If IsNumeric(tcText) = True Then 

      dType = "Number" 

     End If 
     sw.WriteLine("<Cell ss:StyleID=""s24""><Data ss:Type=""String"">" & tcText & "</Data></Cell>") 

    Next 
    sw.WriteLine("</Row>") 

    For Each gr As GridViewRow In gv.Rows 
     sw.WriteLine("<Row>") 

     For Each gc As TableCell In gr.Cells 
      Dim gcText As String = gc.Text 
      Dim dType As String = "String" 

      If IsNumeric(gcText) = True Then 

       dType = "Number" 
       gcText = CDbl(gcText) 

      End If 
      sw.WriteLine("<Cell ss:StyleID=""s23""><Data ss:Type=""" & dType & """>" & gcText & "</Data></Cell>") 

     Next 
     sw.WriteLine("</Row>") 
    Next 

End Sub 
1

我didn't找到在哪里以及如何获得 “CLIST” 定义

For Each gView As GridView In cList 
    CreateWorkSheet(gView.ID.ToString, sw, gView, CellWidth) 
Next