0

我有一个微软表单,可以让用户回答一些问题并上传图片。所有响应都将保存到一个带有电源自动化流程的 Excel 表中。这些答案将保存为字符串,指向 OneDrive 的图片的 URL 也将保存到 Excel 表中。

好的,很多人都问过如何使用该 URL 将图片插入到 excel 中的问题,但到目前为止还没有解决方案。微软的标准答案似乎不起作用——只要 URL 指向 OneDrive/SharePoint 就会出现获取错误(请参阅此链接

我从另一个方面问同样的问题。我可以在电源自动化流程中获取文件内容。当我下载文件内容并检查它时,它具有这样的数据结构(出于安全原因,这不是完整的文件内容):

内容-处置":"附件;filename="16337833927412488499783584031011.jpg"","Content-Type":"image/jpeg","Expires":"-1"},"body":{"$content-type":"image/jpeg"," $内容":"

据我所知,"body":{"$content-type":"image/jpeg","$content": 之后的字符串从 /9j/4UVORX 开始直到 ...== 是 base64 字符串逻辑上可以传递给 OfficeScript 并调用 worksheet.AddImage API 将完整图片作为图像直接插入到 excel 工作表中的图像。

如果我将文件内容从电源自动化流程传递到 OfficeScript,任何人都知道如何使用 OfficeScript 提取 base64 字符串?

===附加===

经过一番研究,我设法使用 json 函数从文件内容中提取正确的字符串:

json(outputs('Get_file_content')?['body']?['$content'])

在此处输入图像描述

但是,它提示错误:操作“撰写”失败...

在此处输入图像描述

啊……想不通了……

4

1 回答 1

2

这个流程对我有用: 用于将从 Form 上传的图像插入 Excel 的 Power Automate 流程

动作中的Content表达式Parse JSON是这样的:

first(json(outputs('Get_response_details')?['body/r926aef8d3cf24b569e10513f3d540e0a']))

就是获取表单上传的文件的信息。根据您的表格,实际表达可能会有所不同。您只需将正确的表单响应字段插入first(json( ))解析 JSON 表达式

动作中Schema使用的Parse JSON是:

{
    "type": "object",
    "properties": {
        "name": {
            "type": "string"
        },
        "link": {
            "type": "string"
        },
        "id": {
            "type": "string"
        },
        "type": {},
        "size": {
            "type": "integer"
        },
        "referenceId": {
            "type": "string"
        },
        "driveId": {
            "type": "string"
        },
        "status": {
            "type": "integer"
        },
        "uploadSessionUrl": {}
    }
}

base64ImageString用于传递给动作的表达式Run script是:

base64(outputs('Get_file_content')?['body'])

最后,如果您对我在这里使用的脚本感兴趣:

function main(workbook: ExcelScript.Workbook, sheetName: string, address: string, base64ImageString: string) {
  let sheet = workbook.getWorksheet(sheetName);
  let range = sheet.getRange(address);
  let image = sheet.addImage(base64ImageString);
  image.setTop(range.getTop());
  image.setLeft(range.getLeft());
}
于 2021-10-11T16:52:05.387 回答