C# 如何使用EPPlus从Excel文件(xlsx)获取/读取图片

C# 如何使用EPPlus从Excel文件(xlsx)获取/读取图片,c#,epplus,C#,Epplus,假设我有一张名为sheet1的工作表,其中包含一张名为pic_001的图片。如何将此图片作为System.Drawing.Image对象获取。所有xlsx文件实际上都是zip文件。您可以将.xlsx扩展名复制/重命名为.zip,并自己导航文件夹层次结构。导航到xl/media以查看您的图像。当然还有更有效的方法,但这是一个快速而肮脏的解决方案,可以完成工作。好的,我找到了如何: public static Image GetImage(string sheetname, ExcelPackage

假设我有一张名为
sheet1
的工作表,其中包含一张名为
pic_001
的图片。如何将此图片作为
System.Drawing.Image
对象获取。

所有xlsx文件实际上都是zip文件。您可以将.xlsx扩展名复制/重命名为.zip,并自己导航文件夹层次结构。导航到xl/media以查看您的图像。当然还有更有效的方法,但这是一个快速而肮脏的解决方案,可以完成工作。

好的,我找到了如何:

public static Image GetImage(string sheetname, ExcelPackage excelFile)
    {
      var sheet = excelFile.Workbook.Worksheets[sheetname];
      var pic = sheet.Drawings["pic_001"] as ExcelPicture;
      return pic.Image;
    }

当我在寻找myslef使用EPplus从excel工作表中提取图像时,偶然发现了这一点。我的要求是获得相应的行/列,同时我希望将图像与我从中读取的行相关联


var workbook = xlPackage.Workbook;
//You can resolve it by worksheet name if you using multiple sheet
ExcelWorksheet ws = workbook.Worksheets[0];
//Create a lookup of drawings per sheet
var lkDrawings = ws.Drawings.ToLookup(x => $"{ x.From.Row}_{x.From.Column}");


//now you can use this lookup while iterating your cells and save it as image. 
//You can look at example of iterating epplus cells 
//or ping me if you need more details on that.

 var lookUpKey = $"{rowCounter}_{col}";
 if(lkDrawings.Contains(lookUpKey))
 {
    ExcelPicture image = lkDrawings[lookUpKey].ToList()[0] as ExcelPicture;

    image.Image.Save($"{rowCounter}_{col}.png");
 }


如果我有许多带有许多图片的工作表,这将不起作用,包中的图片名称与工作表中的图片/绘图名称不同。我更喜欢直接访问图像,而不是提取归档文件和解析xml文件以找到正确的图像。如果我有一张工作表,其中每行都有一个包含图像的单元格,我该如何使用它?这是一个老问题,我不再使用此工具,我可以建议您做的是循环
图纸中的项目
,并检查是否可以将其转换为
ExcelPicture
。我希望这有帮助。好的,非常感谢。我试过了,但还是被判无效。我希望有人看到这个评论并帮助我