微软的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)的更多相关文章

  1. NPOI导出Excel帮助类

    工具类 using System; using System.Collections.Generic; using System.Data; using System.IO; using System ...

  2. Java 导出EXCEL

    1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...

  3. POI导出EXCEL经典实现

    1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...

  4. Java POI 导出EXCEL经典实现 Java导出Excel

    转自http://blog.csdn.net/evangel_z/article/details/7332535 在web开发中,有一个经典的功能,就是数据的导入导出.特别是数据的导出,在生产管理或者 ...

  5. java中使用poi导出excel表格数据并且可以手动修改导出路径

    在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下

  6. 重构:以Java POI 导出EXCEL为例

    重构 开头先抛出几个问题吧,这几个问题也是<重构:改善既有代码的设计>这本书第2章的问题. 什么是重构? 为什么要重构? 什么时候要重构? 接下来就从这几个问题出发,通过这几个问题来系统的 ...

  7. 重构:以Java POI 导出EXCEL为例2

    前言 上一篇博文已经将一些对象抽象成成员变量以及将一些代码块提炼成函数.这一节将会继续重构原有的代码,将一些函数抽象成类,增加成员变量,将传入的参数合成类等等. 上一篇博文地址:http://www. ...

  8. POI导出EXCEL经典实现(转)

    http://www.cnblogs.com/xwdreamer/archive/2011/07/20/2296975.html 1.Apache POI简介 Apache POI是Apache软件基 ...

  9. 使用POI导出excel基础篇

    最近搞了下POI导出Excel,听说很多次,却是第一次搞. 在pom.xml中引入依赖 <dependency> <groupId>org.apache.poi</gro ...

随机推荐

  1. 【JSP引入报错】--package javax.servlet.jsp does not exist

    在eclipse maven中没报错的JSP在引入到netbeans的时候,JSP就报错了. 错误提示:package javax.servlet.jsp does not exist 百度找了下,有 ...

  2. iOS 开发的几种手势

    今天为大家介绍一下IOS 的七种手势,手势在开发中经常用到,所以就简单 通俗易懂的说下, 话不多说,直接看代码: // 初始化一个UIimageView UIImageView *imageView ...

  3. 使用 MyEclipse远程调试 Java 应用程序

    远程调试,需要本程序和服务器上的程序源码是相同的,这我们服务器使用的是tomcat7.在本地通过MyEclipse 10来调试服务器上的代码,需要本地能访问到服务器,我的服务器是在linux下. 1. ...

  4. WPF子界面向父界面传递带参数的委托

    需求如下: 父界面上有几个按钮,需要在点击按钮的时候向父界面传值,以知道该控制哪个界面显示. 父界面:WIN1 子界面:WIN2 此处或者说是子控件向父控件传值 1.子界面定义委托 WIN2里写: p ...

  5. api(一) 创建窗口 (转)

    所有的Windows SDK编程都有一个类似的框架,本文就说说这个框架,Windows程序设计的框架分为“三部曲”: 一.注册窗口类 注册窗口类的API函数是RegisterClass或者Regist ...

  6. return break continue 的区别

    1)break     直接跳出当前的循环,从当前循环外面开始执行,忽略循环体中任何其他语句和循环条件测试.他只能跳出一层循环,如果你的循环是嵌套循环,那么你需要按照你嵌套的层次,逐步使用break来 ...

  7. 开发环境配置--Ubuntu+Qt4+OpenCV(一)

    同系列的文章 1. 开发环境配置--Ubuntu+Qt4+OpenCV(一) 2. 开发环境配置--Ubuntu+Qt4+OpenCV(二) 3. 开发环境配置--Ubuntu+Qt4+OpenCV( ...

  8. leetcode Search for a Range python

    class Solution(object): def searchRange(self, nums, target): """ :type nums: List[int ...

  9. C#正则提取HTML中img的url值

    /// <summary> /// 取得HTML中所有图片的 URL. /// </summary> /// <param name="sHtmlText&qu ...

  10. textarea 输入框限制字数

    在textarea标签中,只需要设置maxlength=”***”即可,但是在textarea标签中,IE9及IE9以下浏览器是不支持的,IE10.IE11则支持,估计后续的版本应该都会支持. 现在来 ...