Как центрировать изображение внутри объединенного диапазона ячеек в ClosedXML - PullRequest
0 голосов
/ 03 декабря 2018

Я использую ClosedXML (https://github.com/ClosedXML/ClosedXML) для создания файла excel в моем контроллере C # MVC. Согласно документации в 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();

НоИзображение лежит в левом верхнем углу ячейки. Я не могу найти веб-источник, объясняющий, как центрировать изображение в диапазоне ячеек. Кто-нибудь, пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Вы должны переместить свое изображение со смещением от ячейки.Чтобы сделать это, вы должны рассчитать это смещение.Ширина столбца возвращается в точке (не в пикселях).Вы должны преобразовать его в пиксель, чтобы сравнить с шириной пикселя изображения.

Так что вы можете сделать:

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));
0 голосов
/ 03 декабря 2018

Вам необходимо выполнить некоторые ручные вычисления на основе размера и размера изображения.

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