OpenXML:Excel,提取单元格文本和图像/图片数据

4
我正在编写代码,将Excel文档中的单元格和图像/图片提取到数据库中。
通过此代码,我可以获取不是图片的单元格值。
然而,Cell对象中没有图片。请注意,每行都以图像开头。
A1- Picture
B1- Text
C1- Text and so on. 

如何从“A”列获取图片?
        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());
                }
            }
        }
1个回答

6
    [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);

    }

这个要用哪个命名空间?WorkbookPart?TwoCellAnchor? - Amna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接