CsvHelper
写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的更多相关文章
- CsvHelper支持List<T>
/// <summary> /// Csv帮助类 /// </summary> public class CsvHelper { /// <summary> / ...
- C# 使用CsvHelper读取.csv文件
1,先到包管理器下载 安装CsvHelper. 2,创建一个与csv文件字段名称相同的类 public class SurveyInfoModel { public string DIST_CD { ...
- Nuget CsvHelper 的使用
CsvHelper:nuget地址 csv导出类||生成类 public class CSVHeader { public string head1 { get; set; } public stri ...
- CsvHelper文档-6类型转换
CsvHelper文档-6类型转换 CsvHelper使用类型转换器来转换string到对象,或者对象到string: ITypeConverter 类型转换器的结构,必须实现: public int ...
- CsvHelper文档-5配置
CsvHelper文档-5配置 CsvHelper库被设计成快速且简单易用,但是有时候默认的是设置不符合要求,需要你自己改变一些东西.所以csvHelper内置了很多自定义设置选项来改变读写行为.特别 ...
- CsvHelper文档-4映射
CsvHelper文档-4映射 类映射 有时候你的类成员和csv的header不一定对应,有时候你的csv文件根本就没有header行,你需要特别制定一个成员的index,你不能依靠.net中默认的顺 ...
- CsvHelper文档-3写
CsvHelper文档-3写 不用做任何设置,默认的情况下,csvhelper就可以很好的工作了.如果你的类的属性名称和csv的header名称匹配,那么可以按照下面的例子写入: var record ...
- 封装一个CSVHelper
public class CSVHelper { /// <summary> /// CSV转换成DataTable(OleDb数据库访问方式) /// </summary> ...
- CsvHelper文档-2读
CsvHelper文档-2读 这个库默认不需要做任何设置就可以很容易的使用它.如果你的类属性名称直接匹配csv的标题名称,那么可以按照下面的实例来用: (以下所有的代码都需要引用using csvhe ...
随机推荐
- Linux的磁盘分区(1)
分区命名: 1.Linux下的分区命名不同于windows下的命名,对硬盘如IDE硬盘采用类似/dev/hdxy的方式来命名,其中hd表示分区所在的设备类型,如IDE硬盘,x表示硬盘盘号(a为基本主盘 ...
- XML CDATA节点
术语CDATA指字符数据.CDATA定义为文本块,但识别为标记. 预定义实体的同位素;,密度,并且与放大器;需要打字并且通常难以阅读的标记.在这种情况下,CDATA部分都可以使用.通过使用CDATA节 ...
- Nodejs正则表达式函数之match、test、exec、search、split、replace使用详解
1. Match函数 使用指定的正则表达式函数对字符串惊醒查找,并以数组形式返回符合要求的字符串 原型:stringObj.match(regExp) 参数: stringObj 必选项,需要去进行匹 ...
- Maven进价:Maven的生命周期阶段
一.Maven的生命周期 Maven的生命周期就是对所有的构建过程进行抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有的构建步骤. Maven的生命周期 ...
- [LintCode] Reverse Pairs 翻转对
For an array A, if i < j, and A [i] > A [j], called (A [i], A [j]) is a reverse pair.return to ...
- hadoop配置远程客户端
独立出一台机器,作为客户端,可以连接远程集群,配置注意事项: 1.首先是hive,需要服务器启动一个服务 hive --service metastore 然后修改hive客户端 hive-site. ...
- 第二章 Odoo的安装与部署
Odoo的官方推荐是Ubuntu Server,所以,我们这里也以Ubuntu Server为例.当然,其他系统也是可以的,只不过安装起来相比Ubuntu 会显得稍微折腾,限于篇幅,本书不对其他系统的 ...
- Thinkphp框架感悟(二)
这次主要分析一下I方法 /** * 获取输入参数 支持过滤和默认值 * 使用方法: * <code> * I('id',0); 获取id参数 自动判断get或者post * I('post ...
- sql实现对多个条件分组排序方法和区别
转自: http://blog.csdn.net/winer2008/article/details/4283539 rank,dense_rank,row_number区别 一:语法(用法): ...
- SVN 的安装与配置
1.下载subclipse1.6的site包 2.把这个site-1.6.2解压开,将其内部的文件,全部放到 C:\Program Files\MyEclipse\MyEclipse 9\dropin ...