C#高效导出Excel(IList转DataTable,DataSet)
微软的Excel操作类导出Excel会很慢,此方法简单的把表中内容以字符串的形式写入到Excel中,用到的一个技巧就是"\t".
C#中的\t相当于Tab键,写入到Excel中时就是一列一列中写入。
#region 导出Excel
        public void WriteExcel(DataTable ds, string path)
        {
            long totalCount = ds.Rows.Count;
            Thread.Sleep(1000);
            long rowRead = 0;
            float percent = 0;
StreamWriter sw = new StreamWriter(path, false, Encoding.GetEncoding("gb2312"));
            StringBuilder sb = new StringBuilder();
            for (int k = 0; k < ds.Columns.Count; k++)
            {
                sb.Append(ds.Columns[k].ColumnName.ToString() + "\t");
            }
            sb.Append(Environment.NewLine);
            for (int i = 0; i < ds.Rows.Count; i++)
            {
                for (int j = 0; j < ds.Columns.Count; j++)
                {
                    sb.Append(ds.Rows[i][j].ToString() + "\t");
                }
                sb.Append(Environment.NewLine);
            }
            sw.Write(sb.ToString());
            sw.Flush();
            sw.Close();
        }
        public DataTable IListOut(IList<Users> list)
        {
            DataTable dt = new DataTable();
//此处遍历IList的结构并建立同样的DataTable
            System.Reflection.PropertyInfo[] p = list[0].GetType().GetProperties();
            foreach (System.Reflection.PropertyInfo pi in p)
            {
                dt.Columns.Add(pi.Name, System.Type.GetType(pi.PropertyType.ToString()));
            }
for (int i = 0; i < list.Count; i++)
            {
                ArrayList TempList = new ArrayList();
                //将IList中的一条记录写入ArrayList
                foreach (System.Reflection.PropertyInfo pi in p)
                {
                    object obj = pi.GetValue(list[i], null);
                    TempList.Add(obj);
                }
object[] itm = new object[p.Length];
                //遍历ArrayList向object[]里放数据
                for (int j = 0; j < TempList.Count; j++)
                {
                    itm.SetValue(TempList[j], j);
                }
                //将object[]的内容放入DataTable
                dt.LoadDataRow(itm, true);
            }
            //返回DataTable
            return dt;
        }
#endregion
public ActionResult Index()
        {
            string connString = "Data Source=.;database=Test;uid=sa;pwd=123456";
            SqlConnection con = new SqlConnection(connString);
            con.Open();
            string cmdText = "select * from User$";
            SqlCommand cmd = new SqlCommand(cmdText,con);
            SqlDataAdapter da = new SqlDataAdapter(cmdText,con);
            DataSet ds=new DataSet ();
            da.Fill(ds);
//正则表达式
string phone = @"^13[0-9]{9}|020[0-9]{8}|[0-9]{8}$";
            //string mail=@"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
            //string email = @"(\w*)@(\w*).com";
            string mail = @"\s*([\w-]+(\.\w+)*@([\w-]+\.)+\w{2,3})\s*";
Regex rx = new Regex(phone);
            Regex rx2 = new Regex(mail);
List<Users> user = new List<Users>();
            List<Users> user2 = new List<Users>();
            IList<Users> list=ds.ToList<Users>();
bool b=false;
             bool b1 = false;
             foreach (var item in list)
             {
                // if (!string.IsNullOrEmpty(item.CellPhone))
                // {
                //     b = Regex.IsMatch(item.CellPhone, phone);
                // }
////b1 = Regex.IsMatch(item.NickName,pattern);
                // if (b == true)
                // {
                //     user.Add(item);
                // }
if (!string.IsNullOrEmpty(item.CellPhone))
                 {
                     if (rx2.IsMatch(item.Mail) && rx.IsMatch(item.CellPhone))
                     {
                         // 有电话号码的
                         user.Add(item);
                     }
                     else
                     {
                         //没有电话号码的
                         user2.Add(item);
                     }
}
                 else
                 {
                     user2.Add(item);
                 }
}
            ViewBag.Users = user;
ViewBag.Users2 = user2;
DataTable dt = IListOut(user);
            WriteExcel(dt, "d:\\a.xls");
            DataTable dt1 = IListOut(user2);
            WriteExcel(dt1, "d:\\b.xls");
            con.Close();
            return View();
        }
