c# - 如何将图片插入到excel单元格中?

标签 c# .net excel cell image

我的任务是将 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;
        }

最佳答案

尽管 Doug Glancy 正确地指出 Excel 不会将图片视为单元格的“内部”,但图片可以关联 到特定的单元格,并且如果放置正确,图片将以直观的方式运行。

例如,假设您有一份房屋 list 。 A-Y 列有关于房子的各种信息,Z 列有房子的图片。如果图片与正确的单元格正确关联,那么当您排序、剪切、复制、粘贴范围时,图片会按照您预期的方式运行。

为了让 Excel 正确处理房屋,它们必须满足两个条件:

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

  2. shape.Placement 属性必须设置为 xlMove 或 xlMoveAndSize。在 MS 文档中,放置属性可以是以下之一: xlFreeFloating (3) 对象自由 float 。 xlMove (2) 对象随单元移动。 xlMoveAndSize (1) 对象随单元移动并调整大小。

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

是的,Virginia,您可以在单元格中放置图片。请务必小心放置。

关于c# - 如何将图片插入到excel单元格中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11109759/

相关文章:

c# - 为什么 Array.IndexOf 不像 List<T> 那样检查 IEquatable?

.net - (any == System.DBNull.Value) vs (any is System.DBNull)

excel - 运行时错误 '1004' : Select method of Range Class failed VBA 2003

c# - 以编程方式锁定/禁用功能区栏上的多个 UI 控件的更好方法

c# - 如何获取带有测试结果的标准 xUnit v2 XML 文件

c# - 如何使用 void 方法而不是 bool() 实现提前返回(或覆盖返回)

c# - 如何删除字符串开头或结尾的所有空格?

.net - MDX 查询生成器实现

c# - 领域驱动设计 API 问题

vba - 如果另一个单元格等于某个值,则使用 VBA 更改一个单元格的值