解析Excel有知名的NPOI库,(Java语言是POI),可是NPOI是不支持解析csv的。html
csv本质上也是文本文件,能够进行差别对比,更利于解决冲突。git
本文对解析csv的几个.net的开源库进行调研github
很小巧简单的库:https://github.com/stevehansen/csv/数据库
CSVHelper:https://github.com/JoshClose/CsvHelperc#
CSVHepler中文文档:http://www.javashuo.com/article/p-sgpedwqa-hc.htmlsegmentfault
本次性能测试结果来自:.NET Core中的CSV解析库数据结构
当测试100000行数据的时候工具
当测试1000000行数据的时候性能
从测试结果上看
Tiny Csv Parser的效率比CSVHelper高不少,内存占用也少不少。测试
最终结论
当不须要支持字符串换行的时候,请使用Tiny Csv Parser
当须要支持字符串换行的时候,请使用CSVHelper
第二行中有人为换行符,在Tiny Csv 和 csv中会解析不出来,而CSVHelper则能够
Make | Model | Comment |
---|---|---|
内容1 | 内容2 | 这是一个换行, 的内容 |
内容2-1 | 内容2-1 | 单行注释 |
若是要读取某行的原始数据,基本内容是在 csvReader.Context
字段
public static void ParseCsvDemo(string filePath) { CsvReader csvReader = null; using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { using (StreamReader reader = new StreamReader(fileStream, Encoding.GetEncoding("GB2312"))) { csvReader = new CsvReader(reader); //设置以后,不读取第一列,且列数也会减小 // csvReader.Configuration.HasHeaderRecord = false; int rowCount = 0; while (csvReader.Read()) { //列数 var columnCount = csvReader.Context.Record.Length; //每行的原始数据 var raw = csvReader.Context.RawRecord; rowCount = rowCount + 1; if (rowCount == 2) { var fileName = csvReader.GetField<string>(2); Console.WriteLine("输出名:{0}", fileName); } Console.WriteLine("行:{0} ,列:{1},内容:{2}", rowCount, columnCount, raw); } } } }
注:对于csvhelper提供的映射关系(把表的一行数据结构转成 class类型),我未使用到,由于咱们主要是提取表的数据。
使用C#开发的导表工具,能够导出excel和csv,支持把excel数据插入到SQL数据库,且Excel的格式能够自定义。
这个项目已开源,可参考我以前的文章:
TableML-GUI篇(C# 编译/解析 Excel/CSV工具)
问题:未能加载文件或程序集,或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配
解决方案: 使用nuget更新使用到的库或者检查库所依赖的.net framework版本和项目的基于的.net framework版本是否一致。