DataGrid 中导出 Excel 时如果數據过大

yanggang5566 2006-08-18 09:49:15
請問

DataGrid 中导出 Excel 时如果數據过大,假如有30000條數據,執行超時,該如何 解決?
...全文
260 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanggang5566 2006-08-21
  • 打赏
  • 举报
回复
林子兄弟,

多謝你!
我下載源碼后,發現IExcel這個專案中,代碼只有CreateDataSource();
沒看到導出的代碼呀,請兄弟幫忙提供!
linfuguo 2006-08-19
  • 打赏
  • 举报
回复
昨天刚刚整理好的我以前写的类库,参考一下吧
你刚才说的三万条记录都不能导出,说明真的有问题了,我写的那个,已经测试过6W时间为7S
看一下吧!

建议不要直接把DataGrid导出或直接导出数据源,那样会有很多问题!
最好把dataset或datatable导出,这些我已经实现了类库,或相关程序!

请参见:
http://www.cnblogs.com/linfuguo/archive/2006/08/19/480976.html其中分两部分(一,二)
一为使用说明,二是相关源码及DLL文件

Good Luck!

yanggang5566 2006-08-19
  • 打赏
  • 举报
回复
各位兄弟,
多謝你們的幫忙,恕在下愚昧,還沒有找到正確的解決方案.
30000條數據可以查出來,然后將數據在綁定到隱藏的DataGrid導出卻不行.
linfuguo 2006-08-19
  • 打赏
  • 举报
回复
刚才整理一下写的那个类库
请参见:
http://www.cnblogs.com/linfuguo/archive/2006/08/19/480976.html
dgrwang 2006-08-18
  • 打赏
  • 举报
回复
用cvs方法不会超时,很快的
blackhero 2006-08-18
  • 打赏
  • 举报
回复
我们用FarPoint
mail_ricklee 2006-08-18
  • 打赏
  • 举报
回复
你可以看看这个NickLee.Common.ExcelLite
免费的
效率说明:
http://nicklee.yuanbo.cn参见里面的Excel菜单
下载地址:
http://nicklee.yuanbo.cn/NickLee.Framework.2.0.0.2.rar
给分...
yanggang5566 2006-08-18
  • 打赏
  • 举报
回复
jimu8130:


本人很菜,不明白你的思想,你的程式也看得云里霧里.

using Aspose.Excel;dll 文件也沒有.
jimu8130 2006-08-18
  • 打赏
  • 举报
回复
你要在你的程序根目录下面建立一个模板文件excel文件
jimu8130 2006-08-18
  • 打赏
  • 举报
回复
using System;
using System.Data;
using Aspose.Excel;
using System.IO;
using System.Web.UI.HtmlControls;

namespace temp.BLL
{
/// <summary>
/// WEB页面助手类。
/// </summary>
public class UIHelper
{
public UIHelper()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

/// <summary>
/// 导出测评企业综合得分到Excel
/// </summary>
/// <param name="table">要导出的表</param>
/// <param name="fileName">要保存的文件名,不需要加扩展名,不支持中文</param>
/// <param name="response"></param>
public static void ExportToExcel(DataTable table, string fileName, System.Web.UI.Page page)
{
Excel excel = new Excel();
// string path = page.MapPath(".");
// path = path.Substring(0, path.LastIndexOf("\\UI") + 3);
// string templateName = "模板";
// string designerFile = path + "\\ReportsTemplate\\" + templateName + ".xls";
// excel.Open(designerFile);
string path = page.Request.ApplicationPath;
string templateName = "电话号码";
path = path + "\\" + templateName + ".xls";
path = page.MapPath(path);
//string designerFile = path + "\\ReportsTemplate\\" + templateName + ".xls";
excel.Open(path);
Worksheet sheet = excel.Worksheets[0];

sheet.Cells.ImportDataTable(table, true, 0, 0);
sheet.Name = templateName;
while(excel.Worksheets.Count > 1)
excel.Worksheets.RemoveAt(excel.Worksheets.Count - 1);
excel.Save(fileName+ ".xls", SaveType.OpenInExcel, FileFormatType.Default, page.Response);
}

/// <summary>
/// 判断当前用户状态是否过期,如果过期重定向到登录页面
/// </summary>
/// <param name="page"></param>
/// <param name="o"></param>
/// <returns></returns>
/// <summary>
/// 写入错误日志
/// </summary>
/// <param name="pageName">页面名称</param>
/// <param name="ex">错误</param>
/// <param name="page">当前页面(this)</param>

/// <summary>
/// 输出报表时,去掉列名不是中文的列
/// </summary>
/// <param name="table"></param>
public static void GetRidOfColumns(DataTable table)
{
for (int i = table.Columns.Count - 1; i > -1; i--)
{
DataColumn column = table.Columns[i];
char col = column.ColumnName.ToUpper().ToCharArray()[0];
if (col >= 'A' && col <= 'Z')
{
table.Columns.Remove(column);
}
}
}

public static HtmlAnchor GetHtmlAnchor(string innerText, string href)
{
HtmlAnchor htmlAnchor = new HtmlAnchor();
htmlAnchor.InnerText = innerText;
htmlAnchor.HRef = href;

return htmlAnchor;
}
}
}
jimu8130 2006-08-18
  • 打赏
  • 举报
