5 Stimmen

OpenXML: Excel, Extrahieren von Zelltext und Bild-/Bilddaten

Ich schreibe Code, um die Zellen und Bilder in Zellen aus einem Excel-Dokument in eine Datenbank zu extrahieren.

Mit diesem Code kann ich die Zellwerte erhalten, die keine Bilder sind.

Das Cell-Objekt hat jedoch kein Bild in sich. Beachten Sie, dass jede Zeile mit einem Bild beginnt.

A1- Picture
B1- Text
C1- Text and so on. 

Wie erhalte ich das Bild aus der Spalte "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());
                }
            }
        }

7voto

Ian Vink Punkte 63460
    [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);

    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X