写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. JS引用另外JS文件的顺序问题。

    1.在a.js中可以引用b.js文件,这样就可以在网页中只引用a.js文件,从而可以使用a.js和b.js文件中的所有方法. 引用格式如下:document.write('<script typ ...

  2. SQL常用语句总结

    -------查询一个表有多少列select count(*) from sysobjects a join syscolumns bon a.id=b.idwhere a.name='XXX' -- ...

  3. JQuery+Ajax制作省市联动

    $(document).ready(function () { $("#Province").append("<option value=''>" ...

  4. jquery插件之拖拽

    该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的拖拽效果,您可以根据自己的实际需求来设置被拖拽元素是否可 ...

  5. mysql配置之skip-external-locking

    转载:http://www.kuqin.com/database/20120815/328905.html MySQL的配置文件my.cnf中默认存在一行skip-external-locking的参 ...

  6. 《深入.NET平台和C# 编程》内测纠错记录

    1.  .NET框架的核心组件包括(BD)(选择两项) A.CTS   (通用类型系统) B.CLR   (公共语言运行时,.NET的基础) C.CLS   (公共语言规范) D.FCL   (框架类 ...

  7. java代码实现打包多个文件下载功能

    //传入对应的需要打包的file 集合对象 //文件打包下载     public static HttpServletResponse downLoadFiles(List<File> ...

  8. 关于JQuery设置checkbox checked 的问题

    近日做一个关于JQuery表单验证,有一个比较奇葩的要求,即checkbox是为必填项,textbox不是必填的. 而checkbox与textbox又是相关的,填写了textbox,则其上方的che ...

  9. SQL server 语言基础

    数据库: 1. 结构化查询语言(Structured Query Language)简称SQL: 数据库管理系统(Database Management System)简称DBMS: 数据库管理员(D ...

  10. C#,.Net自动生成大写字母编码

    public static string GetChineseSpell(string strText)        {            int len = strText.Length;   ...