如何将图像置于ClosedXML中的合并单元格范围内

问题描述 投票:1回答:2

我使用ClosedXML(https://github.com/ClosedXML/ClosedXML)在我的C#MVC控制器中创建一个excel文件。根据https://github.com/closedxml/closedxml/wiki/How-can-I-insert-an-image中的文档,我在单元格中插入了一个图像,并将该单元格与右侧的单元格合并。我的代码如下:

用于添加图像

var imagePath = @"c:\myFolder\image.jpg";
var image = MyWorkSheet.AddPicture(imagePath )                                               .MoveTo((MyWorkSheet.Cell(3,1).Address))                                               .Scale(0.2);
image.Width = 50;
image.Height = 50;

用于合并细胞

 MyWorkSheet.Range(MyWorkSheet.Cell(3,1).Address, MyWorkSheet.Cell(3, 3).Address).Merge();

但是图像位于细胞的左上角。我找不到任何网络资源来解释如何将图像置于细胞范围中心。有人请帮助我。

c# excel model-view-controller closedxml
2个回答
0
投票

您必须使用与单元格的偏移量移动图像。为此,您必须计算该偏移量。列宽以点(不在像素中)返回。您必须将其转换为像素才能与图像像素宽度进行比较。

所以你可以这样做:

int iColumnWidth = (MyWorkSheet.Column(1).Width - 1) * 7 + 12; // To convert column width in pixel unit.
int xOffset = (iColumnWidth - image.Width) / 2;
int yOffset = 0;
image.MoveTo(MyWorkSheet.Cell(3,1), New Point(xOffset, yOffset));

-1
投票

您需要根据图像和单元格大小进行一些手动计算。

Workbook wb = new Workbook();
Worksheet sheet = wb.Worksheets[0];


sheet.Range["A1"].Text = "Align Picture Within A Cell:";
sheet.Range["A1"].Style.VerticalAlignment = VerticalAlignType.Top;


string picPath = @"C:\Users\Administrator\Desktop\scenery.jpg";
ExcelPicture picture = sheet.Pictures.Add(1, 1, picPath);

sheet.Columns[0].ColumnWidth = 50;
sheet.Rows[0].RowHeight = 150;

picture.LeftColumnOffset =100;
picture.TopRowOffset = 25;


wb.SaveToFile("AlignPicture.xlsx", ExcelVersion.Version2013);
© www.soinside.com 2019 - 2024. All rights reserved.