Power Apps中ForAll函数报错:RowNumber列不存在(已确认存在)
解决Power Apps中ForAll+Patch时"RowNumber列不存在"的问题
核心原因排查
1. SharePoint列内部名称与显示名称不匹配
这是最常见的触发原因:即使你在SharePoint中将列的显示名称设为RowNumber,如果创建后修改过名称,其内部名称可能保留旧值(比如RowNumber0、_x0052_owNumber等)。Power Apps的Patch操作仅识别列的内部名称,而非显示名称。
验证方法:
- 打开SharePoint列表的设置页面,找到
RowNumber列并进入编辑页面 - 查看浏览器地址栏,提取
Field=后的字符串,这就是该列的真实内部名称(示例:https://xxx.sharepoint.com/sites/xxx/_layouts/15/FldEdit.aspx?List=%7Bxxx%7D&Field=RowNumber0)
2. 集合列类型与SharePoint列类型不匹配
若SharePoint的RowNumber为数字类型,但集合TempUnitsWithRow中的RowNumber被意外转为字符串类型,Patch时也会触发"列不存在"的错误。
3. Power Apps数据源缓存
Power Apps可能缓存了旧的SharePoint列表结构,导致无法识别新增或修改的列。
针对性解决方案
方案1:使用SharePoint列的内部名称修改Patch代码
将Patch中的RowNumber替换为你查到的内部名称,示例:
ForAll( TempUnitsWithRow, Patch( AssignmentTable_1, Defaults(AssignmentTable_1), { // 替换为实际内部名称,比如RowNumber0 RowNumber0: ThisRecord.RowNumber, Unit: ThisRecord.Unit, Mileage: ThisRecord.Mileage, AssignedDate: DateAdd( Today(), Quotient(ThisRecord.RowNumber - 1, 2), Days ), ID: ThisRecord.ID } ) )
方案2:优化集合生成逻辑(同时避免类型问题)
原代码用Sequence+Last(FirstN)生成RowNumber的效率极低,建议改用更高效的写法,同时确保列类型与SharePoint匹配:
// 替换原TempUnitsWithRow的生成代码 ClearCollect( TempUnitsWithRow, AddColumns( TempUnits, "RowNumber", // 按field_1降序生成行号,从1开始 CountRows(TempUnits) - Index(TempUnits, ThisRecord).Row + 1 ) )
方案3:刷新数据源
- 在Power Apps编辑器左侧的数据源面板中,找到
AssignmentTable_1 - 点击列右侧的三个点,选择刷新,等待刷新完成后再测试代码
内容的提问来源于stack exchange,提问作者Vic
相关产品推荐
相关产品推荐

