• 一、引用插件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. python与ssh交互

    由于pexpect模块在windows上不能运行,官方给出的. 所以我使用了paramiko模块进行我们的交互. 我的linux是Debian Kali Linux 64位 首先我们要进vim的/et ...

  2. BZOJ:4209: 西瓜王

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4209 (虽然仅仅是看在名字的份上,我们还是得说这题是一道) 绝世好题!西瓜王!西瓜王!西瓜 ...

  3. Unity Instantiate各函数执行顺序

    GameObject go = Instantiate(aaa) ;        go.GetComponent<NewBehaviourScript>().Init(); Instan ...

  4. BC高精确度函数使用。

    bc是Binary Calculator的缩写.bc*函数的参数都是操作数加上一个可选的 [int scale],比如string bcadd(string $left_operand, string ...

  5. dedecms织梦上传图片302Error错误

    很多客户反馈这样的问题,上传图片的时候会提示302错误,找不到原因,很着急,秀站网小编分析下如下解决办法,希望能帮助大家. 解决问题: 1:空间满了,请查看空间容量是否满了. 2:权限问题... 很多 ...

  6. Python3 的元组

    元组(tuple):戴上了枷锁的列表 元组与列表非常相似但是元组内元素的类型相同,且元组内的元素不能修改 1.创建元组的方法 与列表不同创建元组大部分情况下是用小括号,例如 tuple1=(1,2,3 ...

  7. Jupyter notebook入门

    Jupyter notebook入门 [TOC] Jupyter notebook 是一种 Web 应用,能让用户将说明文本.数学方程.代码和可视化内容全部组合到一个易于共享的文档中. Jupyter ...

  8. linux如何安装java环境

    linux安装jdk7步骤: 1.首先使用命令查看linux系统版本号: lsb_release -a 11 2.下载对应的jdk版本,笔者使用的是jdk-7u79-linux-x64.tar.gz: ...

  9. css超出内容以省略号显示

    控制只显示2行,并以省略号结束 text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-or ...

  10. [转]同一台Windows机器中启动多个Memcached服务

    Memcached的安装后,如果手头上只有一台机器,又想做多节点测试咋办? 这就需要在一台机器上启动多个Memcached服务了. 假设Memcached在如下目录:C:\memcached\memc ...