如何在Azure Logic App中将Form Recognizer识别结果转换为CSV
Azure Form Recognizer 识别结果转CSV(Logic App实现方案)
你当前的处理路径是正确的,只需要先清洗脏数据,再按行列拼接即可实现CSV导出,具体方案如下:
第一步:处理识别脏数据
你当前拿到的三元组数据中,同一个(columnindex,rowindex)坐标下存在大量带分割线的重复识别结果,优先对数据做分组清洗:
- 按
(列索引,行索引)对所有三元组做分组 - 每组内过滤掉带连续横线的内容,保留最短的无特殊符号的有效文本,比如你示例中(0,0)坐标组内直接保留
Weight即可
第二步:Logic App无代码实现流程
- 初始化两个整数变量,分别存储
最大行号和最大列号,遍历所有清洗后的三元组,更新两个变量的最大值 - 初始化一个二维数组,行数为
最大行号+1,列数为最大列号+1,所有位置默认填空字符串 - 遍历所有清洗后的(列索引,行索引,文本)三元组,将文本赋值到二维数组对应的
[行索引][列索引]位置 - 遍历二维数组的每一行,将一行内的所有元素用半角逗号拼接为字符串,所有行的拼接结果用换行符连接,即可得到标准CSV内容
- 可选优化:如果单元格内容可能包含逗号、换行符,将每个单元格内容的双引号替换为两个双引号,再用双引号包裹整个单元格内容,避免CSV格式错乱
第三步:Logic App 内联代码简化实现
如果觉得无代码步骤繁琐,可以直接添加「执行JavaScript代码」动作,用少量代码完成转换,参考代码如下:
// 请将下方workflowContext.actions.YourPreviousAction.outputs替换为你前置步骤输出的三元组数组 const rawTriples = workflowContext.actions.YourPreviousAction.outputs; const cellMap = {}; let maxRow = 0, maxCol = 0; // 数据清洗+坐标分组 rawTriples.forEach(item => { // 去掉前后引号,拆分三元组 const [colStr, rowStr, rawText] = item.replace(/^"|"$/g, '').split(','); const col = parseInt(colStr), row = parseInt(rowStr); const key = `${col},${row}`; // 清理横线和前后空白 const cleanText = rawText.replace(/-{2,}/g, '').trim(); // 仅保留更短的有效内容 if (!cellMap[key] || cleanText.length < cellMap[key].length) { cellMap[key] = cleanText; } // 更新最大行列号 maxRow = Math.max(maxRow, row); maxCol = Math.max(maxCol, col); }); // 生成标准CSV const csvRows = []; for (let r = 0; r <= maxRow; r++) { const currentRow = []; for (let c = 0; c <= maxCol; c++) { const cellVal = cellMap[`${c},${r}`] || ''; // CSV转义处理 currentRow.push(`"${cellVal.replace(/"/g, '""')}"`); } csvRows.push(currentRow.join(',')); } return csvRows.join('\r\n');
内容的提问来源于stack exchange,提问作者Gareth
相关产品推荐
相关产品推荐

