业务中经常有些需求,需要把数据通过csv文件导出,以方便用户操作数据。在这里我简单的记录下客户端和服务端的导出方式,以便下次使用。
服务端
导出方式,将数据写入response中即可,下面是代码
public void ExportDataToCsvFile(HttpResponseBase Response, DataTable dt, string FileName)
{
//在chrome,firefox下中文不会出现乱码
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
//有乱码,但是可以通过保存成csv,ansi格式的文本解决
//Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
//Response.ContentType = "application/csv;charset=gbk";
string colHeaders = "";
string ls_item = "";
int i = 0;
DataRow[] myRow = dt.Select("");
for (i = 0; i < dt.Columns.Count; i++)
{
if (i == dt.Columns.Count - 1)
{
colHeaders += dt.Columns[i].Caption.ToString() + "\n";
}
else
{
colHeaders += dt.Columns[i].Caption.ToString() + ",";
}
}
//向HTTP输出流中写入取得的数据信息
Response.Write(colHeaders);
//逐行处理数据
foreach (DataRow row in myRow)
{
//在当前行中,逐列获得数据,数据之间以\t分割,结束时加回车符\n
for (i = 0; i < dt.Columns.Count; i++)
{
if (i == dt.Columns.Count - 1)
{
ls_item += row[i].ToString() + "\n";
}
else
{
ls_item += row[i].ToString() + ",";
}
}
//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
Response.Write(ls_item);
ls_item = "";
}
//写缓冲区中的数据到HTTP头文件中
Response.End();
}
当导出chrome,firefox时,以上代码能适用,中文不会出现乱码,但是当通过IE导出,就出现了乱码,解决办法在代码的注释中,但也是间接的解决这个问题罢了。
客户端如何调用这个服务端的方法呢,只要发送一个form post请求就行,当请求返回后,浏览器就会生成一个文件下载完成的操作。
客户端
客户端导出不同浏览器的处理也是不同的
IE
function StringToExcelFile(data) {
try {
var xls = new ActiveXObject("Excel.Application");
xls.visible = true;
var newBook = xls.Workbooks.Add;
newBook.Worksheets.Add;
newBook.Worksheets(1).Activate;
xls.ActiveWorkBook.ActiveSheet.PageSetup.Orientation = 1;
xls.ActiveWorkBook.ActiveSheet.PageSetup.PaperSize = 1;
var lineArray = data.split('\n');
for (var i = 0; i < lineArray.length; i++) {
var row = lineArray[i];
var fieldArray = row.split(',');
for (var j = 0; j < fieldArray.length; j++) {
var fieldValue = fieldArray[j];
newBook.Worksheets(1).Cells(i + 1, (j + 1)).value = fieldValue;
}
}
newBook.Worksheets(1).Name = '盘点报表';
}
catch (e) {
var msg = e.description; //如果需要导出,请按如下步骤设置:IE浏览器的Internet选项->安全->
//自定义级别->ActiveX控件和插件->对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本->启用";
}
}
注意,上面的是使用office组件导出,需要在Internet选项的安全中设置安全级别才能使用ActiveXObject组件。
download