我的任务是将图片从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;
}
答案 0 :(得分:1)
尽管道格·格兰西(Doug Glancy)表示Excel不认为图片是&#34;内部&#34;对于单元格,图片可以与特定单元格关联,并且如果正确放置则将直观地行动。
例如,假设您有一份房屋清单。列A-Y具有关于房屋的各种信息,列Z具有房屋的图片。如果图片与正确的单元格正确关联,则在排序,剪切,复制,粘贴范围时,图片的行为与您期望的一样。
为了让Excel正确操作房屋,他们必须符合两个标准:
图片必须完全位于单元格内部。使用上面的代码,首先放置图片,然后将单元格的行高和列宽调整为至少等于图片的高度和宽度。
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
设置为xlMove
或xlMoveAndSize
,则只要容器单元格移动,图片就会随之移动。如果.Placement
设置为xlMoveandSize
,则无论何时更改单元格宽度或高度,图片都会展开或收缩。这可能很有用,因为它可以确保图片保持在单元格的边界内。如果您使用xlMoveandSize
,则可能还需要考虑设置ShapeRange.LockAspectRatio = msoTrue
以防止在调整列宽或行高时图片变形。
所以是的,弗吉尼亚,你可以在一个单元格中放置一张图片。请务必小心放置。