回复
这个是我用到的部分代码
jimu8130 2006-08-18
  • 打赏
  • 举报
回复
既然你绑定到隐藏的datagrid(不显示),那么就不要用datagrid了1
yanggang5566 2006-08-18
  • 打赏
  • 举报
回复
jimu8130:
多謝你!
我是利用查询数据库后得到的数据源比如dataset,然后綁定到隱藏的DataGrid上,
15000條可以導出來,可數據達到30000就無法導出,
你提供网址上面有篇文章里面提供的源代码我確不能下載,公司網絡受到限制.
jimu8130 2006-08-18
  • 打赏
  • 举报
回复
你可以直接导出数据源,这句话没说清楚
解释下:利用查询数据库后得到的数据源比如dataset,然后利用这个数据源来导出excel,刚才提供的网址上面有篇文章里面提供的源代码,你可以利用它完成这个转换,我用过的,很不错
不过格式控制稍微差了
qinhl99 2006-08-18
  • 打赏
  • 举报
回复
//从DataGrid中导出数据到Excel
public void ExportData(DataGrid ds,string attachName)
{
Response.Clear();
Response.Buffer= true;
Response.Charset="utf-8";

Response.AppendHeader("Content-Disposition","attachment;" + attachName + "=.xls");
Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8");
//Response.ContentType指定文件类型 可以为application/ms-excel || application/ms-word || application/ms-txt || application/ms-html || 或其他浏览器可直接支持文档
Response.ContentType = "application/vnd.ms-excel";
Response.Charset = "";

//关闭 ViewState
EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();//将信息写入字符串
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);//在WEB窗体页上写出一系列连续的HTML特定字符和文本。
//此类提供ASP.NET服务器控件在将HTML内容呈现给客户端时所使用的格式化功能
//获取control的HTML
ds.RenderControl(hw);//将DATAGRID中的内容输出到HtmlTextWriter对象中
// 把HTML写回浏览器
Response.Write(tw.ToString());
Response.End();
}
jimu8130 2006-08-18
  • 打赏
  • 举报
回复
我觉得你可以直接导出数据源,建议你看看这里面的文章,特别是题头的那个提供源代码的,你可以利用那个来导出,论坛上也有很多类似的帖子,你认真搜索下
http://www.cnblogs.com/birdshome/favorite/1666.html
linfuguo 2006-08-18
  • 打赏
  • 举报
回复
参见:http://www.microsoft.com/china/msdn/library/office/office/UndstaExcelObjModNETDev.mspx?mfr=true
linfuguo 2006-08-18
  • 打赏
  • 举报
回复
用Excel组件来读写管理,不会超时!
偶已经测过,10万,50W,100W!
都是以秒计,不会超时的!

不过千万注意,写的方法不地单Cell写!

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