excel 如何在C#中使用NPOI将图像居中?

63lcw9qa  于 12个月前  发布在  C#
关注(0)|答案(1)|浏览(233)

我正在开发一个.net6.0项目,我必须使用NPOI库生成.xslx文件,我需要在一个单元格上添加一个中心图像。
首先,我创建一个XSSFWorkbook,添加一个工作表,一行和单元格:

var workbook = new XSSFWorkbook();
var currentWorksheet = workbook.CreateSheet("MyWorksheet");

// Setting default width of my column
currentWorkSheet.SetColumnWidth(0, 600);

// Creating row
var currentRow = currentWorksheet.CreateRow(0);
currentRow.Height = 600;

字符串
现在我有了我的上下文,我想添加一个居中的图像,因此我添加了图像(base64string):

// Converting base64string image in byte[]
var img = Convert.FromBase64String("MyBase64Image");

var pictureIndex = workbook.AddPicture(img, PictureType.PNG);
IDrawing drawing = currentWorkSheet.CreateDrawingPatriarch();

// Defining my image anchor
IClientAnchor anchor = drawing.CreateAnchor(200, 200, 400, 400, 0, 0, 0, 0);
anchor.AnchorType = AnchorType.MoveDontResize;
var picture = drawing.CreatePicture(anchor, pictureIndex);
picture.Resize();

// I want my image doing a specific size so i resize it :
var imageSize = picture.GetImageDimension();
double resizeX = 50.0 / imageSize.Width;
double resizeY = 50.0 / imageSize.Height;
picture.Resize(resizeX, resizeY);


但不管我在

IClientAnchor anchor = drawing.CreateAnchor(200, 200, 400, 400, 0, 0, 0, 0);


(除了最后4个)我的图像粘在我的单元格的左上角。我如何在我的单元格中居中?
我试图修改我的锚的dx1,dx2,dy1,dy2的值,但无论我使用哪个值,图像都留在同一个锅里。

jgovgodb

jgovgodb1#

今天我也遇到了这个问题。我通过定义锚解决了这个问题

Dim anchor As XSSFClientAnchor = New XSSFClientAnchor();
        anchor.Col1 = colIndx;
        anchor.Col2 = colIndx + colCount;
        anchor.Dx1 = 0;
        anchor.Dx2 = anchor.Dx1 + img.Width;
        anchor.Row1 = rowIndx;
        anchor.Row2 = rowIndx + rowCount - 1;
        anchor.Dy1 = 0;
        anchor.Dy2 = anchor.Dy1 + img.Height;

字符串
总是提到在把工作表数据放在一起后最后添加图像,在绘制图像之前必须调整所有行和列的大小。这是我处理了几个小时的问题。

相关问题