通过SQL存储过程也可以实现。网上有资料,自己搜一下。

解决方案 »

  1.   

    方式很多种1. 通过HTML导出 http://blog.csdn.net/xjbx/archive/2008/06/23/2580504.aspx2. 直接在服务端调用Excel的IDispatch接口,这种方式可以生成任何复杂形式的表格,但必须在服务器上安装Excel,且对权限由要求3. 使用Excel数据源 当作数据库导出
      

  2.   

    下面是gridview导出excel部分代码
     StringWriter tw = new StringWriter();
     HtmlTextWriter hw = new HtmlTextWriter(tw);GridView1.RenderControl(hw);
    Response.Write(tw.ToString());
    Response.End();
    你只需要把这里改成
    Response.Write("你自己拼接的html字符串");//比如"<table><tr><td>第一行</td></tr>><tr><td>第二行</td></tr>
    Response.End();[/
      

  3.   


    我是想把数据库10000条左右数据写到Excel里,
    如果用这种方法,怎么写到html上啊?不懂
      

  4.   

     那就自己一行一行的往Excel写吧
      

  5.   


    我想请问,这个方法比Girdview快吗?我是因为导入Girdview再导出Excel实在太慢了才想直接导出的
      

  6.   

    如果你是这个目的,那就用System.Data.SqlClient.SqlBulkCopy吧,几万条记录也就几秒
      

  7.   

    可以看一下参考一下
    http://topic.csdn.net/u/20090317/10/331269bc-d913-443a-abdd-642d858f7d24.html
      

  8.   

    我刚好以前写过,我的思路就是把Excel做成一个模板,从数据库中取到数据,把数据插入到excel模板中(不要一单元格一单元格插入,速度会很慢的),然后下载下来即可。
      

  9.   

    除了SqlBulkCopy,还有一个方法就是用BCP导出,效率比SqlBulkCopy还高
      

  10.   

    private void ExportToExcel(System.Data.DataTable dt)    {        System.Text.StringBuilder sb = new System.Text.StringBuilder();        string strExlAddr = ConfigurationManager.AppSettings["ExlAddress"].Trim();                    try        {            sb.Append("<Script Language=VBScript>");            sb.Append("<!--\r\n");            sb.Append("dim xls\r\n");            sb.Append("Set xls=CreateObject(\"Excel.Application\")\r\n");            sb.Append("xls.WorkBooks.Open(\"" + strExlAddr + "FCT.xls\")\r\n");            sb.Append("xls.Sheets(1).Select\r\n");            sb.Append("xls.visible=true\r\n");            int r = dt.Rows.Count;            int c = dt.Columns.Count;            for (int i = 0; i < r; i++)            {                for (int j = 0; j < c - 1; j++)                    sb.Append("xls.Sheets(1).Cells(" + (i + 4) + "," + (j + 1) + ")=\"" + dt.Rows[i][j].ToString().Trim() + "\"\r\n");            }            sb.Append("'xls.ActiveWorkbook.SaveAs(\"C:/Report.xls\")\r\n");            sb.Append("'xls.ActiveWorkbook.Saved=true\n");            sb.Append("'xls.Quit\r\n");            sb.Append("set xls=nothing\r\n");            sb.Append("-->");            sb.Append("</script>");        }        catch        {            Response.Write("<script>alert('Error!');</script>");            return;        }        Page.RegisterClientScriptBlock("", sb.ToString());    }
      

  11.   

    protected  void WriteExcel(DataTable dtSource, string strPath)
        {        System.Data.OleDb.OleDbConnection OleDb_Conn = new OleDbConnection();
            OleDb_Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=Yes';" + "Data Source=\"" + strPath + "\"";
          
            try
            {
                OleDb_Conn.Open();
                OleDbCommand OleDb_Comm = new OleDbCommand();
                OleDb_Comm.Connection = OleDb_Conn;            string strCmd;
                try
                {
                    strCmd = "drop table [statistic]";
                    OleDb_Comm.CommandText = strCmd;
                    OleDb_Comm.ExecuteNonQuery();
                }
                catch
                {
                }            strCmd = "create Table [statistic](";
                foreach (DataColumn dc in dtSource.Columns)
                {
                    strCmd += "[" + dc.ColumnName + "] nchar(50),";
                }
                strCmd = strCmd.Trim().Substring(0, strCmd.Length - 1);
                strCmd += ")";
                OleDb_Comm.CommandText = strCmd;            OleDb_Comm.ExecuteNonQuery();            foreach (DataRow dr in dtSource.Rows)
                {
                    if (dr.RowState != System.Data.DataRowState.Deleted)
                    {
                        strCmd = "insert into [statistic] values(";
                        foreach (DataColumn dc in dtSource.Columns)
                        { 
                                strCmd += "'" + dr[dc.ColumnName].ToString() + "',";                        
                        }                    strCmd = strCmd.Substring(0, strCmd.Length - 1);
                        strCmd += ")";                    OleDb_Comm.CommandText = strCmd;
                        OleDb_Comm.ExecuteNonQuery();                }
                }
                OleDb_Conn.Close();
            }
            catch (Exception ex)
            {
                tool.WarningDialog(ex.Message);
            }
            finally
            {
                OleDb_Conn.Close();
            }
        }以上oledb方法
      

  12.   

    可以直接从DataSet做成,很快的,我帮你写了个函数,你试验一下    public void CreateExcel(DataSet ds, string FileName)
        {
            HttpResponse resp;
            resp = Page.Response;
            resp.ContentEncoding = System.Text.Encoding.GetEncoding("shift_jis");
            resp.ContentType = "application/excel";
            resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);        //System.IO.StringWriter stringWrite = new System.IO.StringWriter();
            //System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
            //table1.RenderControl(htmlWrite);
            //resp.Write("Excel出力調査\n");
            //resp.Write(stringWrite.ToString());
            string iii = "<h1>Excel出力調査</h1>\n";
            resp.Write("\n");
            string colHeaders = "", ls_item = "";
            //定义表对象与行对象,同时用DataSet对其值进行初始化
            DataTable dt = ds.Tables[0];
            DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的
            int i = 0;
            int cl = dt.Columns.Count;
            //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符
            for (i = 0; i < cl; i++)
            {
                if (i == (cl - 1))//最后一列,加n
                {
                    colHeaders += dt.Columns[i].Caption.ToString() + "\n";
                }
                else
                {
                    colHeaders += dt.Columns[i].Caption.ToString() + "\t";
                }
            }
            resp.Write(colHeaders);
            //向HTTP输出流中写入取得的数据信息
            //逐行处理数据 
            foreach (DataRow row in myRow)
            {
                //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据  
                for (i = 0; i < cl; i++)
                {
                    if (i == (cl - 1))//最后一列,加n
                    {
                        ls_item += row[i].ToString() + "\n";
                    }
                    else
                    {
                        ls_item += row[i].ToString() + "\t";
                    }
                }
                resp.Write(ls_item);
                ls_item = "";
            }
            resp.End();
        }