C#:导入Excel通用类(CSV格式)
- 一、引用插件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格式)的更多相关文章
- C#:导入Excel通用类(Xls格式)
PS:在CSV格式和XLSX格式中有写到通用调用的接口和引用的插件,所以在这个xls格式里面并没有那么详细,只是配上xls通用类. 一.引用插件NPOI.dll.NPOI.OOXML.dll.NPOI ...
- C#:导入Excel通用类(Xlsx格式)
一.引用插件EPPlus.dll 插件下载地址:https://pan.baidu.com/s/1jEl7iu1H_C7-j9Wq37xIRQ 提取密码:pdy6 二.定义通用类XlsxExce ...
- NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中
以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...
- 在java poi导入Excel通用工具类示例详解
转: 在java poi导入Excel通用工具类示例详解 更新时间:2017年09月10日 14:21:36 作者:daochuwenziyao 我要评论 这篇文章主要给大家介绍了关于在j ...
- MVC NPOI Linq导出Excel通用类
之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...
- Excel通用类工具(二)
前言 上一篇中写到了用反射来处理类中的不用的属性,但是Excel的列名还得手动输入,这样还是比较麻烦的,今天这篇就利用自定义注解来解决手动传入列名的问题:其实很简单的,只需要在上一篇的基础上加一个类就 ...
- poi导出excel通用类
一.关键的通用类public class PoiExportUtils { private static HSSFWorkbook workBook; public PoiExportUtils ...
- NPOI MVC 模型导出Excel通用类
通用类: public enum DataTypeEnum { Int = , Float = , Double = , String = , DateTime = , Date = } public ...
- java导入excel时处理日期格式(已验证ok)
在Excel中的日期格式,比如2009-12-24将其转化为数字格式时变成了40171,在用java处理的时候,读取的也将是40171.如果使用POI处理Excel中的日期类型的单元格时,如果仅仅是判 ...
随机推荐
- ECJTUACM16 Winter vacation training #5 题解&源码
A------------------------------------------------------------------------------------------- 题目链接:ht ...
- Codeforces 626B Cards(模拟+规律)
B. Cards time limit per test:2 seconds memory limit per test:256 megabytes input:standard input outp ...
- HDU2689-Sort it-冒泡排序
Sort it Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 2079 dp解法
选课时间(题目已修改,注意读题) Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- BLE空中升级 谈(一)
BLE 空中升级谈 -- CC2541 的产品开发中OAD注意事项 现在的智能设备(可穿戴,智能家居,智能玩具等)是越来越多了,大公司的产品颜值高,功能强大而完备的应该说是比比皆是,这里不谈论它是满足 ...
- 自定义alert弹框
/**************** UIAlertControllerStyleAlert *************************/ /*创建一个 可以自定义文字颜色和字体大小的IAler ...
- hbase伪分布式安装(单节点安装)
hbase伪分布式安装(单节点安装) http://hbase.apache.org/book.html#quickstart 1. 前提配置好java,环境java变量 上传jdk ...
- Python3 引入模块的方法
例子 import random 产生随机整数 import random secret = random.randint(0,10)
- @synchronized(self)
@synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改.这个是objective-c的一个锁定令牌,防止self对象在同一时间内被其 它线程访问,起到线程的保护 ...
- Codeforces 897D. Ithea Plays With Chtholly (交互)
题目链接:D. Ithea Plays With Chtholly 题意: 给你n张纸,在纸上写字(在 1 - c之间)可以写m次数 (,).(主要是交互,让你判断) 题解: 首先,看到m>=n ...