我正在开发一个 .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 的值,但无论我使用哪个值,图像都保持在同一个锅中。
今天我也遇到这个问题了。我解决了它定义锚点
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;
总是提到在将图纸数据放在一起之后最后添加图像,在绘制图像之前必须调整所有行和列的大小。这是我处理了几个小时的问题。