zmo*_*kus 5 .net c# excel image cell
我的任务是将图片从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;
}
Run Code Online (Sandbox Code Playgroud)
小智 2
尽管 Doug Glancy 正确地指出 Excel 不认为图片位于单元格“内部”,但图片可以与特定单元格 关联,并且如果放置正确,图片将直观地发挥作用。
例如,假设您有一份房屋清单。AY 列有关于房子的各种信息,Z 列有房子的图片。如果图片与正确的单元格正确关联,那么当您对范围进行排序、剪切、复制、粘贴时,图片的行为方式将符合您的预期。
为了让 Excel 正确操纵房屋,它们必须满足两个标准:
图片必须完全位于单元格内部。使用上面的代码,首先按原样放置图片,然后调整单元格的行高和列宽,使其至少等于图片的高度和宽度。
shape.Placement 属性必须设置为 xlMove 或 xlMoveAndSize。根据 MS 文档,放置属性可以是以下之一:
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设置为xlMove或xlMoveAndSize,则每当容器单元格移动时,图片也会随之移动。如果.Placement设置为xlMoveandSize,则每当单元格宽度或高度更改时,图片都会扩展或收缩。这很有用,因为它可以确保图片保持在单元格的边界内。如果您使用xlMoveandSize,您可能还需要考虑设置ShapeRange.LockAspectRatio = msoTrue以防止在调整列宽或行高时图片扭曲。
所以,是的,维吉尼亚,你可以将图片放入单元格中。只要确保小心放置即可。