概述
业务中有时会使用一些第三方表格来记录数据;比如常用的wps在线智能表格;
其中可以嵌入一些脚本实现一些简单的交互;
比如点击按钮从可访问的url中下载图片然后嵌入到表格的单元格中;
我在使用时跟着api文档敲了下发现不行;
后来搜了下资料,发现还需要配合特殊的配置才能生效
按钮触发图片下载填充
官方文档
https://bbs.wps.cn/topic/56066
大概分3块步骤;
1-配置按钮
2-配置脚本
3-配置流程(流程配置中需要配置上对应的入参变量,变量name要和脚本中的匹配)
这里直接捞官网demo中的按钮相关配置图了

流程配置中的入参配置

脚本demo
javascript
// 验证链接类型函数
function isValidLink(url){
/// 验证WPS云文档链接格式:必须以http或https开头,后跟特定路径
const wpsPattern = /^https?:\/\/www\.kdocs\.cn\/l\//;
// 图片验证:必须以http或https开头,且包含常见图片扩展名
const imagePattern = /^https?:\/\/.*\.(png|jpe?g|gif|bmp|webp|svg)(\?|$|!|&|#)/i;
return wpsPattern.test(url) || imagePattern.test(url);
};
function refreshImgFile(recordid){
// 读取字段值
let urlValue = Application
.Sheets("数据表模板")
.Views("数据表模板")
.RecordRange(recordid, "@图片URL")
.Value;
if(!urlValue){
urlValue = Application.Sheets("数据表模板").RecordRange(recordid, "@图片URL");
}
console.log("URL地址:", urlValue);
if(!urlValue){
console.log("URL地址不存在");
return {
message: "URL地址不存在"
}
}
const fileName = `附件_${recordid}`;
const fileExt = urlValue.split('.').pop().toLowerCase();
console.log("附件名称:", fileName);
const validMatch = isValidLink(urlValue);
console.log("URL是否为有效链接:", validMatch);
if(!validMatch) {
// 清空附件
Application.Sheets("数据表模板").RecordRange(recordid, "@图片和附件").Value = null;
// 返回错误信息
console.log("URL非云文档链接或图片链接");
return {
message: "URL非云文档链接或图片链接"
}
};
const fullFileName = fileName + '.' + fileExt;
console.log('文件name', fullFileName);
// 设置附件
Application.Sheets("数据表模板").RecordRange(recordid, "@图片和附件").Value = DBCellValue([{
fileData: urlValue,
fileName: fullFileName
}]);
console.log("附件设置成功!");
return {
message: "附件设置成功!"
}
};
const buttonRecordIds = Context.argv.recordid
console.log("button当前记录ID:", buttonRecordIds);
if (Array.isArray(buttonRecordIds)) {
// 多条
buttonRecordIds.forEach((id) => {
refreshImgFile(id);
})
return;
}
const selectedRecordIds = Application.Selection.GetSelectionRecordIds();
console.log("selected记录IDS:", selectedRecordIds);
let selectedRecordId = null;
if(selectedRecordIds && selectedRecordIds.length > 0){
selectedRecordId = selectedRecordIds[0][0];
}
const recordid = buttonRecordIds || selectedRecordId;
if (!recordid) {
return { message: '未获取到当前记录,请从表格行按钮触发' };
}
refreshImgFile(recordid);