5

我的任务是将 URL 中的图片放入 excel 工作表中的某个单元格中。我正在使用带有 C# 的 NetOffice 来执行此操作。

不过,我的主要问题是我找不到将图片准确插入单元格的方法。当我使用 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;
        }
4

1 回答 1

1

尽管 Doug Glancy 正确地指出 Excel 不认为图片位于单元格“内部”,但图片可以特定单元格相关联,并且如果放置正确,图片将直观地起作用。

例如,假设您有一份房屋清单。AY 列有关于房子的各种信息,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.

如果图片完全在单元格内并.Placement设置为xlMovexlMoveAndSize,那么每当容器单元格移动时,图片都会随之移动。如果.Placement设置为xlMoveandSize,则每当单元格宽度或高度发生更改时,图片都会扩展或收缩。这会很有帮助,因为它可以确保图片保持在单元格的边界内。如果您使用xlMoveandSize,您可能还需要考虑设置ShapeRange.LockAspectRatio = msoTrue以防止在调整列宽或行高时图片失真。

所以是的,弗吉尼亚,你可以在一个单元格中放置一张图片。只要确保你小心地放置它。

于 2015-04-01T20:38:58.340 回答