C#:导入Excel通用类(CSV格式)
生活随笔
收集整理的這篇文章主要介紹了
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);elseLoad(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==0){keys = (string[])rows.Current;for (int i = 0; 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 = 0; 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 = 0; i < 2; 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==0){keys = (string[])rows.Current;for (int i = 0; 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 = 0; 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/
以上方法可以個人分享研究!
不可做商業項目,違者必究!
轉載于:https://www.cnblogs.com/W--Jing/p/8434938.html
總結
以上是生活随笔為你收集整理的C#:导入Excel通用类(CSV格式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux系统swappiness参数在
- 下一篇: 九阴真经 第二层 第9天