OpenXML的:Excel中,细胞提取文本和图像/数据图片 [英] OpenXML: Excel, extracting Cell text and Image/Picture data

查看:653
本文介绍了OpenXML的:Excel中,细胞提取文本和图像/数据图片的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我写的代码从一个Excel文档细胞中的细胞和图片/图像中提取到数据库中。



有了这个代码,我可以得到单元格的值是不是图片



然而,在Cell对象没有在一个图像的。请注意,每个行用图像开始。

  A1-图片
B1-文本
C1-文本等。



我如何从A柱获得图像?



  WorkbookPart wbP​​art = 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 wbP​​art = 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 wbP​​art = 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< D​​ocumentFormat.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