Вопрос по openxml, excel, c# – OpenXml: определение изображения в ячейке в Excel [дубликаты]

2

Possible Duplicate:
How to check if a cell has a picture?
OpenXML: Excel, extracting Cell text and Image/Picture data

У меня есть документ Excel с 4 изображениями, каждое в ячейке A1, A2, A3, A4

Я могу выполнить итерацию по всем изображениям на листе, но мне нужно иметь возможность редактировать эту функцию, чтобы получить изображение в & quot; A1 & quot; и "А2"; например

    [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);
        }
    }
К сожалению, неправильно закрыть Vore здесь. Сожалею. GSerg
Изображения в Excel никогда не помещаются в & quot; ячейки, но просто "над" их. Проверка местоположения изображения даст вам основную ячейку. В VBA изображения / фигуры имеютTopLeftCell свойство: я не знаком с OpenXml, поэтому не знаю, разоблачено ли это ... Tim Williams

Ваш Ответ

1   ответ
2

Хитрость заключается в том, чтобы получить идентификатор отношения & quot; rId & quot; изображения. Вы получите это, получив 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);

    }

Похожие вопросы