execal 导入matlab,使用 nopi导出大量数据保存execal的方法 c#开发

本文代码是在easyui框架下用c#开发

由于在easyui中没有插件或者控件什么的可以直接导出execal,所有要采取外部插件。我使用了nopi插件。

在使用的时候遇见的问题:

1:点击导出execal 用ajax发起,浏览器没有任何反应,也就是弹不出来对话框提示下载的。

2:几千条的数据时可以用,上万的数据的时候就需要 改写代码了。

(废话太多直接上代码)

在easyui中导出按钮是动态创建的

如下图

9ef9633043b27b31f6d1d421d89f71de.png

后台easyui代码 如下

{

text: '导出Execal编辑', iconCls: 'icon-print', handler: function () {

$("").prependTo('body');

$("#Frame2").attr("src","Printf.ashx?flag=2&id="+$('#yhm').combogrid('getValue')+"&action="+$('input[name="copys"]:checked').val() );

}

}

此处是动态创建一个frame 是display:none 的,引出另外一个界面

Printf.ashx代码如下

DataTable dt = SqlHelper.ExecuteTable(sql);

//common.getExcel(dt);

MemoryStream ms = common.RenderToExcel(dt);

common.RenderToBrowser(ms,HttpContext.Current, "EmptyWork");

第一行 先得到一个datatable,

第二行 得到一个 MemoryStream

第三行  导出execal文件

RenderToExcel方法如下

#region 导出excal

public static MemoryStream RenderToExcel(DataTable table)

{

MemoryStream ms = new MemoryStream();

using (table)

{

//using (IWorkbook workbook = new HSSFWorkbook())

IWorkbook workbook = new HSSFWorkbook();

{

//using (ISheet sheet = workbook.CreateSheet())

ISheet sheet = workbook.CreateSheet();

{

IRow headerRow = sheet.CreateRow(0);

// handling header.

foreach (DataColumn column in table.Columns)

headerRow.CreateCell(column.Ordinal).SetCellValue(column.Caption);//If Caption not set, returns the ColumnName value

// handling value.

int rowIndex = 1;

foreach (DataRow row in table.Rows)

{

IRow dataRow = sheet.CreateRow(rowIndex);

foreach (DataColumn column in table.Columns)

{

dataRow.CreateCell(column.Ordinal).SetCellValue(row[column].ToString());

}

rowIndex++;

}

workbook.Write(ms);

ms.Flush();

ms.Position = 0;

}

}

}

return ms;

}

#endregion

RenderToBrowser方法如下

#region 导出excal事件

public static void RenderToBrowser(MemoryStream ms, HttpContext context, string fileName)

{

if (context.Request.Browser.Browser == "IE")

fileName = HttpUtility.UrlEncode(fileName);

context.Response.AddHeader("Content-Disposition", "attachment;fileName=" + fileName + ".xls");

context.Response.BinaryWrite(ms.ToArray());

}

#endregion

用此方法可解决数据量大的时候导出无反应的情况

————————————————————————————————

如果有一样的那就是我抄别人的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值