写66666行两个数字 用CsvHelper里的ExcelSerializer 400ms SaveAs 200ms 共600ms 直接用StreamWriter 150ms

行数可以超过65536

worksheet reader

 class Program
{
static void Main(string[] args)
{
XLWorkbook workbook = new XLWorkbook("E://233.xlsx",XLEventTracking.Disabled);
var sheet = workbook.Worksheets.First(p => p.Name == "ABC");
var csv = new CsvReader(new ExcelParser(sheet));
csv.Configuration.RegisterClassMap<MapA>();
var records=csv.GetRecords<A>();
foreach(var re in records)
{
Console.WriteLine(re.ToString());
}
foreach (var header in csv.FieldHeaders)
{
Console.WriteLine(header);
}
}
public class MapA:CsvClassMap<A>
{
public MapA()
{
Map(m=>m.a).Name("AAA");
Map(m=>m.b).Name("BBB");
}
}
public static List<A> list = new List<A> { new A(1, 2), new A(3, 4) };
public class A
{
public int a
{
get; set;
}
public int b
{
get; set;
}
public A() { }
public A(int a,int b)
{
this.a = a;
this.b = b;
}
public override string ToString()
{
return a + " " + b;
}
}
}

worksheet writer

 class Program
{
static void Main(string[] args)
{
XLWorkbook workbook = new XLWorkbook(XLEventTracking.Disabled);
var sheet = workbook.AddWorksheet("ABC");
var csv = new CsvWriter(new ExcelSerializer(sheet));
csv.Configuration.RegisterClassMap<MapA>();
csv.WriteHeader<A>();
csv.WriteRecords(list);
workbook.SaveAs("E://233.xlsx");
}
public class MapA:CsvClassMap<A>
{
public MapA()
{
Map(m=>m.a).Name("AAA");
Map(m=>m.b).Name("BBB");
}
}
public static List<A> list = new List<A> { new A(1, 2), new A(3, 4) };
public class A
{
public int a
{
get; set;
}
public int b
{
get; set;
}
public A() { }
public A(int a,int b)
{
this.a = a;
this.b = b;
}
}
}

Writer

class Program
{
static void Main(string[] args)
{
FileStream file = new FileStream("E://123.csv", FileMode.Open);
StreamWriter writer = new StreamWriter(file, Encoding.UTF8);
var csv = new CsvWriter(writer);
csv.Configuration.RegisterClassMap<MyClassMap>();
csv.WriteHeader<A>();
csv.WriteRecords(list);
writer.Flush();
writer.Close();
}
public class MyClassMap : CsvClassMap<A>
{
public MyClassMap()
{
Map(m => m.a).Name("AAA");
Map(m => m.b).Name("BBB");
Map(m => m.c);
}
}
public static List<A> list = new List<A>() { new A(1, 2, 3), new A(4, 5, 6) }; public class A
{
public A() { }
public int a
{
get; set;
}
public int b
{
get; set;
}
public int c
{
get; set;
}
public A(int a,int b,int c)
{
this.a = a;
this.b = b;
this.c = c;
}
public override string ToString()
{
return a + " " + b + " " + c;
}
}
}

Reader

    class Program
{
static void Main(string[] args)
{
FileStream file = new FileStream("E://123.csv", FileMode.Open);
StreamReader reader = new StreamReader(file, Encoding.UTF8);
var csv = new CsvReader(reader);
csv.Configuration.RegisterClassMap<MyClassMap>();
var records=csv.GetRecords<A>();
foreach(var re in records)
{
//GetRecords在foreach里会自动调用Read(),GetRecord要手动调用Read()
Console.WriteLine(re.ToString());
Console.WriteLine(csv.GetField("BBB"));
Console.WriteLine(csv.GetField(1));
}
var headers = csv.FieldHeaders;//调用过Read()才能获取header
reader.Close();
file.Close();
}
public class MyClassMap : CsvClassMap<A>
{
public MyClassMap()
{
Map(m => m.a).Name("AAA");
Map(m => m.b).Name("BBB");
Map(m => m.c);
}
}
public static List<A> list = new List<A>() { new A(1, 2, 3), new A(4, 5, 6) }; public class A
{
public A() { }
public int a
{
get; set;
}
public int b
{
get; set;
}
public int c
{
get; set;
}
public A(int a,int b,int c)
{
this.a = a;
this.b = b;
this.c = c;
}
public override string ToString()
{
return a + " " + b + " " + c;
}
}
}

