用uipath对两个表数据操作,
数据表a备注包含数据表b单号后四位且数据表a的金额等于数据表b的金额,就在数据表a类别更新为到付,数据表b付款渠道更新为收款码,日期为数据表a的日期。如何实现
可以借鉴下
Exactly - 用于选择要查找的确切的连续出现次数。例如,如果要搜索的文本是“lorem”且“量词”设为“精确次数”2,则向导会在“测试文本”框中找到任何出现“loremlorem”的结果。
Any (0 or more) - 用于高亮显示连续找到的任意数量的匹配项,次数从 0 开始。
At least one (1 or more) - 用于高亮显示连续找到的任意数量的匹配项,次数从 1 开始。
Zero or one - 仅高亮显示连续出现一次的搜索词。
Between X and Y times - 用于高亮显示所选择的连续出现次数。例如,若搜索“ipsum”并选择“2 至 3 次之间”,则系统仅会高亮显示
https://blog.csdn.net/baidu_33146219/article/details/126107700
可以使用 UiPath 的数据表操作和条件判断来实现这个需求,具体步骤如下:
使用 Excel 应用程序作为数据源,使用“读取范围”活动读取数据表 A 和数据表 B 中的数据。
使用“循环行”活动循环遍历数据表 A 的每一行数据。
在循环中,使用“筛选数据表”活动筛选数据表 B 中备注包含当前数据表 A 行单号后四位的数据行。
再使用“筛选数据表”活动筛选数据表 B 中金额等于当前数据表 A 行金额的数据行。
如果筛选结果不为空,则说明找到了匹配的数据行,使用“更新数据行”活动更新数据表 A 中当前行的类别为到付,数据表 B 中筛选结果的付款渠道为收款码,日期为数据表 A 中的日期。
如果筛选结果为空,则说明没有找到匹配的数据行,跳过当前数据表 A 行的处理。
循环结束后,使用“写入范围”活动将更新后的数据表 A 和数据表 B 写回到 Excel 中保存。
下面是具体的实现步骤:
使用“读取范围”活动读取数据表 A 和数据表 B 中的数据,分别存储到两个 DataTable 变量 dtA 和 dtB 中。
使用“循环行”活动遍历 dtA 中的每一行数据,对于每一行数据,执行以下操作:
从当前行中获取单号后四位作为关键字,使用“筛选数据表”活动筛选在 dtB 中备注包含该关键字的数据行,将结果存储到 DataTable 变量 dtBFiltered1 中。
再使用“筛选数据表”活动筛选在 dtBFiltered1 中金额等于当前行金额的数据行,将结果存储到 DataTable 变量 dtBFiltered2 中。
如果 dtBFiltered2 的行数大于 0,则说明找到了匹配的数据行,使用“更新数据行”活动更新 dtA 中当前行的类别为“到付”,dtBFiltered2 中的付款渠道为“收款码”,日期为 dtA 中的日期。
如果 dtBFiltered2 的行数等于 0,则说明没有找到匹配的数据行,跳过当前行的处理。
循环结束后,使用“写入范围”活动将更新后的 dtA 和 dtB 写回到 Excel 中保存。
下面是具体的实现步骤的代码示例:
' 读取数据表 A 和数据表 B
Dim dtA As DataTable = New DataTable()
Dim dtB As DataTable = New DataTable()
dtA = ExcelReadRange("A1", "D" & LastRowA, "Sheet1", "True")
dtB = ExcelReadRange("A1", "D" & LastRowB, "Sheet2", "True")
' 遍历数据表 A 的每一行数据
For Each rowA As DataRow In dtA.Rows
' 获取当前行的单号后四位作为关键字
Dim key As String = rowA("单号").ToString().Substring(rowA("单号").ToString().Length - 4)
' 筛选在数据表 B 中备注包含该关键字的数据行
Dim dtBFiltered1 As DataTable = dtB.AsEnumerable().Where(Function(r) r.Field(Of String)("备注").Contains(key)).CopyToDataTable()
' 筛选在 dtBFiltered1 中金额等于当前行金额的数据行
Dim dtBFiltered2 As DataTable = dtBFiltered1.AsEnumerable().Where(Function(r) r.Field(Of Double)("金额") = rowA("金额")).CopyToDataTable()
' 如果找到了匹配的数据行,则更新数据表 A 和数据表 B
If dtBFiltered2.Rows.Count > 0 Then
' 更新数据表 A 中当前行的类别为“到付”
rowA("类别") = "到付"
' 更新数据表 B 中匹配的数据行的付款渠道为“收款码”,日期为数据表 A 中的日期
For Each rowB As DataRow In dtBFiltered2.Rows
rowB("付款渠道") = "收款码"
rowB("日期") = rowA("日期")
Next
End If
Next
将更新后的数据表 A 和数据表 B 写回到 Excel 中保存
ExcelWriteRange(dtA, "A1", "D" & LastRowA, "Sheet1", "True")
ExcelWriteRange(dtB, "A1", "D" & LastRowB, "Sheet2", "True")
需要注意的是,上述代码中的 ExcelReadRange 和 ExcelWriteRange 函数分别用于读取和写入 Excel中的数据,需要使用 UiPath 的 Excel 应用程序作为数据源,并将“启用活动筛选器”参数设置为 True,以支持数据表筛选操作。此外,代码中的 LastRowA 和 LastRowB 分别表示数据表 A 和数据表 B 的最后一行行号,需要根据实际情况进行设置。
另外,如果数据表 A 和数据表 B 的数据量较大,上述方法可能会比较耗时。可以考虑使用 LINQ 查询或者数据库查询等方法来提高效率。
以下答案由GPT-4.5Plus大模型(语音)与博主A努力中.......共同编写:
最后使用Write Data Table活动将更新后的aTable和bTable数据表写入文件。
这属于一个典型的基于条件匹配的两表更新操作,涉及到数据读取、条件判断、单元格更新以及数据表导出等内容。
UiPath作为一款易用的RPA开发工具,拥有丰富的数据操作活动,可以很好的帮助我们完成这类工作流自动化需求。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,需要打开数据表a和数据表b,可以使用Excel Application Scope activity,在其中嵌套Read Range activity,来读入两个数据表的数据,每个表格分别存放在一个DataTable变量中。
接下来,需要进行数据匹配操作。可以使用For Each Row activity,先循环数据表a中的每一行(即每个DataRow),再嵌套一个For Each Row activity,在其中循环数据表b的每一行,判断如果数据表a中的备注包含数据表b的单号后四位,且数据表a的金额等于数据表b的金额,则进行更新操作。
更新操作可以使用Assign activity,将数据表a的类别更新为到付,数据表b的付款渠道更新为收款码,日期更新为数据表a的日期。
最后,需要将更新后的数据写回到Excel文件中。同样使用Excel Application Scope activity,在其中嵌套Write Range activity,来将更新后的数据写回到Excel文件中。
以下是参考代码:
//读取数据表a
DataTable dtA = new DataTable();
Excel.Application excelAppA = new Excel.Application();
Excel.Workbook workbookA = excelAppA.Workbooks.Open("数据表a路径");
Excel.Worksheet worksheetA = workbookA.Worksheets[1];
Excel.Range rangeA = worksheetA.UsedRange;
Excel.Range rowA;
for (int i = 2; i <= rangeA.Rows.Count; i++)
{
rowA = ((Excel.Range)rangeA.Cells[i, 1]);
DataRow drA = dtA.NewRow();
drA[0] = rowA.Cells[1, 1].Value2.ToString();
drA[1] = rowA.Cells[1, 2].Value2.ToString();
//......读取表格中的其他数据
dtA.Rows.Add(drA);
}
//读取数据表b
DataTable dtB = new DataTable();
Excel.Application excelAppB = new Excel.Application();
Excel.Workbook workbookB = excelAppB.Workbooks.Open("数据表b路径");
Excel.Worksheet worksheetB = workbookB.Worksheets[1];
Excel.Range rangeB = worksheetB.UsedRange;
Excel.Range rowB;
for (int i = 2; i <= rangeB.Rows.Count; i++)
{
rowB = ((Excel.Range)rangeB.Cells[i, 1]);
DataRow drB = dtB.NewRow();
drB[0] = rowB.Cells[1, 1].Value2.ToString();
drB[1] = rowB.Cells[1, 2].Value2.ToString();
//......读取表格中的其他数据
dtB.Rows.Add(drB);
}
//数据匹配和更新
foreach (DataRow rowA in dtA.Rows)
{
foreach (DataRow rowB in dtB.Rows)
{
if (rowA["备注"].ToString().Contains(rowB["单号"].ToString().Substring(rowB["单号"].ToString().Length - 4)) && rowA["金额"].ToString() == rowB["金额"].ToString())
{
rowA["类别"] = "到付";
rowB["付款渠道"] = "收款码";
rowB["日期"] = rowA["日期"];
}
}
}
//写回到Excel文件中
Excel.Application excelAppWriteBack = new Excel.Application();
Excel.Workbook workbookWriteBack = excelAppWriteBack.Workbooks.Open("数据表a路径");
Excel.Worksheet worksheetWriteBack = workbookWriteBack.Worksheets[1];
Excel.Range rangeWriteBack = worksheetWriteBack.UsedRange;
Excel.Range rowWriteBack;
int rowWriteBackIndex = 2;
foreach (DataRow rowA in dtA.Rows)
{
rowWriteBack = ((Excel.Range)rangeWriteBack.Cells[rowWriteBackIndex, 1]);
rowWriteBack.Cells[1, 1].Value2 = rowA[0].ToString();
rowWriteBack.Cells[1, 2].Value2 = rowA[1].ToString();
//......写回表格中的其他数据
rowWriteBackIndex++;
}
workbookWriteBack.Save();
workbookWriteBack.Close();
如果我的回答解决了您的问题,请采纳!