• 一、引用插件LumenWorks.Framework.IO.dll(CsvReader)

     插件下载地址:https://pan.baidu.com/s/1X9Sl4bWTNHJOJb_v-KUndA  提取密码 0az3

  • 二、定义通用接口IExcelData.cs和IDataTransform.cs

  IDataTransform.cs

public interface IDataTransform { List<Dictionary<string, string>> DataTableToDictionary(DataTable dt); }

  IExcelData.cs    

public interface IExcelData : IDataTransform
{
/// <summary>
/// Excel工作薄所有表格转化成DataTable对应字典
/// </summary>
Dictionary<string, DataTable> DataTableDictionary { get; } /// <summary>
/// Excel工作薄所有表格的名称集合
/// </summary>
List<string> SheetNames { get; } /// <summary>
/// Excel工作薄所有表格数据集合
/// </summary>
List<DataTable> DataTableList { get; } /// <summary>
/// 表格数量
/// </summary>
int SheetCount { get; } /// <summary>
/// Excel文件路径
/// </summary>
string FilePath { get; } /// <summary>
/// Excel流
/// </summary>
Stream ExcelStream { get; } /// <summary>
/// Excel文件类型
/// </summary>
ExcelType ExcelType { get; } /// <summary>
/// 获取Excel第一列数据集合
/// </summary>
List<Dictionary<string, string>> GetFirstRecords(); /// <summary>
/// 执行方法
/// </summary>
void Load();
}
  • 三、定义通用类CsvData.cs

     CsvData.cs

public class CsvData : IExcelData
{
#region 属性值
public Dictionary<string, DataTable> DataTableDictionary
{
get { throw new NotImplementedException(); }
}
public List<string> SheetNames
{
get { throw new NotImplementedException(); }
}
public List<DataTable> DataTableList
{
get { throw new NotImplementedException(); }
}
public int SheetCount
{
get { throw new NotImplementedException(); }
}
private string m_filePath;
public string FilePath
{
get { return m_filePath; }
}
private Stream m_stream;
public Stream ExcelStream
{
get { return m_stream; }
}
public ExcelType ExcelType
{
get { throw new NotImplementedException(); }
}
private List<Dictionary<string, string>> m_Records;
public List<Dictionary<string, string>> Records { get { return m_Records; } }
#endregion
#region 构造
public CsvData(string path)
{
m_filePath = path;
}
public CsvData(Stream stream)
{
m_stream = stream;
}
#endregion
#region 方法
public List<Dictionary<string, string>> DataTableToDictionary(DataTable dt)
{
throw new NotImplementedException();
} public List<Dictionary<string, string>> GetFirstRecords()
{
return m_Records;
} /// <summary>
/// 执行方法
/// </summary>
public void Load()
{
if (!string.IsNullOrEmpty(m_filePath))
Load(m_filePath);
else
Load(m_stream);
} /// <summary>
/// 执行方法
/// </summary>
/// <param name="m_filePath">文件路径</param>
private void Load(string m_filePath)
{
using (FileStream fs=File.Open(m_filePath,FileMode.Open,FileAccess.Read))
{
using (StreamReader sr=new StreamReader(fs))
{
using (CsvReader csvReader=new CsvReader(sr,false))
{
m_Records = new List<Dictionary<string, string>>();
int count = csvReader.FieldCount;
string[] keys = new string[count];
string[] array = new string[count];
IEnumerator rows = csvReader.GetEnumerator();
try
{
while (rows.MoveNext())
{
if (csvReader.CurrentRecordIndex==)
{
keys = (string[])rows.Current;
for (int i = ; i < keys.Length; i++)
{
string s = keys[i].Replace('"', ' ').Trim();
keys[i] = s;
}
}
else
{
array = (string[])rows.Current;
Dictionary<string, string> dic = new Dictionary<string, string>();
for (int i = ; i < keys.Length; i++)
{
dic.Add(keys[i], array[i]);
}
m_Records.Add(dic);
}
}
}
catch
{
throw;
}
}
}
}
} /// <summary>
/// 执行方法
/// </summary>
/// <param name="m_stream">文件流</param>
private void Load(Stream m_stream)
{
using (StreamReader sr=new StreamReader(m_stream))
{
while (true)
{
var line = sr.ReadLine();
if (line=="")
{
break;
}
}
for (int i = ; i < ; i++)
{
sr.Read();
}
using (CsvReader csvReader=new CsvReader(sr,false))
{
m_Records = new List<Dictionary<string, string>>();
int count = csvReader.FieldCount;
string[] keys = new string[count];
string[] array = new string[count];
IEnumerator rows = csvReader.GetEnumerator();
try
{
while (rows.MoveNext())
{
if (csvReader.CurrentRecordIndex==)
{
keys = (string[])rows.Current;
for (int i = ; i < keys.Length; i++)
{
string s = keys[i].Replace('"', ' ').Trim();
keys[i] = s;
}
}
else
{
array = (string[])rows.Current;
Dictionary<string, string> dic = new Dictionary<string, string>();
for (int i = ; i < keys.Length; i++)
{
dic.Add(keys[i], array[i]);
}
m_Records.Add(dic);
}
}
}
catch
{ throw;
}
}
}
}
#endregion
}

