一、下面是我输出DataGrid到EXCEL的一段程序,可是我发现用“UTF-8”不能输出超过10位的数字
    字符,请问怎么样我才可以输出长字符串?  
   Response.Clear()
   Response.Buffer= true
   Response.Charset="utf-8"
   Response.AppendHeader("Content-Disposition","attachment;filename=Exort.xls") 
   Response.ContentEncoding=System.Text.Encoding.GetEncoding("UTF-8")
   Response.ContentType = "application/ms-excel" 
   Datagrid1.EnableViewState = false
  '定义一个输入流 
   dim oStringWriter = new System.IO.StringWriter() 
   dim oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter) 
  '将目标数据绑定到输入流输出 
  Datagrid1.RenderControl(oHtmlTextWriter) 
  Response.Write(oStringWriter.ToString()) 
  Response.End() 二、为什么我用dropdownlist1.selectedItem.text或者dropdownlist1.selectedItem.value得不到
    DropDownlist中被选定的值?我该怎么样表达才行

解决方案 »

  1.   

    1.用Response.Charset="gb2312",Response.ContentEncoding=System.Text.Encoding.GetEncoding("gb2312")
    试试,这种方法有时候会出现乱码,如果是的话,去掉这两句话应该就可以了,也不知道怎么回事
    2.应该可以取到的,是不是因为DropDownList没有绑定的原因呢
      

  2.   

    在Web From上输出数据到Excel有两种方法,一个是有数据库直接导出;另外一个方法是由DataGrid直接输出到Excel文件。下面得代码实现了这两个功能。注意:在使用时要引用Microsoft Office Web Components 9.0 COM组件,另外注意设置要保存文件得目录具有匿名可修改的权限。DataGridToExcel.aspx<%@ Page Language="vb" EnableViewState="False" AutoEventWireup="false" Codebehind="DataGridToExcel.aspx.vb"
     Inherits="aspxWeb.mengxianhui.com.DataGridToExcel"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
      <HEAD>
        <title id="mengxianhui" runat="server"></title>
        <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
        <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
      </HEAD>
      <body MS_POSITIONING="GridLayout" style="FONT-SIZE:9pt">
        <form id="Form1" method="post" runat="server">
          <asp:Label id="Label1" runat="server"></asp:Label>
          <asp:TextBox ID="xlfile" Runat="server"></asp:TextBox>
          <br>
          <br>
          <asp:Button ID="ExportDataBase2Excel" Runat="server" />
          <asp:Button ID="ExportDataGrid2Excel" Runat="server" />
          <br>
          <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" BorderColor="#CC9966"
           BorderStyle="None" BorderWidth="1px" BackColor="White" CellPadding="4">
            <ItemStyle ForeColor="#330099" BackColor="White"></ItemStyle>
            <HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
            <Columns>
              <asp:BoundColumn DataField="Title"></asp:BoundColumn>
              <asp:BoundColumn DataField="Author"></asp:BoundColumn>
            </Columns>
          </asp:DataGrid>
        </form>
      </body>
    </HTML>
      

  3.   

    DataGridToExcel.aspx.vbImports System
    Imports System.Data
    Imports System.Data.OleDb
    Imports OWCPublic Class DataGridToExcel
      Inherits System.Web.UI.Page
      Protected WithEvents xlfile As System.Web.UI.WebControls.TextBox
      Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid
      Protected WithEvents ExportDataGrid2Excel As System.Web.UI.WebControls.Button
      Protected WithEvents ExportDataBase2Excel As System.Web.UI.WebControls.Button
      Protected WithEvents Label1 As System.Web.UI.WebControls.Label
      Protected mengxianhui As New HtmlGenericControl()  Private cnn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="_
       + Server.MapPath("Test.mdb"))
      Private sql As OleDbCommand = New OleDbCommand("SELECT TOP 50 Title,Author FROM Document", cnn)#Region " Web Form Designer Generated Code "  'This call is required by the Web Form Designer.
      <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()  End Sub  Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs)_
       Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
      End Sub#End Region  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)_
       Handles MyBase.Load
        Label1.Text = "请输入要保存得文件名字:"
        ExportDataGrid2Excel.Text = "由DataGrid生成Excel文件"
        ExportDataBase2Excel.Text = "数据库直接生成Excel文件"
        DataGrid1.Columns(0).HeaderStyle.HorizontalAlign = HorizontalAlign.Center
        DataGrid1.Columns(0).HeaderText = "文章名称"
        DataGrid1.Columns(1).HeaderText = "作者"
        DataGrid1.Columns(0).HeaderStyle.Font.Bold = True
        DataGrid1.Style.Add("font-size", "9pt")
        mengxianhui.InnerText = "【孟宪会之精彩世界】- 将DataGrid输出到Excel文件"
        Me.BindDataGrid()
      End Sub  Private Sub BindDataGrid()
        cnn.Open()
        Dim reader As OleDbDataReader = sql.ExecuteReader()
        Me.DataGrid1.DataSource = reader
        Me.DataGrid1.DataBind()
        reader.Close()
        cnn.Close()
      End Sub  Private Sub WriteDataGrid2Excel()
        Dim xlsheet As New SpreadsheetClass()
        cnn.Open()
        Dim reader As OleDbDataReader = Me.sql.ExecuteReader()
        Dim numbercols As Integer = reader.FieldCount
        Dim row As Integer = 2
        Dim i As Integer = 0
        ' 输出标题
        For i = 0 To numbercols - 1
          xlsheet.ActiveSheet.Cells(1, i + 1) = reader.GetName(i).ToString()
        Next    ' 输出字段内容
        While (reader.Read())
          For i = 0 To numbercols - 1
            xlsheet.ActiveSheet.Cells(row, i + 1) = reader.GetValue(i).ToString()
          Next
          row = row + 1
        End While
        reader.Close()
        cnn.Close()
        Try
          xlsheet.ActiveSheet.Export(Server.MapPath(".") + "\Images\" + Me.xlfile.Text,_
           OWC.SheetExportActionEnum.ssExportActionNone)
        Catch e As System.Runtime.InteropServices.COMException
          Response.Write("错误:" + e.Message)
        End Try
      End Sub  Private Sub WriteDataGrid2Excel2()
        Dim xlsheet As New SpreadsheetClass()
        Dim i As Integer = 0
        Dim j As Integer = 0
        'Response.End()
        ' 输出标题
        Dim oItem As DataGridColumn
        For Each oItem In DataGrid1.Columns
          xlsheet.ActiveSheet.Cells(1, i + 1) = oItem.HeaderText
          'xlsheet.ActiveSheet.Range(xlsheet.ActiveSheet.Cells(1, 1),_
           xlsheet.ActiveSheet.Cells(1, i + 1)).Font.Bold = True
          '设置格式
          xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, i + 1)).Font.Bold = True
          xlsheet.Range(xlsheet.Cells(1, 1), xlsheet.Cells(1, i + 1)).Font.Color = "red"
          i = i + 1
        Next    Dim numbercols As Integer = DataGrid1.Items.Item(0).Cells.Count
        ' 输出字段内容
        For j = 0 To DataGrid1.Items.Count - 1
          For i = 0 To numbercols - 1
            xlsheet.Range(xlsheet.Cells(2, 2), xlsheet.Cells(j + 2, i + 1)).Font.Color = "blue"
            'xlsheet.Range("A2:B14").WrapText = True
            xlsheet.Range(xlsheet.Cells(2, 1), xlsheet.Cells(j + 2, i + 1)).AutoFitColumns()
            xlsheet.ActiveSheet.Cells(j + 2, i + 1) = DataGrid1.Items.Item(j).Cells(i).Text.Replace("&nbsp;", " ")
          Next
        Next
        Try
          xlsheet.ActiveSheet.Export(Server.MapPath(".") + "\Images\" + Me.xlfile.Text,_
           OWC.SheetExportActionEnum.ssExportActionNone)
        Catch e As System.Runtime.InteropServices.COMException
          Response.Write("错误:" + e.Message)
        End Try
      End Sub  Private Sub ExportDataGrid2Excel_Click(ByVal sender As Object,_
       ByVal e As System.EventArgs) Handles ExportDataGrid2Excel.Click
        If (Me.xlfile.Text.Trim() <> "") Then
          Me.WriteDataGrid2Excel2()
        End If
      End Sub  Private Sub ExportDataBase2Excel_Click(ByVal sender As Object, _
       ByVal e As System.EventArgs) Handles ExportDataBase2Excel.Click
        If (Me.xlfile.Text.Trim() <> "") Then
          Me.WriteDataGrid2Excel()
        End If
      End SubEnd Class
      

  4.   

    TO  xulovewei(旭旭):还是不行,要是数字字符串超过10位,我的是12位,那么它就会用科学记数法的样式写进EXCEL
      

  5.   

    在那里绑定得?
    是否在if(!IsPostBack)
             {}
      

  6.   

    Response.ContentEncoding=System.Text.Encoding.GetEncoding("gb2312")
      

  7.   

    这应该和"UTF-8"或者"GB2312"无关的吧,因为我输出到word里的话,那些字符串显示正常的,现在是不是需要格式化EXCEL文档呢?会不会是因为是EXCEL单元格的问题
      

  8.   

    二、为什么我用dropdownlist1.selectedItem.text或者dropdownlist1.selectedItem.value得不到
        DropDownlist中被选定的值?我该怎么样表达才行
    是因为你的绑定是有问题的
    应在是否在if(!IsPostBack)
             {}
    如不是这样,那执行事件时先执行page_load,绑定,再执行你的事件,dropdownlist1.selectedItem.text
    会丢失的
      

  9.   

    1.excel单元格的问题
    2.先fill dataset
      再绑定
      再取selectedvalue