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

能否使用Excel加载项将工作簿另存为XLSX并直接上传至API?

解决方案

浏览器前端场景

使用ExcelJS库直接生成包含样式、公式的.xlsx工作簿,通过ArrayBuffer构建Blob后,用FormData上传至API,无需本地存储:

  1. 安装依赖
npm install exceljs
  1. 核心实现代码
import ExcelJS from 'exceljs';

async function uploadWorkbookToAPI() {
  // 创建工作簿并填充内容(保留样式、公式)
  const workbook = new ExcelJS.Workbook();
  const worksheet = workbook.addWorksheet('核心数据');
  
  // 设置单元格值、样式、公式
  worksheet.getCell('A1').value = '项目名称';
  worksheet.getCell('A1').font = { bold: true, size: 12 };
  worksheet.getCell('A1').alignment = { horizontal: 'center' };
  
  worksheet.getCell('B2').value = 100;
  worksheet.getCell('B3').value = 200;
  worksheet.getCell('B4').value = { formula: 'SUM(B2:B3)' };

  // 生成工作簿的ArrayBuffer
  const buffer = await workbook.xlsx.writeBuffer();
  
  // 构建FormData用于上传
  const formData = new FormData();
  formData.append(
    'file', 
    new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }), 
    'data-workbook.xlsx'
  );
  
  // 发送上传请求
  const response = await fetch('你的API接口地址', {
    method: 'POST',
    body: formData
  });

  response.ok ? console.log('上传完成') : console.error('上传失败');
}

Node.js后端场景

同样基于ExcelJS生成工作簿Buffer,直接通过HTTP请求上传:

  1. 安装依赖
npm install exceljs node-fetch form-data
  1. 核心实现代码
const ExcelJS = require('exceljs');
const fetch = require('node-fetch');
const FormData = require('form-data');

async function uploadWorkbook() {
  const workbook = new ExcelJS.Workbook();
  const worksheet = workbook.addWorksheet('业务数据');
  
  // 配置单元格样式与公式
  worksheet.getCell('A1').value = '月度营收';
  worksheet.getCell('A1').fill = {
    type: 'pattern',
    pattern: 'solid',
    fgColor: { argb: 'FFE6F2FF' }
  };
  worksheet.getCell('B2').value = 50000;
  worksheet.getCell('C2').value = { formula: 'B2*0.13' };

  // 生成工作簿Buffer
  const buffer = await workbook.xlsx.writeBuffer();
  
  // 构建FormData
  const formData = new FormData();
  formData.append(
    'file', 
    buffer, 
    { filename: 'business-workbook.xlsx', contentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }
  );
  
  // 上传至API
  const response = await fetch('你的API接口地址', {
    method: 'POST',
    body: formData,
    headers: formData.getHeaders()
  });

  console.log(await response.text());
}

uploadWorkbook();

Excel插件(Office JS)场景

直接获取当前工作簿的Base64编码,转换为Blob后上传:

async function uploadCurrentWorkbook() {
  // 获取当前工作簿的Base64字符串(xlsx格式)
  const base64 = await Excel.run(async (context) => {
    const workbook = context.workbook;
    context.load(workbook);
    await context.sync();
    return workbook.getBase64Async();
  });
  
  // 将Base64转换为Blob
  const binaryStr = atob(base64);
  const arrayBuffer = new ArrayBuffer(binaryStr.length);
  const uint8Array = new Uint8Array(arrayBuffer);
  for (let i = 0; i < binaryStr.length; i++) {
    uint8Array[i] = binaryStr.charCodeAt(i);
  }
  const workbookBlob = new Blob([uint8Array], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
  
  // 上传至API
  const formData = new FormData();
  formData.append('file', workbookBlob, 'current-workbook.xlsx');
  
  const response = await fetch('你的API接口地址', {
    method: 'POST',
    body: formData
  });

  response.ok ? console.log('工作簿上传成功') : console.error('上传出错');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:18:16