从excel文件中获取数据 转化成list集合 并去重

static void Main(string[] args)
        {
            string filepath = @"E:\新房媒体-C端收款.xlsx";

//IReadEntDataFromExcel iReadEntDataFromExcel = new  ReadEntDataFromExcelInfo();
            //List<String> result=iReadEntDataFromExcel.ReadEntDataFromExcel(filepath);

DataTable data=GetDataFromExcel(filepath);

List<TradeFlow> list = new List<TradeFlow>();
            list = ConvertToModel(data);
            Dictionary<string, List<TradeFlow>> dictTradeFlow = new Dictionary<string, List<TradeFlow>>();
            List<TradeFlow> listTemp = new List<TradeFlow>();

//TODO  1、先把SequenceID不为空的记录加载到dict里,同时记录SequenceID为空的到listTemp
            foreach (var item in list)
            {
                if (item.SequenceID != "")
                {
                    if (!dictTradeFlow.ContainsKey(item.TradeNo))
                    {
                        List<TradeFlow> li = new List<TradeFlow>();
                        li.Add(item);
                        dictTradeFlow.Add(item.TradeNo, li);
                    }
                    else
                    {
                        dictTradeFlow[item.TradeNo].Add(item);
                    }
                }
                else
                    listTemp.Add(item);

}

//TODO  2、遍历listTemp,与dict里面的tradeno相同的进行比较,加上其他比对条件,重复则不添

foreach (var item in listTemp)
            {
                if (dictTradeFlow.ContainsKey(item.TradeNo))
                {
                    List<TradeFlow> li = dictTradeFlow[item.TradeNo];

bool bFlag = false;
                    foreach (var flow in li)
                    {
                        if (item.PayType == flow.PayType && item.Amount == flow.Amount)
                        {
                            bFlag = true;
                            break;
                        }
                    }
                    if (!bFlag)
                    {
                        dictTradeFlow[item.TradeNo].Add(item);
                    }
                }
                else
                {
                    dictTradeFlow.Add(item.TradeNo, new List<TradeFlow>() { item });
                }
            }
            list = new List<TradeFlow>();
            foreach (var item in dictTradeFlow)
            {
                list.AddRange(item.Value);
            }
            SortedDictionary<DateTime, List<TradeFlow>> sorteDictTradeFlow = new SortedDictionary<DateTime, List<TradeFlow>>();
            foreach (var item in list)
            {
                if (!sorteDictTradeFlow.ContainsKey(item.CreateTime))
                {
                    List<TradeFlow> li = new List<TradeFlow>();
                    li.Add(item);
                    sorteDictTradeFlow.Add(item.CreateTime, li);
                }
                else
                {
                    sorteDictTradeFlow[item.CreateTime].Add(item);
                }
            }
            list = new List<TradeFlow>();
            foreach (var item in sorteDictTradeFlow)
            {
                list.AddRange(item.Value);
            }
            list.Reverse();
        }

饮用方法和model:

/// <summary>
        /// 通过AsposeCells得到DataTable
        /// </summary>
        /// <param name="filepath"></param>
        /// <returns></returns>
        public static DataTable GetDataFromExcel(string filepath)
        {
            Workbook workbook = new Workbook();
            //workbook.Open("C:\\test.xlsx");
            workbook.Open(filepath);
            Cells cells = workbook.Worksheets[0].Cells;

for (int i = 0; i < cells.MaxDataRow + 1; i++)
            {
                for (int j = 0; j < cells.MaxDataColumn + 2; j++)
                {
                    string s = cells[i, j].StringValue.Trim();
                    //一行行的读取数据,插入数据库的代码也可以在这里写
                }
            }
            //System.Data.DataTable dataTable1 = cells.ExportDataTable(1, 0, cells.MaxDataRow, cells.MaxColumn);//noneTitle  里边的数字 1  0 可以修改
            System.Data.DataTable dataTable2 = cells.ExportDataTable(0, 0, cells.MaxDataRow, cells.MaxColumn, true);//showTitle
            //return dataTable1;
            return dataTable2;
        }

