如何将图片插入excel单元格?

时间:2012-06-19 21:31:58

标签: c# .net excel cell image

我的任务是将图片从URL放入excel工作表中的某个单元格。我正在使用NetOffice和C#来做到这一点。

我的主要问题是我无法找到将图片准确插入单元格的方法。当我使用Sheet.Shapes.AddPicture()时,我必须计算坐标放置图片的位置。当然,我没有问题(我创建了某种解决方法),但是,我想问一下我解决这个问题的方法是否正确,或者是否有其他方法可以将图像插入到单元格中。

以下是我的解决方法:

var floatLeft = FloatLeftPixelsCalculation(rowNumber);
var floatTop = FloatTopPixelsCalculation(rowNumber);
Worksheet.Shapes.AddPicture(urlCellValue, MsoTriState.msoFalse, MsoTriState.msoTrue, floatLeft, floatTop, PictureWidth, PictureHeight);

public float FloatTopPixelsCalculation(int rowNumber)
        {
            float floatTop = 0;
            for (var rNumber = 1; rNumber < rowNumber; rNumber++)
            {
                var cellHeight = Convert.ToSingle(Worksheet.Cells[rNumber, ColumnIndex].RowHeight);
                floatTop = floatTop + cellHeight;
            }

            return floatTop;
        }

        public float FloatLeftPixelsCalculation(int rowNumber)
        {
            float floatLeft = 0;
            for (var columnNumber = 1; columnNumber < ColumnIndex; columnNumber++)
            {
                var cellWidth = Convert.ToSingle(Worksheet.Cells[rowNumber, columnNumber].ColumnWidth);
                floatLeft = floatLeft + cellWidth;
            }

            return floatLeft;
        }

1 个答案:

答案 0 :(得分:1)

尽管道格·格兰西(Doug Glancy)表示Excel不认为图片是&#34;内部&#34;对于单元格,图片可以与特定单元格关联,并且如果正确放置则将直观地行动。

例如,假设您有一份房屋清单。列A-Y具有关于房屋的各种信息,列Z具有房屋的图片。如果图片与正确的单元格正确关联,则在排序,剪切,复制,粘贴范围时,图片的行为与您期望的一样。

为了让Excel正确操作房屋,他们必须符合两个标准:

  1. 图片必须完全位于单元格内部。使用上面的代码,首先放置图片,然后将单元格的行高和列宽调整为至少等于图片的高度和宽度。

  2. shape.Placement属性必须设置为xlMove或xlMoveAndSize。从MS文档中,placement属性可以是以下之一: xlFreeFloating (3) Object is free floating. xlMove (2) Object is moved with the cells. xlMoveAndSize (1) Object is moved and sized with the cells.

  3. 如果图片完全位于单元格内部且.Placement设置为xlMovexlMoveAndSize,则只要容器单元格移动,图片就会随之移动。如果.Placement设置为xlMoveandSize,则无论何时更改单元格宽度或高度,图片都会展开或收缩。这可能很有用,因为它可以确保图片保持在单元格的边界内。如果您使用xlMoveandSize,则可能还需要考虑设置ShapeRange.LockAspectRatio = msoTrue以防止在调整列宽或行高时图片变形。

    所以是的,弗吉尼亚,你可以在一个单元格中放置一张图片。请务必小心放置。