使用Office Scripts获取Excel图片行列位置并生成Base64字符串
Office Scripts实现Excel图片转Base64并匹配行号方案
核心实现逻辑
遍历工作表内所有图片形状,获取其所在行号完成重命名,将图片转为Base64字符串后写入同行的base64 text列,最终可直接读取该列数据对接外部数据源。
完整代码
function main(workbook: ExcelScript.Workbook) { // 获取当前活动工作表(可替换为指定工作表名称,如workbook.getWorksheet("Sheet1")) const worksheet = workbook.getActiveWorksheet(); const shapes = worksheet.getShapes(); // 定位"base64 text"列的索引(假设表头在第一行) const headerRange = worksheet.getRange("1:1"); const base64ColumnIndex = headerRange.find("base64 text", {completeMatch: true, matchCase: false})?.getColumnIndex(); if (!base64ColumnIndex) { console.error("未找到'base64 text'列,请检查表头"); return; } // 处理所有图片形状 shapes.forEach(shape => { // 仅处理图片类型的形状 if (shape.getType() === ExcelScript.ShapeType.picture) { // 获取图片所在行号(Excel行号从1开始,getRowIndex返回0基索引,需+1) const rowNumber = shape.getTopLeftCell().getRowIndex() + 1; // 重命名图片 shape.setName(`Picture ${rowNumber}`); // 生成Base64字符串并写入对应单元格 const base64Str = shape.getImageAsBase64(); const targetCell = worksheet.getCell(rowNumber - 1, base64ColumnIndex); targetCell.setValue(base64Str); } }); console.log("图片重命名及Base64转换完成"); }
关键细节说明
- 行号获取:通过
shape.getTopLeftCell().getRowIndex()获取图片左上角单元格的0基索引,加1后得到Excel界面显示的行号。 - 图片筛选:用
shape.getType()判断形状类型,只处理图片,避免误操作文本框、图表等其他形状。 - Base64转换:直接调用Office Scripts内置方法
shape.getImageAsBase64()生成字符串,无需额外处理图片文件流。 - 列定位:通过表头查找
base64 text列的索引,无需硬编码列号,适配不同表格结构。
对接外部数据源
完成Base64写入后,可通过以下方式对接SharePoint、SQL Server等:
- SharePoint:读取
base64 text列数据,通过Power Automate或Office Scripts同步到SharePoint列表的对应字段。 - SQL Server:将Base64字符串作为文本类型数据,通过Power Automate或ADO.NET批量插入到SQL Server表中。
内容的提问来源于stack exchange,提问作者Ramesh Mukka
相关产品推荐
相关产品推荐

