乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > Asp.net如何快速导出大量数据(10万条以上)?

Asp.net如何快速导出大量数据(10万条以上)?

作者:乔山办公网日期:

返回目录:excel表格制作


先将数据绑定到一个控件中,例如gridview:
放一个按钮,7a686964616fe4b893e5b19e338代码如下:
protected void ibtnExcel_Click(object sender, ImageClickEventArgs e)
{
string FileName = "标题 " + DateTime.Now + ".xls";
Response.Charset = "GB2312";
Response.ContentEncoding = Encoding.UTF8;//System.Text
//如果设置GB2312会出现乱码
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());
Response.AddHeader("content-type", "application / ms - excel");//设置输出文件的类型
//或Response.ContentType = FileType;
//定义一个输出流
StringWriter tw = new StringWriter();//System.IO
HtmlTextWriter hw = new HtmlTextWriter(tw);
gridview1.RenderControl(hw);//gridview绑定
Response.Write(tw.ToString());
Response.End();
}

public override void VerifyRenderingInServerForm(Control control)
{
//必须写这个;
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;
using System.Data;

namespace ExcelTest
{
public class ExcelUtil
{
System.Data.DataTable table11 = new System.Data.DataTable();

public void ExportToExcel(System.Data.DataTable table, string saveFileName)
{

bool fileSaved = false;

//ExcelApp xlApp = new ExcelApp();

Application xlApp = new Application();

if (xlApp == null)
{
return;
}

Workbooks workbooks = xlApp.Workbooks;
Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet worksheet = (Worksheet)workbook.Worksheets[1];//取得sheet1

long rows = table.Rows.Count;

/*下边注释的两行代码当数据行数超过行时,出现异常:异常来自HRESULT:0x800A03EC。因为:Excel 2003每个sheet只支持最大行数据

//Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[table.Rows.Count+2, gridview.Columns.View.VisibleColumns.Count+1]);

//fchR.Value2 = datas;*/

if (rows > 65535)
{

long pageRows = 60000;//定义每页显示的行数,行数必须小于

int scount = (int)(rows / pageRows);

if (scount * pageRows < table.Rows.Count)//当总行数不被pageRows整除时,经过四舍五入可能页数不准
{
scount = scount + 1;
}

for (int sc = 1; sc <= scount; sc++)
{
if (sc > 1)
{

object missing = System.Reflection.Missing.Value;

worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(

missing, missing, missing, missing);//添加一个sheet

}

else
{
worksheet = (Worksheet)workbook.Worksheets[sc];//取得sheet1
}

string[,] datas = new string[pageRows + 1, table.Columns.Count+ 1];

for (int i = 0; i < table.Columns.Count; i++) //写入字段
{
datas[0, i] = table.Columns[i].Caption;
}

Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, table.Columns.Count]);
range.Interior.ColorIndex = 15;//15代表灰色
range.Font.Bold = true;
range.Font.Size = 9;

int init = int.Parse(((sc - 1) * pageRows).ToString());
int r = 0;
int index = 0;
int result;

if (pageRows * sc >= table.Rows.Count)
{
result = table.Rows.Count;
}
else
{
result = int.Parse((pageRows * sc).ToString());
}
for (r = init; r < result; r++)
{
index = index + 1;
for (int i = 0; i < table.Columns.Count; i++)
{
if (table.Columns[i].DataType == typeof(string) || table.Columns[i].DataType == typeof(Decimal) || table.Columns[i].DataType == typeof(DateTime))
{
object obj = table.Rows[r][table.Columns[i].ColumnName];
datas[index, i] = obj == null ? "" : "'" + obj.ToString().Trim();//在obj.ToString()前加单引号是为了防止自动7a64e59b9ee7ad94337转化格式

}

}
}

Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[index + 2, table.Columns.Count + 1]);

fchR.Value2 = datas;
worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。

range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[index + 1, table.Columns.Count]);

//15代表灰色

range.Font.Size = 9;
range.RowHeight = 14.25;
range.Borders.LineStyle = 1;
range.HorizontalAlignment = 1;

}

}

else
{

string[,] datas = new string[table.Rows.Count + 2, table.Columns.Count + 1];
for (int i = 0; i < table.Columns.Count; i++) //写入字段
{
datas[0, i] = table.Columns[i].Caption;
}

Range range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, table.Columns.Count]);
range.Interior.ColorIndex = 15;//15代表灰色
range.Font.Bold = true;
range.Font.Size = 9;

int r = 0;
for (r = 0; r < table.Rows.Count; r++)
{
for (int i = 0; i < table.Columns.Count; i++)
{
if (table.Columns[i].DataType == typeof(string) || table.Columns[i].DataType == typeof(Decimal) || table.Columns[i].DataType == typeof(DateTime))
{
object obj = table.Rows[r][table.Columns[i].ColumnName];
datas[r + 1, i] = obj == null ? "" : "'" + obj.ToString().Trim();//在obj.ToString()前加单引号是为了防止自动转化格式

}

}

//System.Windows.Forms.Application.DoEvents();

}

Range fchR = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[table.Rows.Count + 2, table.Columns.Count + 1]);

