0

我正在尝试将图片文件响应作为完整图像而不是表单中的 URL 上传到 excel 中。该表单为我提供了可下载的 jpg、jpeg 或 png(如果使用文件转换器)URL。我想尝试获取 jpg、jpeg 或 png 文件(jpg 是最佳模式)并从提供的 URL 以全图形式上传。我有我在办公室脚本中制作的代码,但我收到了无法获取错误。我还尝试使用来自 google 的不可下载的 png 链接,但仍然遇到相同的错误。

async function main(workbook: ExcelScript.Workbook) {

const link = "https://api.typeform.com/responses/files/39ce7d7b9326c7d5f5d9366326d7254ed68fca9be7b02cca7d2550d537037809/f0439ebd2f58_20210706_083619__2___1_.png";
const response = await fetch(link);

const data = await response.arrayBuffer();
const image = convertToBase64(data);
workbook.getActiveWorksheet().addImage(image)
}

function convertToBase64(input: ArrayBuffer){
const uInt8Array = new Uint8Array(input);
const count = uInt8Array.length;

const charCodeArray = new Array(count)

for(let i - count; i >= 0; i--){
charCodeArray[i] = String.fromCharCode(uInt8Array[i]);
}

const base64 = btoa(charCodeArray.join(''));
return base64;
}

我相信此代码仅限于 png 文件,这很麻烦,因为文件必须在第三方网站上从 jpeg 或 jpg 转换为 png。如果代码中还有一种方法可以上传 jpg 或 jpeg,那将不胜感激!

谢谢!

4

1 回答 1

0

您能否尝试再次运行该脚本并打开浏览器开发工具(Chrome 或 Microsoft Edge 的 F12)并查看控制台输出中是否有一些错误消息表明请求已被 CORS 策略阻止?如果是,您可能需要:

  • 在主机服务器端为该 Web 资源启用 CORS(如果您拥有或控制服务器)
  • 或者使用某种“获取代理”来解决它。请在此处参考我对另一个类似问题的回答:https ://stackoverflow.com/a/66959919/6656547

顺便说一句,我相信Worksheet.addImageAPI支持PNGJPG图像:

base64ImageString字符串

以JPEGPNG格式表示图像的 base64 编码字符串。

于 2021-07-12T16:25:42.500 回答