C#如何读取Excel文件并将行内附带的图片转换为Base64
你可以通过EPPlus库实现该需求,具体操作如下:
1 环境准备
- 首先通过NuGet安装EPPlus 4.5.3.3版本,这是该库最后一个MIT开源许可版本,无需商业授权即可免费使用。
2 实现代码
using System; using System.IO; using OfficeOpenXml; using OfficeOpenXml.Drawing; class ExcelImageToBase64 { static void Main() { // 替换为你的f1.xlsx实际存放路径 string excelPath = @"C:\xxx\f1.xlsx"; FileInfo excelFile = new FileInfo(excelPath); using (ExcelPackage package = new ExcelPackage(excelFile)) { // 读取第一个工作表,可根据实际情况调整索引或指定工作表名称 ExcelWorksheet worksheet = package.Workbook.Worksheets[0]; // 遍历工作表内所有图片资源 foreach (var drawing in worksheet.Drawings) { if (drawing is ExcelPicture excelPic) { // 获取图片左上角所在的行号,匹配对应行的B列名称 int imageRow = excelPic.TopLeftCell.Row; string imageName = worksheet.Cells[imageRow, 2].Text.Trim(); // 图片转字节数组 byte[] imageBytes; using (var ms = new MemoryStream()) { excelPic.Image.Save(ms, excelPic.ImageFormat); imageBytes = ms.ToArray(); } // 转Base64格式 string base64Result = Convert.ToBase64String(imageBytes); // 测试输出,可根据需求将结果存入数据库/文件等 Console.WriteLine($"图片名称:{imageName},Base64长度:{base64Result.Length}"); // 如需生成前端可直接使用的Base64资源链接,添加对应前缀即可: // string base64Url = $"data:image/{excelPic.ImageFormat.ToString().ToLower()};base64,{base64Result}"; } } } } }
3 注意事项
- 如果你使用EPPlus 5及以上版本,需要在初始化
ExcelPackage前添加代码ExcelPackage.LicenseContext = LicenseContext.NonCommercial;,且仅非商业场景可免费使用。 - 如果Excel内存在跨多行的图片,自行调整
TopLeftCell.Row的取值逻辑匹配实际排版即可。
内容的提问来源于stack exchange,提问作者mn221
相关产品推荐
相关产品推荐

