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

时间:2018-10-19 00:05:24

标签: c# .net excel visual-studio-2017 closedxml

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

foo

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

如何从文件中获取图像(图片)?

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

2 个答案:

答案 0 :(得分:1)

图像(或图片)不保存在单元格中,而是保存在工作表中。您可以使用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);
}

答案 1 :(得分:0)

好吧,多亏了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里面。 非常感谢!