CsvHelper的更多相关文章

  1. CsvHelper支持List<T>

      /// <summary> /// Csv帮助类 /// </summary> public class CsvHelper { /// <summary> / ...

  2. C# 使用CsvHelper读取.csv文件

    1,先到包管理器下载 安装CsvHelper. 2,创建一个与csv文件字段名称相同的类 public class SurveyInfoModel { public string DIST_CD { ...

  3. Nuget CsvHelper 的使用

    CsvHelper:nuget地址 csv导出类||生成类 public class CSVHeader { public string head1 { get; set; } public stri ...

  4. CsvHelper文档-6类型转换

    CsvHelper文档-6类型转换 CsvHelper使用类型转换器来转换string到对象,或者对象到string: ITypeConverter 类型转换器的结构,必须实现: public int ...

  5. CsvHelper文档-5配置

    CsvHelper文档-5配置 CsvHelper库被设计成快速且简单易用,但是有时候默认的是设置不符合要求,需要你自己改变一些东西.所以csvHelper内置了很多自定义设置选项来改变读写行为.特别 ...

  6. CsvHelper文档-4映射

    CsvHelper文档-4映射 类映射 有时候你的类成员和csv的header不一定对应,有时候你的csv文件根本就没有header行,你需要特别制定一个成员的index,你不能依靠.net中默认的顺 ...

  7. CsvHelper文档-3写

    CsvHelper文档-3写 不用做任何设置,默认的情况下,csvhelper就可以很好的工作了.如果你的类的属性名称和csv的header名称匹配,那么可以按照下面的例子写入: var record ...

  8. 封装一个CSVHelper

    public class CSVHelper { /// <summary> /// CSV转换成DataTable(OleDb数据库访问方式) /// </summary> ...

  9. CsvHelper文档-2读

    CsvHelper文档-2读 这个库默认不需要做任何设置就可以很容易的使用它.如果你的类属性名称直接匹配csv的标题名称,那么可以按照下面的实例来用: (以下所有的代码都需要引用using csvhe ...

随机推荐

  1. HDU 4003 Find Metal Mineral(分组背包+树形DP)

    题目链接 很棒的一个树形DP.学的太渣了. #include <cstdio> #include <string> #include <cstring> #incl ...

  2. 《1Q84》--[日]村上春树

    <1Q84>,作者是:村上春树(村长) 故事梗概: 1984年,青豆与天吾皆为30岁,青豆为健身教练但另一面则是暗杀者,将受到极度暴力 的妇女们的丈夫们送至死亡的世界.天吾的职业为升大学的 ...

  3. 让你的APP支持iPhone5

    让你的APP支持iPhone5 前言 国庆节前,为了支持 iPhone5 的屏幕分辨率 (640 象素 x 1136 象素),我尝试着升级粉笔网 iPhone 客户端.整个过程花了大概一天的时间,我把 ...

  4. vsphere平台windows虚拟机克隆的小插曲

    问题: 1.克隆完windows虚拟化后输入法乱码. 2.开启远程的情况下远程登录输入正确的密码也无法登录. 解决: 1.更改管理员用户密码(不输入原win7密码更改win7密码). 2.重新启用管理 ...

  5. ubuntu 上安装 NASM 汇编开发工具

    一般系统自带NASM可通过 输入 nasm -version 检查,若是没有 可用下述指令安装: sudo apt-get install nasm 安装过程执行完毕后 再次输入 : nasm -ve ...

  6. WordPattern

    Given a pattern and a string str, find if str follows the same pattern. Examples: pattern = "ab ...

  7. javascript平时小例子③(setInterval使用1)

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  8. matlab函数bwareaopen的详解

    matlab函数_连通区域 1. matlab函数bwareaopen──删除小面积对象格式:BW2 = bwareaopen(BW,P,conn)作用:删除二值图像BW中面积小于P的对象,默认情况下 ...

  9. Network | UDP checksum

    1. 校验和 ICMP,IP,UDP,TCP报头部分都有checksum(检验和)字段.IP 首部里的校验和只校验首部:ICMP.IGMP.TCP和UDP首部中的校验和校验首部和数据. UDP和TCP ...

  10. JavaScript 回调函数中的 return false 问题

    今天一个同事问了我一个问题,就是在 Ajax 方法中,请求成功后(success)的回调函数中根据响应的值来判断程序是否继续执行,他不解的是在回调函数中已经 return false 了,但是 Aja ...