/// <summary>
       /// datatable 转化为list集合
       /// </summary>
       /// <param name="dt"></param>
       /// <returns></returns>
        public static List<TradeFlow> ConvertToModel(DataTable dt)
        {

List<TradeFlow> ts = new List<TradeFlow>();// 定义集合
            Type type = typeof(TradeFlow); // 获得此模型的类型
            string tempName = "";
            foreach (DataRow dr in dt.Rows)
            {
                TradeFlow t = new TradeFlow();
                PropertyInfo[] propertys = t.GetType().GetProperties();// 获得此模型的公共属性
                foreach (PropertyInfo pi in propertys)
                {
                    tempName = pi.Name;
                    // 检查DataTable是否包含此列
                    if (dt.Columns.Contains(tempName))
                    {
                        // 判断此属性是否有Setter
                        if (!pi.CanWrite) continue;
                        object value = dr[tempName];
                        if (value != DBNull.Value)
                            pi.SetValue(t, value, null);
                    }
                }
                ts.Add(t);
            }
            return ts;
        }
        public class TradeFlow
        {
            #region 扩展字段
            /// <summary>
            /// 充值流水号
            /// </summary>
            public string SequenceID { get; set; }
            #endregion

/// <summary>
            /// 编号
            /// </summary>
            public string ID { get; set; }

/// <summary>
            ///我方编号 用户编号/或商户编号
            /// </summary>
            public string OwnerID { get; set; }

/// <summary>
            ///对方编号 用户编号/或商户编号
            /// </summary>
            public string Opposite { get; set; }

/// <summary>
            /// 交易编号
            /// </summary>
            public string TradeNo { get; set; }

/// <summary>
            /// 外部交易编号
            /// </summary>
            public string OutTradeNo { get; set; }

/// <summary>
            /// 交易类型(1=在线支付,2=充值、3=交易退款、4=批量代发到账户、5=批量代发到银行卡、6=收费、7=提现、8=充值撤销、9=代扣)
            /// </summary>
            public int PayType { get; set; }

/// <summary>
            /// 交易类型
            /// <para>2=充值</para>
            ///<para>10000=新房服务、10003=新房_新房帮竞标</para>
            ///<para>20000=二手房服务、20001=二手房_租房房源置顶、20002=二手房_租房帮APP置顶、20003=二手房_二手房房源置顶,20005=二手房_租房付佣金</para>
            ///<para>30000=家居服务、30001=家居_家居抢购、30002=家居_装修订单,30003=家居_装修帮APP装修订单</para>
            ///<para>40000=研究院服务、</para>
            ///<para>90000=搜房服务</para>
            ///</summary>
            public int TradeType { get; set; }

/// <summary>
            /// 流水类型(1=收入,2=支出)
            /// </summary>
            public int FlowType { get; set; }

/// <summary>
            /// 交易金额
            /// </summary>
            public decimal Amount { get; set; }

/// <summary>
            /// 收入金额
            /// </summary>
            public decimal Income { get; set; }

/// <summary>
            /// 支出金额
            /// </summary>
            public decimal PayOut { get; set; }

/// <summary>
            /// 交易后金额
            /// </summary>
            public decimal AfterBalance { get; set; }

/// <summary>
            /// 交易标题
            /// </summary>
            public string Title { get; set; }

/// <summary>
            /// 交易描述
            /// </summary>
            public string Subject { get; set; }

/// <summary>
            /// 交易时间
            /// </summary>
            public DateTime CreateTime { get; set; }

/// <summary>
            /// 交易渠道(BALANCE、ALIPAY、YTPAY、AUTHPAY,BFBPAY等)
            /// </summary>
            public string TradeChannel { get; set; }

/// <summary>
            /// 来源
            /// </summary>
            public string Origin { get; set; }

/// <summary>
            /// 交易城市
            /// </summary>
            public string TradeCity { get; set; }

/// <summary>
            /// 备注
            /// </summary>
            public string Description { get; set; }

/// <summary>
            /// 币种名称
            /// </summary>
            public string CurrencyName { get; set; }

#region /********Consume扩展********/
            /// <summary>
            /// 订单使用账户余额金额
            /// </summary>
            public decimal BalanceQuantity { get; set; }

/// <summary>
            /// 订单使用第三方金额
            /// </summary>
            public decimal RestQuantity { get; set; }

#endregion
        }

