博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#数据库数据导入导出系列之二 数据库导出到Excel上
阅读量:6579 次
发布时间:2019-06-24

本文共 8599 字,大约阅读时间需要 28 分钟。

在日常的项目中,Excel,Word,txt等格式的数据导入到数据库中是很常见的,我在这里做一下总结

这里将分为Asp.net导入Sql Server,Oracle数据库和WinForm导入Sql Server,Oracle数据库。

1,使用DataGird生成Excel

基本思想:

            (1)将数据从数据库中查询出来,绑定到DataGrid控件中,这个DataGirdle控件知识作为数据的一个承载,不需要显示在页面中

            (2)使用StringWriter将DataGrid读出来,在使用Response的另存为功能,将html页存为Xls格式的Excel文件。

       代码:

1 //导出按钮2 protected void ibtnExport_Click(object sender, ImageClickEventArgs e)3 {4     ExportDataGrid("application/ms-excel", "test.xls"); //导到Excel5 }

具体实现

View Code
1 #region 使用DataGrid生成Excel 2         ///  3         /// 使用DataGrid生成Excel 4         ///  5         /// 文件类型 MIME类型 6         /// 文件名 7         private void ExportDataGrid(string FileType, string FileName) //从DataGrid导出 8         { 9             System.Web.UI.WebControls.DataGrid dg = new System.Web.UI.WebControls.DataGrid();10 11             //这里使用的是IBatis与数据库通信,大家可以使用ADO或者别的方式查询数据12             dg.DataSource = Helper.ContactExport().ExportDataIntoExcel();13             dg.DataBind();14 15             //定义文档类型、字符编码   16             Response.Clear();17             Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, Encoding.UTF8).ToString());18             Response.Charset = "UTF-8";19             Response.ContentEncoding = Encoding.Default;20             Response.ContentType = FileType;21             dg.EnableViewState = false;22             //定义一个输入流   23             StringWriter tw = new StringWriter();24             HtmlTextWriter hw = new HtmlTextWriter(tw);25             //目标数据绑定到输入流输出 26             dg.RenderControl(hw);27             //GvContract 绑定datagrid,或其他支持obj.RenderControl()属性的控件   28             //ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "info", tw.ToString(), false);29             Response.Write(tw.ToString());30             Response.End();31         }32         #endregion

  注意事项:

              (1)由于我的页面中有Ajax的UpdatePanel控件,所以在代码中需要加入如下代码:

1         
2
3

下面给出一个在网上下载的一个已经封装好的类