C#高效导出Excel(IList转DataTable,DataSet)的更多相关文章
- NPOI导出Excel帮助类
		
工具类 using System; using System.Collections.Generic; using System.Data; using System.IO; using System ...
 - Java 导出EXCEL
		
1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...
 - POI导出EXCEL经典实现
		
1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...
 - Java POI 导出EXCEL经典实现 Java导出Excel
		
转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...
 - java中使用poi导出excel表格数据并且可以手动修改导出路径
		
在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下
 - 重构:以Java POI 导出EXCEL为例
		
重构 开头先抛出几个问题吧,这几个问题也是<重构:改善既有代码的设计>这本书第2章的问题. 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的 ...
 - 重构:以Java POI 导出EXCEL为例2
		
前言 上一篇博文已经将一些对象抽象成成员变量以及将一些代码块提炼成函数.这一节将会继续重构原有的代码,将一些函数抽象成类,增加成员变量,将传入的参数合成类等等. 上一篇博文地址:http://www. ...
 - POI导出EXCEL经典实现(转)
		
http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html 1.Apache POI简介 Apache POI是Apache软件基 ...
 - 使用POI导出excel基础篇
		
最近搞了下POI导出Excel,听说很多次,却是第一次搞. 在pom.xml中引入依赖 <dependency> <groupId>org.apache.poi</gro ...
 
随机推荐
- Hadoop-Yarn-框架原理及运作机制(原理篇)
			
文件为转载:http://blog.csdn.net/liuwenbo0920/article/details/43304243 一.YARN基本架构 YARN是Hadoop 2.0中的资源管理系统, ...
 - UIImage 图片处理:截图,缩放,设定大小,存储
			
图片的处理大概就分 截图(capture), 缩放(scale),设定大小(resize), 存储(save)这几样比较好处理, 另外还有滤镜,擦试等, 以后再说在这个Demo code裡, 我写了几 ...
 - C#的输入输出及基本类型
			
//输出 Console.WriteLine("摩西摩西"); Console.Write("hollo");不带回车的 注意: 1.注意大小写敏感.(快捷键操 ...
 - 生成64位代码的mdb数据库连接串Provider的设置
			
生成32位程序的mdb连接串的 Provider为:Provider=Microsoft.Jet.OLEDB.4.0 而生成64位代码时,则需要使用如下的 Provider Provider=Micr ...
 - RandomAccessFile浅析
			
RandomAccessFile类中的write方法有以下的注意事项: 首先write方法每次都写入一个字节 api中write方法如下 public void write(int b) throws ...
 - cocos2dx中包含svn
			
因为不想从svn上载下整个工程,就只把Classes和Resources载下来了,在打安卓包时出现WindowsError: [Error 5] : 'D:\\CocosProject\\(Proje ...
 - Spark 算子
			
0.parallelize 1.map 2.mapValues 3.flatMap 4.mapPartitions 5.mapPartitionsWithIndex 6.filter 7.reduce ...
 - Android 树形菜单
			
首先来一张萌萌哒的效果图(比较懒 - -) 然后是代码: // Node package com.example.treeview.utils; import java.util.ArrayList; ...
 - 非数值(Not a Number)NaN的解释
			
它是一个特殊的数值.它用于表示一个本来要返回数值的操作数未返回数值的情况. 在ECMAScript中,任何数值除以0会返回NaN,而不会导致错误,不会停止代码的执行,因此不会影响其他代码的执行. Na ...
 - iframe自适应高度的问题
			
最近工作中遇到了iframe自适应高度的问题. 如果在iframe中写定高度height的属性,并且iframe中内容高度小于给定的height时,会在手机浏览器中莫名的产生下拉框,造成体验度下降. ...