如何使用 C# 中的 NPOI 使图像居中?

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

我正在开发一个 .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 的值,但无论我使用哪个值,图像都保持在同一个锅中。

c# excel export-to-excel npoi
1个回答
0
投票

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

        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;

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

© www.soinside.com 2019 - 2024. All rights reserved.