如何在ClosedXML中的合并单元格区域内居中放置图像

时间:2018-12-03 06:00:43

标签: c# excel model-view-controller closedxml

我正在使用 ClosedXML https://github.com/ClosedXML/ClosedXML)在我的C#MVC控制器中创建Excel文件。根据{{​​3}}中的文档,我在单元格中插入了一个图像,并将该单元格与右侧的单元格合并。我的代码如下:

用于添加图片

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();

但是图像位于单元格的左上角。我找不到任何说明如何在单元格范围内将图像居中的Web资源。任何人都可以帮助我。

2 个答案:

答案 0 :(得分: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 :(得分:-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);