我正在使用ClosedXML在C#.NET(VS 2017)中进行编程。我有一个这样的Excel文件:
foo
我可以获取所有文本和数字单元格,但是当我想获取图像的值(例如B2)时,C#无法返回空字符串:(...
如何从文件中获取图像(图片)?
我读过有关将图像添加到文件的信息,但我想获取而不是添加。
答案 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里面。 非常感谢!