Bug反馈】AirScript 2.0 多维表 DBCellValue 写附件失败

一、问题概述

多维表 AirScript 2.0 (Beta) 中,用 Application.DBCellValue([{fileData, fileName}]) 写入"图片和附件"字段时报 upload attachment failed;而 1.0 中用全局 DBCellValue 传相同参数、相同写法可以正常写入(已在生产环境跑通 xlsx/docx/pdf/jpg)。判定为 2.0 对 Attachment 写入的实现缺陷,而非缺少上传 API。

二、环境信息

  • 系统类型:macOS

  • WPS 版本:12.1.28492

  • 产品:WPS 多维表格

  • 运行时:AirScript 2.0 (Beta),脚本环境(2.0)初始化

  • 实测日期:2026-09-16

  • 字段类型:图片和附件(Attachment)

三、1.0 复现(可正常运行,成功写入)

// dataUrl = "data:application/pdf;base64," + 拼接后的base64
var cellValue = DBCellValue([{ fileData: dataUrl, fileName: "a.pdf" }]);
Application.Sheets("表名").RecordRange(recordId, "@传阅会签").Value = cellValue;

  • 多文件:一次 DBCellValue([{...},{...}]),可避免后写覆盖;

  • 写附件字段不要用 UpdateRecords(会 E_INVALIDARG);

  • 清空附件写 []。

四、2.0 复现(同参失败)

const cellValue = Application.DBCellValue([{ fileData: dataUrl, fileName: "a.pdf" }]);
Application.Sheets.Item(1).Views.Item(1).RecordRange(recordId, "@传阅会签").Value = cellValue;

  • 实测结果:ERROR: upload attachment failed

  • 尝试 fileData 传真实 URL、传 base64 Data URL 均失败;

  • Application.GetAttachmentURL / sheet.GetUploadUrl 等均 undefined。

五、期望行为

2.0 的 Application.DBCellValue 应能像 1.0 全局 DBCellValue 一样,通过 {fileData, fileName} 写入"图片和附件"字段,保持参数与行为一致。

六、影响范围

AirScript 2.0 用户无法在脚本内写入附件字段,生产环境中"脚本自动生成图片/附件入库"场景被阻断;社区 2026-06 起已有同类反馈。

七、补充观察

  • 读附件:RecordRange(id,"@附件").Value 可返回,但返回结构为嵌套(att[0] 键名仅"0"),LinkUrl/FileName 在内层,读取可用但结构待文档化;

  • 1.0 的 GetAttachmentURL 仅用于读取已有附件的下载链接。

八、复现用最小测试表

  • 一个文本字段 + 一个"图片和附件"字段即可复现。

九、最小可复现脚本

// ===== AirScript 2.0 写附件 最小可复现脚本 =====
// 前置:当前多维表格第一张表需有"图片和附件"字段(否则脚本会提示)
function S(l, f){ try{ const v=f(); console.log("["+l+"]", v===undefined?"undefined":(typeof v==='object'?JSON.stringify(v).slice(0,200):String(v).slice(0,200))); } catch(e){ console.log("["+l+"] ERROR:", e.message); } }

const sheet = Application.Sheets.Item(1);
const view  = sheet.Views.Item(1);
const ATT_FIELD = "@图片和附件";   // 如有,改为你表里的附件字段名

// 1. 确认附件字段存在
const hasAtt = (sheet.GetFields() || []).some(f => f.type === "Attachment");
console.log("检测到附件字段:", hasAtt);
if (!hasAtt) { console.log("提示:请先在表里建一个'图片和附件'字段再运行"); }

// 2. 最小 1x1 透明 PNG 的 Data URL
const png = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==";

// 3. 建一条记录
let rid = null;
try {
  const nr = view.RecordRange.Add();
  rid = Array.isArray(nr.Id) ? nr.Id[0] : nr.Id;
  console.log("已创建记录:", rid);
} catch(e){ console.log("创建记录失败:", e.message); }

// 4. 用 Application.DBCellValue 写附件(复现点)
try {
  const cellValue = Application.DBCellValue([{ fileData: png, fileName: "t.png" }]);
  view.RecordRange(rid, ATT_FIELD).Value = cellValue;
  console.log("写附件成功(若看到此行,说明未复现 Bug)");
  console.log("读回:", JSON.stringify(view.RecordRange(rid, ATT_FIELD).Value));
} catch(e){ console.log("复现点报错原文:", e.message); }

// 5. 清理测试记录
if (rid) try { view.RecordRange([rid]).Delete(); } catch(e){}

运行说明:粘贴到多维表 AirScript 2.0 编辑器运行。若输出 复现点报错原文: upload attachment failed,即完成复现;若输出"写附件成功",请提供该环境版本号以便对照。

十·附、复现日志(2026-09-16 实测)

浏览 1171
收藏
4
分享
4 +1
+1
全部评论