以下代码是我目前尝试从VB.Net中的网站按钮打开excel中的一些数据。我希望数据显示准系统,但网站上的表格格式始终如下。分页和颜色使数据几乎无法读取,只能看到第一页数据。任何快速修复?我已经尝试了很多我在这里找到的东西,但无济于事。
dt
答案 0 :(得分:0)
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Try
Dim ScriptManager As ScriptManager = ScriptManager.GetCurrent(Me.Page)
ScriptManager.RegisterPostBackControl(Me.btnExportToExcel)
Catch ex As Exception
End Try
End Sub
Protected Sub btnExportToExcel_Click(sender As Object, e As EventArgs) Handles btnExportToExcel.Click
Try
Dim sw As New System.IO.StringWriter()
Dim hw As New System.Web.UI.HtmlTextWriter(sw)
Dim style As String = "<style>.textmode{mso-number-format:\@;}</style>"
Response.Clear()
Response.Buffer = True
Response.AddHeader("content-disposition", "attachment;filename=SignExport.xls")
Response.Charset = ""
Response.ContentType = "application/vnd.ms-excel"
For i As Integer = 0 To Me.Grid_Bad_Meters.Rows.Count - 1
Dim row As GridViewRow = Grid_Bad_Meters.Rows(i)
row.Attributes.Add("class", "textmode")
Next
'lblRptHeader.RenderControl(hw)
hw.WriteBreak()
'lblReportDateRange.RenderControl(hw)
Grid_Bad_Meters.RenderControl(hw)
Response.Write(style)
Response.Output.Write(sw.ToString())
Response.Flush()
Response.End()
Catch ex As Exception
End Try
End Sub
答案 1 :(得分:-1)
您可以使用下面提到的两种方法之一。当然,还有其他方法可以满足您的需求,例如导出到评论中提到的csv文件,或者使用.Net库来导出像epplus
这样的Excel。
OpenXML方法
如果您正在寻找一种不使用html方法导出到Excel的方法,那么您可以使用OpenXML方法,该方法通过此URL的工作示例非常清楚地解释:Export to Excel using OpenXML。这将eliminate all the CSS styles
可以与使用html方法导出相关联,并且您似乎根据原始帖子中的代码使用此html方法。但是,如果你想使用html方法,那么下面的代码应该可以工作并消除查看excel文件时可能出现的所有CSS样式。在把它放到这里之前,我已经在我的机器上尝试了这个发布的代码。
Html方法
您可以在导出方法中创建GridView的新实例,而不是使用现有实例,并且数据将其绑定到与页面上现有gridview相同的数据,然后再将其渲染为excel。在数据绑定导出方法之前,您需要确保没有设置样式,特别是网格线设置为无,如下面的代码所示。
您可以在此网址上看到实际视频: Grid Export without any CSS Styles。这就是我运行时代码在笔记本电脑上的行为方式。
您可以使用下面的示例代码,但请确保将数据源设置为包含原始gridview所有页面中所有记录的数据。我已使用SqlDataSource1
作为数据源,但您可以在适当的情况下使用适当的方法替换它。
Protected Sub btnExport_Click(sender As Object, e As EventArgs)
Dim GridView2 As New GridView()
GridView2.AllowPaging = False
GridView2.AllowSorting = False
GridView2.Style.Clear()
GridView2.CellPadding = 0
GridView2.CellSpacing = 0
GridView2.GridLines = GridLines.None
GridView2.BorderStyle = BorderStyle.None
GridView2.BorderWidth = Unit.Pixel(0)
GridView2.AlternatingRowStyle.BorderStyle = BorderStyle.None
GridView2.DataSource = SqlDataSource1
GridView2.DataBind()
' Clear the response
Response.Clear()
' Set the type and filename
Response.AddHeader("content-disposition", "attachment;filename=griddata.xls")
Response.Charset = ""
Response.ContentType = "application/vnd.xls"
' Add the HTML from the GridView to a StringWriter so we can write it out later
Dim sw As New System.IO.StringWriter()
Dim hw As System.Web.UI.HtmlTextWriter = New HtmlTextWriter(sw)
GridView2.RenderControl(hw)
' Write out the data
Response.Write(sw.ToString())
Response.[End]()
End Sub
Public Overrides Property EnableEventValidation() As Boolean
Get
Return False
End Get
'Do nothing
Set
End Set
End Property
Public Overrides Sub VerifyRenderingInServerForm(control As Control)
'Allows for printing
End Sub