fchR.Value2 = datas;

worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。

range = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[table.Rows.Count + 1, table.Columns.Count]);

//15代表灰色

range.Font.Size = 9;
range.RowHeight = 14.25;
range.Borders.LineStyle = 1;
range.HorizontalAlignment = 1;
}

if (saveFileName != "")
{
try
{
workbook.Saved = true;
workbook.SaveCopyAs(saveFileName);
fileSaved = true;

}

catch (Exception ex)
{
fileSaved = false;
}

}

else
{

fileSaved = false;

}

xlApp.Quit();

GC.Collect();//强行销毁

}
}
}
#region 连接Excel 读取Excel数据 并返回DataSet数据集合
/// <summary>
/// 连接Excel 读取Excel数据 并返回DataSet数据集合
/// </summary>
/// <param name="filepath">Excel服务器路径</param>
/// <param name="tableName">Excel表名称</param>
/// <returns></returns>
public static System.Data.DataSet ExcelSqlConnection(string filepath, string tableName)
{
string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
OleDbConnection ExcelConn = new OleDbConnection(strCon);
try
{
string strCom = string.Format("SELECT * FROM [Sheet1$]");
ExcelConn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, ExcelConn);
DataSet ds = new DataSet();
myCommand.Fill(ds, "[" + tableName + "$]");
ExcelConn.Close();
return ds;
}
catch
{

ExcelConn.Close();
return null;
}
}
#endregion

#region 导入的execl
protected void Button2_Click(object sender, EventArgs e)
{
SqlConnection cn = new BSqlDataProvider().GetSqlConnection();
cn.Open();
if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件
{
Response.Write("<script>alert('请您选择Excel文件')</script> ");
return;//当无文件时,返回
}
string IsXls = System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
if (IsXls != ".xls")
{
Response.Write("<script>alert('只可以选择Excel文件')</script>");
return;//当选择的不是Excel文件时,返回
}
string filename = FileUpload1.FileName; //获取Execle文件名 DateTime日期e69da5e6ba90e799bee5baa6337函数
string savePath = Server.MapPath(("~\\upfiles\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
FileUpload1.SaveAs(savePath); //SaveAs 将上传的文件内容保存在服务器上
DataSet ds = ExcelSqlConnection(savePath, filename); //调用自定义方法
DataRow[] dr = ds.Tables[0].Select(); //定义一个DataRow数组
int rowsnum = ds.Tables[0].Rows.Count;
if (rowsnum == 0)
{
Response.Write("<script>alert('Excel表为空表,无数据!')</script>"); //当Excel表为空时,对用户进行提示
}
else
{
for (int i = 0; i < dr.Length; i++)
{
string spdm = dr[i]["商品代码"].ToString();//日期 excel列名【名称不能变,否则就会出错】
string jijie = dr[i]["季节"].ToString();
string boduan = dr[i]["波段"].ToString();
string s_chan = dr[i]["生产商"].ToString();
string f_shi = dr[i]["方式"].ToString();
string c_ku = dr[i]["仓库"].ToString();
string insertstr = "insert into AA_ANSD values('"+spdm+"','"+jijie+"','"+boduan+"','"+s_chan+"','"+f_shi+"','"+c_ku+"')";
SqlCommand cmd = new SqlCommand(insertstr, cn);
try
{
cmd.ExecuteNonQuery();
}
catch (MembershipCreateUserException ex) //捕捉异常
{
Response.Write("<script>alert('导入内容:" + ex.Message + "')</script>");
}

}
Response.Write("<script>alert('Excle表导入成功!');location='CMT_Entry.aspx?CMD=0'</script>");
}

cn.Close();

}
#endregion

快给分 啊

我之前写过一篇博文

之前的项目中有一个功能是将gridview中的内容导出为Excel表格,相信这个功能还是比较常用的,所以将代码拿出来分享。
首先要调用
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
因为导出的方法要使用到它们
如果gridview是分页的,那么按照当前分页打印则是以下代码:
protected void Button2_Click(object sender, EventArgs e)
{
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=StudentSelect.xls");
Response.ContentType = "application/msexcel";
Response.Clear();
Response.BufferOutput = true;
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView1.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}

如果是无视e799bee5baa6e78988e69d83338gridview的分页,将其全部导出的话,则是以下代码:
protected void Button3_Click(object sender, EventArgs e)
{
GridView1.AllowPaging = false;
BLL.AdminBLL SB = new BLL.AdminBLL();
DataSet SD = SB.selectStudentProject();
GridView1.DataSource = SD.Tables["tbl_Student"];
GridView1.DataBind();
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=AllStudentSelect.xls");
Response.ContentType = "application/msexcel";
Response.Clear();
Response.BufferOutput = true;
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView1.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}

相关阅读

  • <em>sql</em> <em>OPENROWSET</em> 读取远

  • 乔山办公网excel表格制作
  • 目前主要提到了三种办法,一种在程序中调用DTS,二种使用SQL SERVER带的BCP功能,道内三种使用openrowset。具体看下面:这是利用BCP来做的,使用SQLServer自带的bcp命令——bcp 数据库名.dbo
关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网