把数据导出到Excel的几种方法说明
2008-01-08 11:32
411 查看
今天开始自己写文章,有描述不当的地方请多指教。
这里主要讲述两种方法,包括处理导出的乱码和格式化问题。
(1)在客户端把GridView的数据导出到Excel格式文件。
(2)使用COM组件把数据导出到Excel格式文件。
这两种方法主要的区别(或者说是使用COM导出数据比较不理想的地方)是使用COM组件必须添加该组件的DLL的引用,由于组件有版本的不同,所以随之而来的将是因版本的不同而不能使用该功能。另一点区别就是使用COM组件前提是客户端必须有安装Excel。
当然,你可以根据运用环境的不同使用不同的方法。以下贴出两种方法的代码,希望对大家有用。
(1)fileName = HttpUtility.UrlEncode(“文件名”, “文件编码”);//如果文件名为中文格式,则可用这行代码对文件名进行编码。然后得用底下带(¥¥¥)行对其进行反编码,这样输出的文件名就不会是乱码。当然使用的编码要正确。
HttpResponse response = control.Page.Response;//control为包含导出数据的容器
2 response.Clear();
3 response.ContentType = "application/vnd.ms-excel";
4 (¥¥¥)response.AddHeader("Content-Disposition", "attachment;filename="
5 + HttpUtility.UrlDecode(“文件名”, “文件编码”)); //inline
6 response.HeaderEncoding = System.Text.Encoding.GetEncoding("GB2312");//对导出数据的标题进行编码设置(在导出数据标题是乱码的情况下使用)
7 response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//对导出数据的内容进行编码设置(在导出数据的内容是乱码的情况下使用)
8 response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">");//如果要对输出的数据进行样式控制,输出里必须先输出这行代码,否则使用样式无效。
9 response.Write("\r\n");
10 response.Write("<style> .mystyle1 " + "\r\n" + "{mso-style-parent:style0;mso-number-format:\"" + @"\@" + "\"" + ";} " + "\r\n" + "</style>");//这里定义了特殊数字的样式
11 response.Write("<style> .mystyle2" + "\r\n" + "{mso-style-parent:style0;mso-number-format:\"" + "0.0" + "\"" + ";}" + "\r\n" + "</style>");//这里定义了对金钱的样式设置,
12 StringBuilder builder1 = new StringBuilder();
13 control.RenderControl(new HtmlTextWriter(new StringWriter(builder1)));
14 response.Write("<html><body>" + builder1.ToString() + "</body></html>");
15 response.End();
16
17 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
18
这就是在客户端导出数据的完整方法。
(2)假设这里的数据源为Table1
Application excelApp = new ApplicationClass();
Workbook excelBook = excelApp.Workbooks.Add(Type.Missing);
Worksheet excelSheet = (Worksheet)excelBook.Sheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
excelSheet.Name = strTitle;
excelApp.Visible = true;
int rowCount = Table1.Rows.Count;
int colCount = Table1.Columns.Count;
object[,] dataArray = new object[rowCount + 1, colCount];//二维数组定义是多一个标题行。
for (int j = 0; j < colCount; j++)
excelSheet.get_Range("A1", excelSheet.Cells[rowCount + 1, colCount]).Value2 = dataArray;
注:使用这种方法的时候需要注意两个地方。(1)必须对本地用户设置权限,可能会出现的错误是:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败。对这个错误的解决办法将贴在下一篇。(2)导出的行号设置。很多人可能会遇到的错误是:
异常类型: COMException
异常消息: 异常来自 HRESULT:0x800A03EC
这个问题主要是因为导出的行号设置不对所引起的异常。在这个方法中使用到行号的有:
《1》excelSheet.get_Range(excelSheet.Cells[1, 1 + j], excelSheet.Cells[rowCount + 1, 1 + j]).NumberFormatLocal = "@";
《2》excelSheet.get_Range("A1", excelSheet.Cells[rowCount + 1, colCount]).Value2 = dataArray;
需注意的是excelSheet.Cells[1, 1 + j],,如果有标题的情况下,必须把标题行去掉,所以开始行是1,
这样就算结尾了,第一篇文章,请大家多多指教。谢谢。
这里主要讲述两种方法,包括处理导出的乱码和格式化问题。
(1)在客户端把GridView的数据导出到Excel格式文件。
(2)使用COM组件把数据导出到Excel格式文件。
这两种方法主要的区别(或者说是使用COM导出数据比较不理想的地方)是使用COM组件必须添加该组件的DLL的引用,由于组件有版本的不同,所以随之而来的将是因版本的不同而不能使用该功能。另一点区别就是使用COM组件前提是客户端必须有安装Excel。
当然,你可以根据运用环境的不同使用不同的方法。以下贴出两种方法的代码,希望对大家有用。
(1)fileName = HttpUtility.UrlEncode(“文件名”, “文件编码”);//如果文件名为中文格式,则可用这行代码对文件名进行编码。然后得用底下带(¥¥¥)行对其进行反编码,这样输出的文件名就不会是乱码。当然使用的编码要正确。
HttpResponse response = control.Page.Response;//control为包含导出数据的容器
2 response.Clear();
3 response.ContentType = "application/vnd.ms-excel";
4 (¥¥¥)response.AddHeader("Content-Disposition", "attachment;filename="
5 + HttpUtility.UrlDecode(“文件名”, “文件编码”)); //inline
6 response.HeaderEncoding = System.Text.Encoding.GetEncoding("GB2312");//对导出数据的标题进行编码设置(在导出数据标题是乱码的情况下使用)
7 response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//对导出数据的内容进行编码设置(在导出数据的内容是乱码的情况下使用)
8 response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">");//如果要对输出的数据进行样式控制,输出里必须先输出这行代码,否则使用样式无效。
9 response.Write("\r\n");
10 response.Write("<style> .mystyle1 " + "\r\n" + "{mso-style-parent:style0;mso-number-format:\"" + @"\@" + "\"" + ";} " + "\r\n" + "</style>");//这里定义了特殊数字的样式
11 response.Write("<style> .mystyle2" + "\r\n" + "{mso-style-parent:style0;mso-number-format:\"" + "0.0" + "\"" + ";}" + "\r\n" + "</style>");//这里定义了对金钱的样式设置,
12 StringBuilder builder1 = new StringBuilder();
13 control.RenderControl(new HtmlTextWriter(new StringWriter(builder1)));
14 response.Write("<html><body>" + builder1.ToString() + "</body></html>");
15 response.End();
16
17 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
18
这就是在客户端导出数据的完整方法。
(2)假设这里的数据源为Table1
Application excelApp = new ApplicationClass();
Workbook excelBook = excelApp.Workbooks.Add(Type.Missing);
Worksheet excelSheet = (Worksheet)excelBook.Sheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
excelSheet.Name = strTitle;
excelApp.Visible = true;
int rowCount = Table1.Rows.Count;
int colCount = Table1.Columns.Count;
object[,] dataArray = new object[rowCount + 1, colCount];//二维数组定义是多一个标题行。
for (int j = 0; j < colCount; j++)
excelSheet.get_Range("A1", excelSheet.Cells[rowCount + 1, colCount]).Value2 = dataArray;
注:使用这种方法的时候需要注意两个地方。(1)必须对本地用户设置权限,可能会出现的错误是:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败。对这个错误的解决办法将贴在下一篇。(2)导出的行号设置。很多人可能会遇到的错误是:
异常类型: COMException
异常消息: 异常来自 HRESULT:0x800A03EC
这个问题主要是因为导出的行号设置不对所引起的异常。在这个方法中使用到行号的有:
《1》excelSheet.get_Range(excelSheet.Cells[1, 1 + j], excelSheet.Cells[rowCount + 1, 1 + j]).NumberFormatLocal = "@";
《2》excelSheet.get_Range("A1", excelSheet.Cells[rowCount + 1, colCount]).Value2 = dataArray;
需注意的是excelSheet.Cells[1, 1 + j],,如果有标题的情况下,必须把标题行去掉,所以开始行是1,
这样就算结尾了,第一篇文章,请大家多多指教。谢谢。
相关文章推荐
- 把数据导出到Excel的几种方法说明
- datagrid数据导出到excel文件给客户端下载的几种方法 (xls,csv,html)
- 对.NET中导出数据到EXCEL的几种方法探讨 C1TrueDBGrid
- SQL SERVER使用OpenRowset,、OpenDataSource函数导入、导出数据到Excel 的几种方法(整理)
- datagrid数据导出到excel文件给客户端下载的几种方法
- datagrid数据导出到excel文件给客户端下载的几种方法(转)
- datagrid数据导出到excel文件给客户端下载的几种方法
- 对.NET中导出数据到EXCEL的几种方法探讨[转]。http://hi.baidu.com/lanxmail/blog/item/82b3e1bf8608ca0b18d81f12.html
- C#导出数据到Excel的几种方法
- datagrid数据导出到excel文件给客户端下载的几种方法
- asp.net导出数据到Excel的几种方法(2/3)
- datagrid数据导出到excel文件给客户端下载的几种方法
- datagrid数据导出到excel文件给客户端下载的几种方法
- asp中把数据导出为excel的几种方法
- 【转】SQL Server数据表在编程中实现导出EXCEL的几种方法
- datagrid数据导出到excel文件给客户端下载的几种方法 (转)
- asp.net导出数据到Excel的几种方法(1/3)
- [转]datagrid数据导出到excel文件给客户端下载的几种方法
- datagrid数据导出到excel文件给客户端下载的几种方法
- datagrid数据导出到excel文件给客户端下载的几种方法