You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Smartsheet API高效获取所有工作表行的附件?

Smartsheet API 附件获取优化问题

核心疑问

是否无需逐行操作、无需先调用2次API获取attachment id再调用1次获取附件,就能直接获取附件列表?

我正在编写脚本通过Smartsheet API获取全部/指定工作表中的目标附件。当前实现效率极低,因为需要遍历数千行检查是否存在附件。以下两行代码返回的对象或对象列表虽包含Attachments属性,但该属性始终为空:

// 获取所有工作表资源
PaginatedResult<Sheet> sheets = smartsheet.SheetResources.ListSheets(null, null, null);

var includeAttachments = new List<SheetLevelInclusion> { SheetLevelInclusion.ATTACHMENTS };
var sheet = smartsheet.SheetResources.GetSheet(sheetId, includeAttachments, null, null, null, null, null, null);

每个方法都提供了IEnumerable<SheetLevelInclusion>参数,但我不确定能否利用该参数实现需求。

以下是完整的参考代码,其中包含尚未实现的FilterSheets方法。我也接受Python语言的解决方案:

private List<SMTPAttachment> GetAttachments(SmartsheetClient smartsheet)
{
  var includeAttachments = new List<SheetLevelInclusion> { SheetLevelInclusion.ATTACHMENTS };

  // 获取所有工作表资源
  PaginatedResult<Sheet> sheets = smartsheet.SheetResources.ListSheets(null, null, null);

  // 过滤掉不含目标附件的工作表
  var filteredSheets = FilterSheets(sheets);

  // 初始化存储数据的对象
  var attachments = new List<SMTPAttachment>();

  // 遍历每个筛选后的工作表
  foreach (var tempSheet in filteredSheets)
  {
    var sheetId = (long)tempSheet.Id;
    var sheet = smartsheet.SheetResources.GetSheet(sheetId, includeAttachments, null, null, null, null, null, null);

    // 遍历工作表的每一行
    foreach (Row row in sheet.Rows)
    {
      long rowId = (long)row.Id;
      var paging = new PaginationParameters(true, 1, 1);
      var smtpAttachment = new SMTPAttachment();

      PaginatedResult<Attachment> updatedAttachment = smartsheet.SheetResources.RowResources.AttachmentResources.ListAttachments(
        sheetId,
        rowId,
        paging
      );
      if (updatedAttachment.Data.Count != 0)
      {
        var attachmentInfo = updatedAttachment.Data.FirstOrDefault();
        if (attachmentInfo != null)
        {
          // 最终获取附件
          var attachment = smartsheet.SheetResources.AttachmentResources.GetAttachment(sheetId, (long)attachmentInfo.Id);
          smtpAttachment.Attachment = attachment;
          smtpAttachment.Name = attachment.Name;
          smtpAttachment.Url = attachment.Url;
          smtpAttachment.MimeType = attachment.MimeType;
          attachments.Add(smtpAttachment);
          Console.WriteLine("Attaching file : " + attachment.Name);
        }
      }
      else
      {
        Console.WriteLine("No Data for row: " + rowId);
      }
    }
  }

  return attachments;
}

private List<Sheet> FilterSheets(PaginatedResult<Sheet> sheets)
{
  /// TODO: 实现过滤逻辑
  var filteredSheets = sheets.Data.ToList().Where(sheet => sheet.Id == sheet.Id).ToList();  

  return filteredSheets;
}

内容的提问来源于stack exchange,提问作者Samuel Zrna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 01:00:58