C#将数据以XML格式写入Excel
本文转载:http://www.cnblogs.com/eflylab/archive/2008/09/21/1295580.html
c#将数据导入Excel另类方法
今天公司突然给个Excel模版,要将数据导入。这方法网上应该一搜一大把,但奇怪的是找了几种方法居然不理想。其中有一篇,大概是讲用模版且分页导出Excel。试了作者的例子。使用它提供的方法必须分页,每页25条,多了还不行。显示不符合我的要求。
使用ASP.NET中的DATAGRID控件可以使用导出Excel。但其导出的本质是Response一段HTML代码,并且设置输出类型为Excel即可。其实这种方法与控件没有关系,换言之,只要你设置了HTML代码,以Excel类型输出到页面,即可实现任意你想要的格式。
但现在的问题是这个格式 可能并不是你的HTML代码在页面上体现的形式,因为你定义的CSS可能输出到Excel它并不支持。那么怎么办呢?
我突然想到Excel要是有导出HTML功能岂不美栽?打开Excel。点击 文件。出现在菜单中 出现了 另存为网页。在接下来出现的对话框中 选择 工作表,而不要选择 整体工作薄,因为如果选择整个工作薄,这样导出后它会将CSS存为单独文件。我们稍后使用使用起来不便。
选择保存后,会生成一个单一的HTML文件,并且CSS样式都有,这里的CSS样式很重要,它在Excel中会得到支持。
然后我们可以读取这个HTML代码,需要注意的是,需要先把<html</html>这二个标记去掉。否则输出不了Excel。同时最好去掉这些代码中的JS代码。
然后你可以将你的数据读取放入到DataTable中,然后循环<tr>放入,即可!
下面给出一个示例代码。
return sb.ToString();
}
注意上面很多代码,并不是我一行行写的,这是很不明智的方法,HTML代码是从Excel是导出的,而一行行变成sb.Append形式是通过工具生成的。这工具不难,自己都可以写一个。注意上面//数据区域,是读取数据库,然后一行行循环。最后调用如下方式输出即可。
{
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");//设置输出流为简体中文
Response.AppendHeader("Content-Disposition", "attachment;filename=cnqsq.xls");
Response.ContentType = "application/ms-excel";
EnableViewState = false;
Response.Write(data());
Response.End();
}
示例代码就不给出了,因为主要是方法。提供方法思路,相信实现起来并不难。
今天公司突然给个Excel模版,要将数据导入。这方法网上应该一搜一大把,但奇怪的是找了几种方法居然不理想。其中有一篇,大概是讲用模版且分页导出Excel。试了作者的例子。使用它提供的方法必须分页,每页25条,多了还不行。显示不符合我的要求。
使用ASP.NET中的DATAGRID控件可以使用导出Excel。但其导出的本质是Response一段HTML代码,并且设置输出类型为Excel即可。其实这种方法与控件没有关系,换言之,只要你设置了HTML代码,以Excel类型输出到页面,即可实现任意你想要的格式。
但现在的问题是这个格式 可能并不是你的HTML代码在页面上体现的形式,因为你定义的CSS可能输出到Excel它并不支持。那么怎么办呢?
我突然想到Excel要是有导出HTML功能岂不美栽?打开Excel。点击 文件。出现在菜单中 出现了 另存为网页。在接下来出现的对话框中 选择 工作表,而不要选择 整体工作薄,因为如果选择整个工作薄,这样导出后它会将CSS存为单独文件。我们稍后使用使用起来不便。
选择保存后,会生成一个单一的HTML文件,并且CSS样式都有,这里的CSS样式很重要,它在Excel中会得到支持。
然后我们可以读取这个HTML代码,需要注意的是,需要先把<html</html>这二个标记去掉。否则输出不了Excel。同时最好去掉这些代码中的JS代码。
然后你可以将你的数据读取放入到DataTable中,然后循环<tr>放入,即可!
下面给出一个示例代码。
return sb.ToString();
}
注意上面很多代码,并不是我一行行写的,这是很不明智的方法,HTML代码是从Excel是导出的,而一行行变成sb.Append形式是通过工具生成的。这工具不难,自己都可以写一个。注意上面//数据区域,是读取数据库,然后一行行循环。最后调用如下方式输出即可。
{
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");//设置输出流为简体中文
Response.AppendHeader("Content-Disposition", "attachment;filename=cnqsq.xls");
Response.ContentType = "application/ms-excel";
EnableViewState = false;
Response.Write(data());
Response.End();
}
示例代码就不给出了,因为主要是方法。提供方法思路,相信实现起来并不难。