WPS AirScript脚本合集(十九):调用脚本获取图片URL自动生成图片写入“图片与附件”字段
一、多维表格数据表及字段结构
1、数据表名:URL生成图
2、视图名称:表格视图
3、字段设置:
字段名称:URL地址 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
字段名称:附件名称 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
字段名称:图片和附件 - 字段类型:图片和附件 -显示样式:以列表样式显示 - 图片上传方式:无需勾选 仅可通过移动端拍摄上传
字段名称:脚本执行情况 - 字段类型:文本 - 禁止录入重复值:否 - 默认值:无
字段名称:强制刷新按钮 - 字段类型:按钮 - 执行操作:点击按钮时,触发执行AirScript脚本 - 执行成功的提示:( ´▽` )ノ刷新成功 - 按钮名称:点击按钮强制刷新 - 按钮颜色:绿色
二、开发指南相关字段说明
WPS开放平台开发指南https://open.wps.cn/documents/app-integration-dev/guide/self-app/summary.html有相关字段说明,感兴趣的小伙伴可以自行前往研究学习下~
此外,需要先在脚本编辑器对应的脚本内添加网络API哦
三、AirScript脚本说明
const recordid = Context.argv.recordid || Application.Selection.GetSelectionRecordIds()[0][0];
console.log("当前记录ID:", recordid);
// 读取字段值
let urlValue = Application.Sheets("URL生成图").Views("表格视图").RecordRange(recordid, "@URL地址").Value;
let fileName = Application.Sheets("URL生成图").Views("表格视图").RecordRange(recordid, "@附件名称").Value;
console.log("URL地址:", urlValue);
console.log("附件名称:", fileName);
// 下载链接数据并转换为Base64编码的函数
function downloadImageAndConvertToBase64(imageUrl) {
try {
console.log("开始下载链接数据:", imageUrl);
// 使用HTTP.get方法下载链接数据
const response = HTTP.get(imageUrl, {
timeout: 10000 // 设置10秒超时
});
console.log("链接数据下载响应状态:", response.status);
// 检查请求是否成功
if (response.status === 200) {
console.log("数据下载成功");
// 获取图片的MIME类型
let mimeType = "image/jpeg"; // 默认类型
if (imageUrl.includes('.png')) {
mimeType = "image/png";
} else if (imageUrl.includes('.gif')) {
mimeType = "image/gif";
} else if (imageUrl.includes('.bmp')) {
mimeType = "image/bmp";
} else if (imageUrl.includes('.webp')) {
mimeType = "image/webp";
} else if (imageUrl.includes('.svg')) {
mimeType = "image/svg+xml";
}
// 将链接数据转换为Base64编码
const base64Data = `data:${mimeType};base64,${response.binary().toString('base64')}`;
console.log("链接数据成功转换为Base64编码");
return base64Data;
} else {
throw new Error(`HTTP请求失败,状态码: ${response.status}`);
}
} catch (error) {
console.error("链接数据下载或转换失败:", error.message);
throw error;
}
}
// 主处理函数
function processAttachment() {
let attachmentData; //在此统一声明变量
try {
// 判断链接类型:WPS云文档链接还是普通图片链接
const isWpsCloudLink = /^https?:\/\/www\.kdocs\.cn\/l\//.test(urlValue);
if (isWpsCloudLink) {
console.log("检测到WPS云文档链接,直接设置附件");
// 如果是WPS云文档链接,直接使用URL设置附件
attachmentData = [{
fileData: urlValue,
fileName: fileName
}];
} else {
console.log("检测链接,开始下载并转换为Base64");
// 默认是普通图片链接,下载并转换为Base64
const base64ImageData = downloadImageAndConvertToBase64(urlValue);
// 确保文件名有正确的扩展名
if (fileName && !fileName.includes('.')) {
if (urlValue.includes('.png')) {
fileName += '.png';
} else if (urlValue.includes('.gif')) {
fileName += '.gif';
} else if (urlValue.includes('.bmp')) {
fileName += '.bmp';
} else if (urlValue.includes('.webp')) {
fileName += '.webp';
} else if (urlValue.includes('.svg')) {
fileName += '.svg';
} else {
fileName += '.jpg'; // 默认
}
}
attachmentData = [{
fileData: base64ImageData,
fileName: fileName
}];
}
// 设置附件 - 添加错误处理
try {
Application.Sheets("URL生成图").RecordRange(recordid, "@图片和附件").Value = DBCellValue(attachmentData);
console.log("附件设置成功!");
return {
message: "附件设置成功!",
type: isWpsCloudLink ? "云文档链接" : "Base64图片"
};
} catch (setError) {
// 专门捕获设置附件时的错误
console.error("设置附件时发生错误:", setError);
throw new Error(`附件设置失败: ${setError.message},请检测URL链接是否为有效的云文档或图片链接`);
}
} catch (error) {
console.error("处理过程中发生错误:", error);
// 清空附件
Application.Sheets("URL生成图").RecordRange(recordid, "@图片和附件").Value = null;
return {
message: `处理失败: ${error.message},请检测URL链接是否为有效的云文档或图片链接`,
error: true
};
}
}
// 执行主处理函数
return processAttachment();先上个正常的图片链接,可以使用浏览器打开检测是否为图片,如https://mmbiz.qpic.cn/mmbiz_png/TljaIwvLPfImoGibxWn0DBnfiaRsDPuYGApSmkZFibBaibyTianEuHibwHWeqZNUPVFMXZatrx2cTgh8MMBf4vvTBjfw/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1#imgIndex=5
WPS脚本编辑器控制台运行脚本执行结果如下,说明是可以成功获取图片数据的(^o^)
再来个反面案例,如链接填个obsidian的官网地址,如https://obsidian.md/,这可是妥妥的网页链接而不是图片链接哇(´Д` )
WPS脚本编辑器控制台运行脚本执行结果如下,没错!直接报错执行失败(是的,就是这么任性σ(^_^;)




