OpenXML的:Excel中,细胞提取文本和图像/数据图片 [英] OpenXML: Excel, extracting Cell text and Image/Picture data
本文介绍了OpenXML的:Excel中,细胞提取文本和图像/数据图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我写的代码从一个Excel文档细胞中的细胞和图片/图像中提取到数据库中。
有了这个代码,我可以得到单元格的值是不是图片
然而,在Cell对象没有在一个图像的。请注意,每个行用图像开始。
A1-图片
B1-文本
C1-文本等。
我如何从A柱获得图像?
WorkbookPart wbPart = document.WorkbookPart;
VAR工作表= wbPart.WorksheetParts.FirstOrDefault();
的foreach(在workSheet.Worksheet.Descendants< R行;行>())
{
//只注有科拉姆B,C。不是A作为具有图像?
的foreach(在r.ChildElements小区C)
{
的foreach(对象o在c.ChildElements)
{
Console.WriteLine(c.CellReference + + o.ToString());
}
}
}
解决方案
[测试]
公共无效IterateThruImages()
{
WorkbookPart wbPart = document.WorkbookPart;
VAR工作表= wbPart.WorksheetParts.FirstOrDefault();
的foreach(ImagePart我workSheet.DrawingsPart.ImageParts)
{
VAR摆脱= workSheet.DrawingsPart.GetIdOfPart(I)
流流= i.GetStream();
长度长= stream.Length;
字节[]字节流=新的字节[长度]
stream.Read(字节流,0,(int)的长度);
VAR imageAsString = Convert.ToBase64String(字节流);
Console.WriteLine(以下简称摆脱这个形象是'{0}',去掉);
}
}
[测试]
公共无效GetImageRelationshipIdAndImageOfThatId()
{
串排=1;
串山口=0;
WorkbookPart wbPart = document.WorkbookPart;
VAR工作表= wbPart.WorksheetParts.FirstOrDefault();
TwoCellAnchor cellHoldingPicture = workSheet.DrawingsPart.WorksheetDrawing.OfType< TwoCellAnchor>()
。凡(C => c.FromMarker.RowId.Text ==行和放大器;和C。 FromMarker.ColumnId.Text == COL).FirstOrDefault();
VAR图片= cellHoldingPicture.OfType< DocumentFormat.OpenXml.Drawing.Spreadsheet.Picture>()FirstOrDefault()。
串rIdofPicture = picture.BlipFill.Blip.Embed;
Console.WriteLine(以下简称摆脱这种锚的[{0},{1}]图片是{2}行,列,rIdofPicture);
ImagePart imageInThisCell =(ImagePart)workSheet.DrawingsPart.GetPartById(rIdofPicture);
}
I am writing code to extract the cells and pictures/images in cells from an Excel doc into a database.
With this code I can get the cell values that are not Pictures.
However, the Cell object doesn't have a picture it in. Note that every row starts with an image.
A1- Picture
B1- Text
C1- Text and so on.
How do I get the image from the "A" column?
WorkbookPart wbPart = document.WorkbookPart;
var workSheet = wbPart.WorksheetParts.FirstOrDefault();
foreach (Row r in workSheet.Worksheet.Descendants<Row>())
{
//Note only has Colum B,C. Not A as A has an image???
foreach(Cell c in r.ChildElements)
{
foreach(object o in c.ChildElements)
{
Console.WriteLine(c.CellReference + " " + o.ToString());
}
}
}
解决方案
[Test]
public void IterateThruImages()
{
WorkbookPart wbPart = document.WorkbookPart;
var workSheet = wbPart.WorksheetParts.FirstOrDefault();
foreach (ImagePart i in workSheet.DrawingsPart.ImageParts)
{
var rId = workSheet.DrawingsPart.GetIdOfPart(i);
Stream stream = i.GetStream();
long length = stream.Length;
byte[] byteStream = new byte[length];
stream.Read(byteStream, 0, (int)length);
var imageAsString = Convert.ToBase64String(byteStream);
Console.WriteLine("The rId of this Image is '{0}'",rId);
}
}
[Test]
public void GetImageRelationshipIdAndImageOfThatId()
{
string row = "1";
string col = "0";
WorkbookPart wbPart = document.WorkbookPart;
var workSheet = wbPart.WorksheetParts.FirstOrDefault();
TwoCellAnchor cellHoldingPicture = workSheet.DrawingsPart.WorksheetDrawing.OfType<TwoCellAnchor>()
.Where(c => c.FromMarker.RowId.Text == row && c.FromMarker.ColumnId.Text == col).FirstOrDefault();
var picture = cellHoldingPicture.OfType<DocumentFormat.OpenXml.Drawing.Spreadsheet.Picture>().FirstOrDefault();
string rIdofPicture = picture.BlipFill.Blip.Embed;
Console.WriteLine("The rID of this Anchor's [{0},{1}] Picture is '{2}'" ,row,col, rIdofPicture);
ImagePart imageInThisCell = (ImagePart)workSheet.DrawingsPart.GetPartById(rIdofPicture);
}
这篇关于OpenXML的:Excel中,细胞提取文本和图像/数据图片的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文