View Code
1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Web;  5 using System.Web.UI.WebControls;  6 using System.Web.UI;  7 using System.Data;  8 using System.Text;  9 using System.Globalization; 10 using System.IO; 11  12 namespace VMS.Test.Classes 13 { 14     public class ExcelHelper {  15  16         #region Fields  17   18         string _fileName;  19         DataTable _dataSource;          20         string[] _titles = null;  21         string[] _fields = null;  22         int _maxRecords = 1000;  23   24         #endregion  25   26         #region Properties  27   28         /**////   29         /// 限制输出到 Excel 的最大记录数。超出则抛出异常  30         ///   31         public int MaxRecords {  32             set { _maxRecords = value; }  33             get { return _maxRecords; }  34         }  35   36         /**////   37         /// 输出到浏览器的 Excel 文件名  38         ///   39         public string FileName {  40             set { _fileName = value; }  41             get { return _fileName; }  42         }  43   44         #endregion  45   46         #region .ctor  47   48         /**////   49         /// 构造函数  50         ///   51         /// 要输出到 Excel 的列标题的数组  52         /// 要输出到 Excel 的字段名称数组  53         /// 数据源  54         public ExcelHelper(string[] titles, string[] fields, DataTable dataSource): this(titles, dataSource)        {  55             if (fields == null || fields.Length == 0)  56                 throw new ArgumentNullException("fields");  57   58             if (titles.Length != fields.Length)  59                 throw new ArgumentException("titles.Length != fields.Length", "fields");  60               61             _fields = fields;              62         }  63   64         /**////   65         /// 构造函数  66         ///   67         /// 要输出到 Excel 的列标题的数组  68         /// 数据源  69         public ExcelHelper(string[] titles, DataTable dataSource): this(dataSource) {  70             if (titles == null || titles.Length == 0)  71                 throw new ArgumentNullException("titles");  72             //if (titles.Length != dataSource.Columns.Count)  73             //    throw new ArgumentException("titles.Length != dataSource.Columns.Count", "dataSource");  74   75             _titles = titles;              76         }  77   78         /**////   79         /// 构造函数  80         ///   81         /// 数据源  82         public ExcelHelper(DataTable dataSource) {  83             if (dataSource == null)  84                 throw new ArgumentNullException("dataSource");  85             // maybe more checks needed here (IEnumerable, IList, IListSource, ) ???  86             // 很难判断,先简单的使用 DataTable  87   88             _dataSource = dataSource;  89         }  90           91         public ExcelHelper() {}  92   93         #endregion  94           95         #region public Methods  96           97         /**////   98         /// 导出到 Excel 并提示下载  99         ///  100         /// DataGrid 101         public void Export(DataGrid dg) { 102             if (dg == null) 103                 throw new ArgumentNullException("dg"); 104             if (dg.AllowPaging || dg.PageCount > 1) 105                 throw new ArgumentException("paged DataGrid can't be exported.", "dg"); 106  107             // 添加标题样式 108             dg.HeaderStyle.Font.Bold = true; 109             dg.HeaderStyle.BackColor = System.Drawing.Color.LightGray; 110  111             RenderExcel(dg); 112         } 113  114         ///**////  115         ///// 导出到 Excel 并提示下载 116         /////  117         ///// ASPxGrid 118         //public void Export(DataGrid xgrid) {  119         //    if (xgrid == null) 120         //        throw new ArgumentNullException("xgrid"); 121         //    if (xgrid.PageCount > 1) 122         //        throw new ArgumentException("paged xgird not can't be exported.", "xgrid"); 123  124         //    // 添加标题样式 125         //    xgrid.HeaderStyle.Font.Bold = true; 126         //    xgrid.HeaderStyle.BackColor = System.Drawing.Color.LightGray; 127  128         //    RenderExcel(xgrid); 129         //} 130  131         /**////  132         /// 导出到 Excel 并提示下载 133         ///  134         public void Export() { 135             if (_dataSource == null) 136                 throw new Exception("数据源尚未初始化"); 137  138             if (_fields == null && _titles != null && _titles.Length != _dataSource.Columns.Count)  139                 throw new Exception("_titles.Length != _dataSource.Columns.Count"); 140              141             if (_dataSource.Rows.Count > _maxRecords) 142                 throw new Exception("导出数据条数超过限制。请设置 MaxRecords 属性以定义导出的最多记录数。"); 143  144             DataGrid dg = new DataGrid(); 145             dg.DataSource = _dataSource; 146  147             if (_titles == null) { 148                 dg.AutoGenerateColumns = true; 149             }  150             else { 151                 dg.AutoGenerateColumns = false; 152                 int cnt = _titles.Length; 153  154                 System.Web.UI.WebControls.BoundColumn col; 155  156                 if (_fields == null) { 157                     for (int i=0; i
"); 205 206 DataGrid dg = c as DataGrid; 207 208 if (dg != null) { 209 dg.RenderControl(writer); 210 } 211 else {212 DataGrid xgrid = c as DataGrid; 213 214 if (xgrid != null) 215 xgrid.RenderControl(writer); 216 else 217 throw new ArgumentException("only supports DataGrid or ASPxGrid.", "c"); 218 } 219 c.Dispose(); 220 221 response.Write(sw.ToString()); 222 response.End(); 223 } 224 225 226 /**////
227 /// 得到一个随意的文件名 228 /// 229 ///
230 private string GetRandomFileName() { 231 Random rnd = new Random((int) (DateTime.Now.Ticks)); 232 string s = rnd.Next(Int32.MaxValue).ToString(); 233 return DateTime.Now.ToShortDateString() + "_" + s + ".xls"; 234 } 235 236 private void DataGridItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) { 237 if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { 238 e.Item.Attributes.Add("style", "vnd.ms-excel.numberformat:@"); 239 //e.Item.Cells[3].Attributes.Add("style", "vnd.ms-excel.numberformat:¥#,###.00"); 240 } 241 } 242 #endregion 243 } 244 }

 

转载地址:http://enyno.baihongyu.com/

你可能感兴趣的文章
字符串非空判断:StringUtils中 isNotEmpty 和isNotBlank的区别
查看>>
响应式编程
查看>>
Spring Cloud--Honghu Cloud分布式微服务云系统—组件化
查看>>
java多线程 帖子一览
查看>>
solidity智能合约[6]-基本类型与bool运算
查看>>
Java虚拟机
查看>>
Istio技术与实践02:源码解析之Istio on Kubernetes 统一服务发现
查看>>
2019的第一天
查看>>
python 语言基础之切片,迭代
查看>>
触摸复习,CALayer
查看>>
WPS文件格式怎么转换成PDF格式
查看>>
一文彻底读懂Java虚拟机!(JVM)
查看>>
初学Linux第二周小记
查看>>
(详细)华为荣耀10 COL-AL10的usb调试模式在哪里开启的步骤
查看>>
学习Python,is和==的本质区别你知道吗?
查看>>
阿里巴巴数据分析沙龙 杭州站圆满召开
查看>>
云视频会议如何做到参会人脸识别?
查看>>
选择能达到要求的扫描头
查看>>
C语言模拟实现多态
查看>>
公开课(视频)|聊聊 Http 协议和我们日常工作的关系
查看>>