RPA流程机器人
本页目录
对账场景下DataTable使用技巧
更新时间:2024-08-23 10:39:30
一、背景概述
对账场景是我们RPA常见的应用场景,一般可以借助数据库组件,把数据先导入到本地数据库再处理,也可以直接使用DataTable进行处理,下面我们通过一个具体例子来讲解对账场景下DataTable的一些使用技巧。
二、方案介绍
假设有2张表,每日入账表,记录每日入账金额,一天只有一笔数据,每日交易明细表,记录每笔交易流水明细信息,一天有多笔数据。
对账要求:
(1)分别统计汇总每日入账表总金额、交易明细表总金额;
(2)核对每一天的入账金额和交易金额,对一致的标注为是,不一致的标注为否。
表格数据如下:
每日入账表
入账日期 | 入账金额 |
---|---|
20240801 | 500 |
20240802 | 300 |
20240803 | 100 |
交易明细表
交易日期 | 交易金额 |
---|---|
20240801 | 300 |
20240801 | 200 |
20240802 | 300 |
20240802 | 50 |
20240803 | 100 |
1. 总金额计算
假设现在每日入账表已写入 creditDt,交易明细表已写入 transDt。
// 汇总每日入账表金额
decimal creditTotalAmt = creditDt.Select().Sum(r => Decimal.Parse(r["入账金额"].ToString()));
// 汇总交易明细表金额
decimal transTotalAmt = transDt.Select().Sum(r => Decimal.Parse(r["交易金额"].ToString()));
2. 明细汇总
// 新建明细汇总summaryDt
DataTable summaryDt = new DataTable("交易明细汇总表");
summaryDt.Columns.Add(new DataColumn("交易日期", typeof(string)));
summaryDt.Columns.Add(new DataColumn("交易金额", typeof(decimal)));
DataRow newRow;
// 分组聚合后写入summaryDt
transDt.Select().GroupBy(r => new {date = r["交易日期"]}).Select(
r => new
{
date = r.First()["交易日期"],
groupAmt = r.Sum(s => Decimal.Parse(s["交易金额"].ToString()))
}
).ToList().ForEach(r => {
newRow = summaryDt.NewRow();
newRow["交易日期"] = r.date;
newRow["交易金额"] = r.groupAmt;
summaryDt.Rows.Add(newRow);
});
3. 比对明细汇总表和每日入账表
// creditDt和transDt 增加“是否一致” 列,并初始化
creditDt.Columns.Add(new DataColumn("是否一致", typeof(string)));
transDt.Columns.Add(new DataColumn("是否一致", typeof(string)));
foreach (DataRow r in creditDt.Rows)
{
r["是否一致"] = "否";
}
foreach (DataRow r in transDt.Rows)
{
r["是否一致"] = "否";
}
// 遍历summaryDt与creditDt进行比对
DataRow[] dataRows;
foreach(DataRow row in summaryDt.Select())
{
string transDate = row["交易日期"].ToString();
decimal transAmt = Decimal.Parse(row["交易金额"].ToString());
// 条件筛选(根据交易日期和交易金额筛选入账表是否有符合的记录)
var creditMatchRows = creditDt.Select().Where(
t => t["入账日期"].ToString().Equals(transDate) && Decimal.Parse(t["入账金额"].ToString()) == transAmt
).ToArray();
if (creditMatchRows.Count() == 1)
{
// 入账表标注“是否一致” 为“是”
creditMatchRows[0]["是否一致"] = "是";
//交易明细表标注
transDt.Select("交易日期='" + transDate + "'");
foreach(DataRow r in dataRows)
{
r["是否一致"] = "是";
}
}
}
< 上一篇:客户端下载Excel文件读取报错处理技巧
意见反馈
感谢您反馈问题或意见
类型
- 卡顿
- 登录或账号问题
- 功能使用异常
- 意见或建议
- 其他
描述
点击上传图片;单张图片应小于1M。
0/200