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

Excel Script技术问询:如何将数据输出至同文件夹外部工作簿

解决方案:用Office Script + OneDrive REST API写入外部工作簿

Office Script本身无直接操作外部工作簿的原生API,但可借助OneDrive/SharePoint的REST API实现同文件夹下外部工作簿的数据追加,无需依赖Power Automate。

核心逻辑

  1. 收集当前工作簿的目标数据
  2. 通过API定位同文件夹下的目标工作簿
  3. 获取目标工作表的已用范围,计算数据追加的起始行
  4. 调用API将数据写入目标工作表的对应位置

完整脚本代码

async function main(workbook: ExcelScript.Workbook) {
    // 收集当前工作簿的待写入数据
    const activeSheet = workbook.getActiveWorksheet();
    const data = [
        activeSheet.getRange('H13').getText(),
        activeSheet.getRange('H14').getText(),
        activeSheet.getRange('H15').getText(),
        activeSheet.getRange('H16').getText(),
        activeSheet.getRange('H23').getText(),
        activeSheet.getRange('H22').getText(),
        activeSheet.getRange('H21').getText(),
        activeSheet.getRange('H20').getText(),
        activeSheet.getRange('H18').getText()
    ];

    // 配置目标工作簿参数,替换为实际名称
    const targetWorkbookName = "Database.xlsx";
    const targetSheetName = "Zapier";

    // 获取当前工作簿所在文件夹路径
    const currentWorkbookUrl = workbook.getUrl();
    const folderUrl = currentWorkbookUrl.substring(0, currentWorkbookUrl.lastIndexOf('/'));

    // 调用OneDrive API搜索目标工作簿,获取文件ID
    const searchResponse = await fetch(`${folderUrl}/search(q='${targetWorkbookName}')?select=id,name`, {
        method: 'GET',
        headers: { 'Accept': 'application/json;odata.metadata=none' }
    });
    const searchResult = await searchResponse.json();
    if (searchResult.value.length === 0) {
        throw new Error(`未找到目标工作簿:${targetWorkbookName}`);
    }
    const targetFileId = searchResult.value[0].id;

    // 获取目标工作表的已用范围,计算追加起始行
    const usedRangeResponse = await fetch(`https://graph.microsoft.com/v1.0/me/drive/items/${targetFileId}/workbook/worksheets/${targetSheetName}/usedRange`, {
        method: 'GET',
        headers: { 'Accept': 'application/json' }
    });
    let startRow = 1;
    try {
        const usedRange = await usedRangeResponse.json();
        startRow = usedRange.rowCount + usedRange.rowIndex + 1; // Excel API行索引从0开始,需转成实际行号
    } catch (e) {
        // 工作表为空时,从第1行开始写入
        startRow = 1;
    }

    // 调用API写入数据到目标工作表
    const writeResponse = await fetch(`https://graph.microsoft.com/v1.0/me/drive/items/${targetFileId}/workbook/worksheets/${targetSheetName}/range(address='A${startRow}:I${startRow}')`, {
        method: 'PATCH',
        headers: {
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        },
        body: JSON.stringify({
            values: [data]
        })
    });

    if (!writeResponse.ok) {
        const errorDetails = await writeResponse.json();
        throw new Error(`写入失败:${errorDetails.error.message}`);
    }

    console.log(`数据已成功追加到${targetWorkbookName}的${targetSheetName}工作表第${startRow}行`);
}

关键注意事项

  • 确保当前用户对目标工作簿拥有编辑权限
  • 若使用SharePoint站点下的文件,需将API路径中的me/drive替换为sites/{site-id}/drive(site-id可从SharePoint站点URL获取)
  • Excel Online环境下的fetch会自动携带用户身份凭证,无需额外配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:45:24