时间: 2024-08-14 00:09:12

从excel文件中获取数据 转化成list集合 并去重的相关文章

从excel文件中获取数据(2)

本方法引用 Aspose.Cells.dll,ICSharpCode.SharpZipLib.dll ,NPOI.dll,NPOI.OOXML.dll,NPOI.OpenXml4Net.dll,NPOI.OpenXmlFormats.dll static void Main(string[] args)        {            string filepath = @"E:\新房媒体-C端收款.xlsx"; IReadEntDataFromExcel iReadEntDa

[Python]将Excel文件中的数据导入MySQL

Github Link 需求 现有2000+文件夹,每个文件夹下有若干excel文件,现在要将这些excel文件中的数据导入mysql. 每个excel文件的第一行是无效数据. 除了excel文件中已有的数据,还要添加一列,名为“at_company”,值为821. 流程 (1)获取excel文件列表,并根据excel文件名确定之后需要创建的table名: (2)连接mysql (3)创建table (4)插入数据 (5)断开连接 依赖模块 1. xlrd # to read excel fil

序列化和反序列化:将本地文件中的数据反序列化成实体对象

(1)将本地文件中的数据反序列化成实体对象 (2)将实体对象序列化 .txt中json格式的数据为:{"Name":"张三","Age":20,"Address":"上海市徐汇区"} 第一步: 添加dll引用:Newtonsoft.Json.dll (网上下载一个) using Newtonsoft.Json; 第二步: 新建一个Student实体类: public class Student { publ

用python读取带密码的excel文件中的数据

用python读取带密码的excel文件中的数据,程序代码如下: #filename:readingxls.py ''' 此程序的作用为:用python读取带密码的excel文件中的数据. 首先通过pip安装xlrd第三方库 pip3 install xlrd 请输入excel文件路径:D:\x1.xls ''' import xlrd path=input("请输入excel文件路径:") workbook=xlrd.open_workbook(path) b=len(workboo

springMVC从上传的Excel文件中读取数据

示例:导入客户文件(Excle文件) 一.编辑customer.xlsx 二.编辑jsp(addCustomer3.jsp) <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefi

python从Microsoft Excel文件中导入数据

excel中后缀为csv和xls,二者区别如下:1.xls 文件就是Microsoft excel电子表格的文件格式.2.csv是最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中. 此文件,一行即为数据表的一行.生成数据表字段用半角逗号隔开.csv是文本文件,用记事本就能打开,XLS是二进制的文件只有用EXCEL才能打csv文件是以逗号为分隔符号,将各字段列分离出的一种ASCII文件.csv(*.csv) 文件格式只能保存活动工作表中的单元格所显示的文本和数值.工作表中所有的数

Java读写Excel文件中数据的简便方法

Java开发项目中经常会碰到处理Excel文件中数据的情况,这里通过一个例子来看一下实现方法:从Excel文件orders.xls中读取订单信息,从中找出2010年1月1日(含)之后,并且SELLERID等于18的订单.找到的数据写入order_result.xls文件. Excel文件orders.xls的内容如下: ORDERID CLIENT SELLERID AMOUNT ORDERDATE 1 UJRNP 17 392 2008/11/2 15:28 2 SJCH 6 4802 200

C#创建Excel文件并将数据导出到Excel文件

C#创建Excel文件,这里实际上是从资源中提取一个事先创建好的Excel文件,文件提取成功后,使用OleDb方法连接Excel,向Excel文件中写入数据. 创建解决方案 菜单>新建>项目>Windows窗体应用程序: 添加相关组件: 添加两个DataGridView,一个TextBox,两个按钮 ,如下图: 添加Excel资源: 先在文件夹中新建一个Excel文件,在Sheet1表的第一行设置列名: 双击"Resources.resx"文件打开资源文件视图: 添加

效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转

效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载])  本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较   (三)SSIS的简介   (四)数据库中存储过程示例(SSIS应用需要) (五)Excel模板的制作(这步这么简单,稍微介绍一下)   (六)SSIS操作过程(生成Package,用来调用)(下一篇随笔将详细讲解制作Package包的过程,图片太多,篇幅过长,因此本文将直接采用生成的Package包进行