ClosedXML 从特定单元格获取图像/图片

ClosedXML get image / picture from specific cell

我正在使用 ClosedXML 在 C#.NET (VS 2017) 中编程。我有一个这样的 Excel 文件:

 |  A   |    B    |   C   |   D 

1| Code |  Image  | Price | Others

2| PX1  | [IMAGE] | [=10=].25 | Text 

3| XYZ  | [IMAGE] | [=10=].58 | Descp

我可以获取所有文本和数字单元格,但是当我想获取图像的值时(例如 B2)我不能,C# returns 一个空字符串:(...

如何从文件中获取 image/s(图片)?

我读到有关向文件添加图像的信息,但是,我想获取它,而不是添加。

图像(或图片)不是保存在单元格中,而是保存在工作表中。您可以使用 worksheet.Pictures 获取工作表中的所有图片,使用 worksheet.Pictures.Picture(name).

按名称获取特定图片

如果您需要单元格的图片,您可以构建一个包含单元格地址和图片的字典:

Dictionary<IXLAddress, ClosedXML.Excel.Drawings.IXLPicture> PicturesByCellAddress
    = new Dictionary<IXLAddress, ClosedXML.Excel.Drawings.IXLPicture>();
foreach (ClosedXML.Excel.Drawings.IXLPicture pic in worksheet.Pictures)
{
    PicturesByCellAddress.Add(pic.TopLeftCellAddress, pic);
}

好吧,感谢 Raidri,我可以获得工作表的所有图像,但是,如果有人想要获取行图像,我编辑了代码:

Dictionary<int, ClosedXML.Excel.Drawings.IXLPicture> PicturesByCellAddress
    = new Dictionary<int, ClosedXML.Excel.Drawings.IXLPicture>();
                    foreach (ClosedXML.Excel.Drawings.IXLPicture pic in hoja.Pictures)
                    {
                        try { PicturesByCellAddress.Add(pic.TopLeftCellAddress.RowNumber, pic); }
                        catch { }
                    }

然后,当我为每一行获取信息时,只使用行数(因为我知道列数),但是,如果您更改 Excel 中的某些单元格,ClosedXML 由图片的名称,有时从最后一行开始,为此,我需要行号。

最后,转换为图片:

ClosedXML.Excel.Drawings.IXLPicture foto;
Image imagen;
try {
    foto = PicturesByCellAddress[i];
    imagen = Image.FromStream(foto.ImageStream);
}
catch { }

那个变量 i,嗯,那个代码在 for 里面。 非常感谢!