注:以上的通用类将CSV格式的Excel转换成DataTable,识别Excel中的首列为数据库表的列项,会提取这一列如果判断匹配,这个就是业务代码了,以上未提供,根据需求自己编写就好。

原著:清风一人醉http://www.cnblogs.com/W--Jing/

以上方法可以个人分享研究!

不可做商业项目,违者必究!

C#:导入Excel通用类(CSV格式)的更多相关文章

  1. C#:导入Excel通用类(Xls格式)

    PS:在CSV格式和XLSX格式中有写到通用调用的接口和引用的插件,所以在这个xls格式里面并没有那么详细,只是配上xls通用类. 一.引用插件NPOI.dll.NPOI.OOXML.dll.NPOI ...

  2. C#:导入Excel通用类(Xlsx格式)

    一.引用插件EPPlus.dll   插件下载地址:https://pan.baidu.com/s/1jEl7iu1H_C7-j9Wq37xIRQ  提取密码:pdy6 二.定义通用类XlsxExce ...

  3. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  4. 在java poi导入Excel通用工具类示例详解

    转: 在java poi导入Excel通用工具类示例详解 更新时间:2017年09月10日 14:21:36   作者:daochuwenziyao   我要评论   这篇文章主要给大家介绍了关于在j ...

  5. MVC NPOI Linq导出Excel通用类

    之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...

  6. Excel通用类工具(二)

    前言 上一篇中写到了用反射来处理类中的不用的属性,但是Excel的列名还得手动输入,这样还是比较麻烦的,今天这篇就利用自定义注解来解决手动传入列名的问题:其实很简单的,只需要在上一篇的基础上加一个类就 ...

  7. poi导出excel通用类

    一.关键的通用类public class PoiExportUtils {    private static HSSFWorkbook workBook; public PoiExportUtils ...

  8. NPOI MVC 模型导出Excel通用类

    通用类: public enum DataTypeEnum { Int = , Float = , Double = , String = , DateTime = , Date = } public ...

  9. java导入excel时处理日期格式(已验证ok)

    在Excel中的日期格式,比如2009-12-24将其转化为数字格式时变成了40171,在用java处理的时候,读取的也将是40171.如果使用POI处理Excel中的日期类型的单元格时,如果仅仅是判 ...

随机推荐

  1. 【批处理学习笔记】第二十九课:ASCII码

    前面的例子中,我们已经使用过一次ASCII码了,也就是那个笑脸.ASCII码是图形化的符号,可以用来点缀我们的批处理的.    在cmd窗口中我们可以通过任意一个字符的ASCII码来输入该字符,比如C ...

  2. [bzoj1731] [Usaco2005 dec]Layout 排队布局

    差分约束系统...因为题目要求的是1和n的最大距离所以这题就跑最长路.. 对于互相反感的牛(i与j互相反感,彼此距离至少为len,i<j),就有dis[j]-dis[i]>=len.就加一 ...

  3. Shortest path of the king

    必须要抄袭一下这个代码 The king is left alone on the chessboard. In spite of this loneliness, he doesn't lose h ...

  4. UEP-弹窗给选中数据赋值

    弹窗给选中数据赋值:t/** * 设置分派员 */ function onDispatchMan(){ var rec=ajaxgrid.getCheckedRecords(); if(rec.len ...

  5. 如何开发由Create-React-App 引导的应用(一)

    此文章是翻译How to develop apps bootstrapped with Create React App 官方文档 系列文章 如何开发由Create-React-App 引导的应用 如 ...

  6. css3滤镜Filter使用

    Filter主要用于图片,SVG等元素上,其默认值是none,有以下10个filter-function值可选: grayscale(灰度)效果类似于PS中的去色或者黑白 blur(模糊)效果类似于P ...

  7. Maven中央仓库源地址改为阿里云(IDEA)

    我的Maven是IDEA2017.1.2集成的,所以settings.xml在此位置 E:\Program Files\JetBrains\IntelliJ IDEA 2017.1.2\plugins ...

  8. Redis能干啥?细看11种Web应用场景

    下面列出11种Web应用场景,在这些场景下可以充分的利用Redis的特性,大大提高效率. 1.在主页中显示最新的项目列表. Redis使用的是常驻内存的缓存,速度非常快.LPUSH用来插入一个内容ID ...

  9. destoon框架二次开发【整理】

    =========================================================== destoon使用中的一些心得   ====================== ...

  10. Linux入门——用户组管理

    Linux用户组的管理 简介 用户组用来控制操作权限,防止无关人员莫名 rm -rf 重要文件,导致文件无法恢复或者花费很大代价恢复,这不是一个系统管理员 想看到的结果,所以一般系统管理员都会给开发人 ...