求高手帮忙修改此代码,已经实现了数据导出生成Excel,但是有2个问题,
1.如果数据集超过65535条,应该怎么修改此代码保证不异常。
2.表头是直接读数据库字段名称,可以修改为各个字段名字,中文显示在Excel表头里吗?
public static void CreateExcel(DataSet ds, string fileName)
{
//输出形式为excel
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
//指定下载的文件名称
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlPathEncode(fileName));
//指定字符编码格式(避免出现乱码)
HttpContext.Current.Response.ContentEncoding = Encoding.GetEncoding("gb2312");
DataTable table = ds.Tables[0];
string header = "";
string content = "";
int i;
//输入标题
for (i = 0; i < table.Columns.Count - 1; i++)
{
header += table.Columns[i].Caption + "\t";
}
//标题最后一列要换行
header += table.Columns[i].Caption + "\n";
HttpContext.Current.Response.Write(header);
//输出数据
foreach (DataRow row in table.Rows)
{
for (i = 0; i < table.Columns.Count - 1; i++)
{
content += row[i].ToString() + "\t";
}
content += row[i].ToString() + "\n";
}
//输出数据的内容
HttpContext.Current.Response.Write(content);
HttpContext.Current.Response.End();
}
望高手指点,最主要是第一个问题怎么解决?
1.如果数据集超过65535条,应该怎么修改此代码保证不异常。
2.表头是直接读数据库字段名称,可以修改为各个字段名字,中文显示在Excel表头里吗?
public static void CreateExcel(DataSet ds, string fileName)
{
//输出形式为excel
HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
//指定下载的文件名称
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlPathEncode(fileName));
//指定字符编码格式(避免出现乱码)
HttpContext.Current.Response.ContentEncoding = Encoding.GetEncoding("gb2312");
DataTable table = ds.Tables[0];
string header = "";
string content = "";
int i;
//输入标题
for (i = 0; i < table.Columns.Count - 1; i++)
{
header += table.Columns[i].Caption + "\t";
}
//标题最后一列要换行
header += table.Columns[i].Caption + "\n";
HttpContext.Current.Response.Write(header);
//输出数据
foreach (DataRow row in table.Rows)
{
for (i = 0; i < table.Columns.Count - 1; i++)
{
content += row[i].ToString() + "\t";
}
content += row[i].ToString() + "\n";
}
//输出数据的内容
HttpContext.Current.Response.Write(content);
HttpContext.Current.Response.End();
}
望高手指点,最主要是第一个问题怎么解决?
1.用dataset里的datatable对应 excel的表单。
2.datatable里修改。
参考 http://jasondct.blog.163.com/blog/static/81820673201111481221348/
和孟兄交流的问题
http://topic.csdn.net/u/20111204/16/a4afa0ef-3657-48d8-86db-c923fdd3a4b6.html
不是多个表导入到Excel,是一个表里有65535条信息了 使用这个代码导出Excel怎么修改???
2.準備一個超多Sheet的Excel模版,然後把按照65535條記錄用OleDb的方式插入到Sheet中。前提是你的Sheet要夠多。
說明:程序不可能支持任何條數據。但是儘可能滿足用戶需求就是。
比如:支持再好一有局限性。
就算是DataBase來說:一個表的數據也是有限的。實際情況來將是這樣的。數據多了就慢。況且全部給用戶的話,這麼多數據也沒什麼意義了。計算機都處理不過來,我們的user看了也沒用的哈。
备注:完整的代码是偶写的工程代码,版权所有的。但大家可以根据我的思路和关键代码的提示自己完成想要的功能,呵呵
代码片段一 sheet创建:
//生成创建表的脚本
StringBuilder sb = new StringBuilder();
sb.Append("CREATE TABLE ");
sb.Append("[" + tableName + "] ( "); for (int i = 0; i < headers.Length; i++)
{
string datatype;
switch (dt.Columns[columns[i]].DataType.Name.ToLower())
{
case "float": datatype = "float"; break;
case "int32": datatype = "int"; break;
case "double": datatype = "double"; break;
case "decimal": datatype = "float"; break;
default: datatype = "text"; break;
}
if (i < headers.Length - 1)
{
sb.Append(string.Format("[{0}] {1},", headers[i], datatype));
}
else
{
sb.Append(string.Format("[{0}] {1})", headers[i], datatype));
}
}
return sb.ToString();大家看到了把,我们可以使用create语句创建sheet。我们使用的表的名称,将变成sheet名称。
建议大家导出的名称可以这样依次起:比如产品信息数据,表名可以分别叫 产品信息(第1页)、产品信息(第2页)等等。代码片段二 按照需要自动创建多个sheet:for (int i = 0; i < dt.Rows.Count; i++)
{
//创建sheet
if (i % 65535 == 0)
{
tableName = string.Format("{0}Page{1}", dt.TableName, (i / 65535) + 1);
objCmd.CommandText = GetCreateSheetSQL(dt, headers, columns, tableName);
objCmd.ExecuteNonQuery();
}
插入语句#region 插入语句
sb.Append("INSERT INTO ");
sb.Append("[" + tableName + "] ( ");
.
excel加载数据是用的全部加载模式。2007这前的不支持超过65535的数据量。