2

重複の可能性:
セルに画像があるかどうかを確認する方法は?
OpenXML:Excel、セルテキストと画像/画像データを抽出

それぞれがセルA1、A2、A3、A4にある4つの画像を含むExcelドキュメントがあります

ワークシート内のすべての画像を反復処理できますが、たとえば「A1」と「A2」の画像を取得するには、この関数を編集できる必要があります。

    [Test]
    public void IterateThruImages()
    {
        WorkbookPart wbPart = document.WorkbookPart;
        var workSheet = wbPart.WorksheetParts.FirstOrDefault();

        foreach(ImagePart i in workSheet.DrawingsPart.GetPartsOfType<ImagePart>())
        {
            Stream stream = i.GetStream();
            long length = stream.Length;
            byte[] byteStream = new byte[length];
            stream.Read(byteStream, 0, (int)length);

            var imageAsString = Convert.ToBase64String(byteStream);
        }
    }
4

1 に答える 1

2

秘訣は、画像の関係ID「rId」を取得することです。問題の行/列のTwoCellAnchorを取得することでそれを取得します。次に、埋め込みを取得します。それを使用して画像を取得します。

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

    }
于 2012-08-16T21:33:59.700 に答える