能否使用Excel加载项将工作簿另存为XLSX并直接上传至API?
解决方案
浏览器前端场景
使用ExcelJS库直接生成包含样式、公式的.xlsx工作簿,通过ArrayBuffer构建Blob后,用FormData上传至API,无需本地存储:
- 安装依赖
npm install exceljs
- 核心实现代码
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请求上传:
- 安装依赖
npm install exceljs node-fetch form-data
- 核心实现代码
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
相关产品推荐
相关产品推荐

