如何通过 Java POI 将多个图像导入 Excel
How to import multiple image into Excel by Java POI
有什么方法可以将多图文字导入到excel的一个单元格中?
我正在使用 Java 个兴趣点。
这是
my expected result
图片不在 个单元格中Excel。它们悬停在单元格上方的绘图层中,并且仅锚定在单元格上。所以你需要计算锚点位置。这需要以下知识:
A ClientAnchor 具有以下属性:
Col1 = 形状的左上边缘被锚定在该列的左边缘
第 1 行 = 形状的左上边缘被锚定在该行的上边缘
Col2 = 形状的右下边缘被锚定在该列的左边缘
第 2 行 = 形状的右下边缘被锚定在该行的上边缘
Dx1 = delta x 将形状的左上边缘从 Col1 的左边缘移开
Dy1 = delta y 将形状的左上边缘从 Row1 的上边缘移开
Dx2 = delta x 将形状的右下边缘从 Col2 的左边缘移开
Dy2 = delta y 将形状的右下边缘从 Row2 的上边缘移开
注意,dx和dy的计量单位是EMU(英制单位)。 Units 可以正确处理那些奇怪的测量单位。
另外我们需要一些数学知识。
从 Apache Poi, insert 2 images in one cell with differend anchor properites 的示例中获取方法 void addImage
并像这样使用它:
...
public static void main(String args[]) throws Exception {
workbook = new XSSFWorkbook();
sheet = workbook.createSheet();
int gapTopPx = 10;
int gapLeftPx = 20;
int gapBetweenPx = 30;
int gapBelowPx = 40;
sheet.setColumnWidth(0, 30*256);
int columnWidthPx = Math.round(sheet.getColumnWidthInPixels(0));
sheet.createRow(0).setHeightInPoints((float)Units.pixelToPoints(gapTopPx+pictureHeightPx*2+gapBetweenPx+gapBelowPx));
sheet.getRow(0).createCell(0).setCellValue("Two pictures in A1");
addImage(0, 0, 0, 0, /*all fits in cell A1*/
/*Dx1 = gap left and Dy1 = gap top*/
Units.pixelToEMU(gapLeftPx), Units.pixelToEMU(gapTopPx),
/*Dx2 is gap left plus picture's width and Dy2 is gap top plus first picture's height*/
Units.pixelToEMU(gapLeftPx + pictureWidthPx), Units.pixelToEMU(gapTopPx + pictureHeightPx),
pictureFileNames[0], pictureTypes[0], ClientAnchor.AnchorType.MOVE_AND_RESIZE);
addImage(0, 0, 0, 0, /*all fits in cell A1*/
/*Dx1 = gap left and Dy1 = gap top plus first picture's height plus gap between pictures*/
Units.pixelToEMU(gapLeftPx), Units.pixelToEMU(gapTopPx + pictureHeightPx + gapBetweenPx),
/*Dx2 is gapleft plus picture's width and Dy2 is gap top plus first picture's height plus gab betweeen pictures plus second picture's height*/
Units.pixelToEMU(gapLeftPx + pictureWidthPx), Units.pixelToEMU(gapTopPx + pictureHeightPx + gapBetweenPx + pictureHeightPx),
pictureFileNames[1], pictureTypes[1], ClientAnchor.AnchorType.MOVE_AND_RESIZE);
FileOutputStream fos = new FileOutputStream(excelPath);
workbook.write(fos);
fos.close();
workbook.close();
}
...
这导致:
有什么方法可以将多图文字导入到excel的一个单元格中? 我正在使用 Java 个兴趣点。 这是 my expected result
图片不在 个单元格中Excel。它们悬停在单元格上方的绘图层中,并且仅锚定在单元格上。所以你需要计算锚点位置。这需要以下知识:
A ClientAnchor 具有以下属性:
Col1 = 形状的左上边缘被锚定在该列的左边缘
第 1 行 = 形状的左上边缘被锚定在该行的上边缘
Col2 = 形状的右下边缘被锚定在该列的左边缘
第 2 行 = 形状的右下边缘被锚定在该行的上边缘
Dx1 = delta x 将形状的左上边缘从 Col1 的左边缘移开
Dy1 = delta y 将形状的左上边缘从 Row1 的上边缘移开
Dx2 = delta x 将形状的右下边缘从 Col2 的左边缘移开
Dy2 = delta y 将形状的右下边缘从 Row2 的上边缘移开
注意,dx和dy的计量单位是EMU(英制单位)。 Units 可以正确处理那些奇怪的测量单位。
另外我们需要一些数学知识。
从 Apache Poi, insert 2 images in one cell with differend anchor properites 的示例中获取方法 void addImage
并像这样使用它:
...
public static void main(String args[]) throws Exception {
workbook = new XSSFWorkbook();
sheet = workbook.createSheet();
int gapTopPx = 10;
int gapLeftPx = 20;
int gapBetweenPx = 30;
int gapBelowPx = 40;
sheet.setColumnWidth(0, 30*256);
int columnWidthPx = Math.round(sheet.getColumnWidthInPixels(0));
sheet.createRow(0).setHeightInPoints((float)Units.pixelToPoints(gapTopPx+pictureHeightPx*2+gapBetweenPx+gapBelowPx));
sheet.getRow(0).createCell(0).setCellValue("Two pictures in A1");
addImage(0, 0, 0, 0, /*all fits in cell A1*/
/*Dx1 = gap left and Dy1 = gap top*/
Units.pixelToEMU(gapLeftPx), Units.pixelToEMU(gapTopPx),
/*Dx2 is gap left plus picture's width and Dy2 is gap top plus first picture's height*/
Units.pixelToEMU(gapLeftPx + pictureWidthPx), Units.pixelToEMU(gapTopPx + pictureHeightPx),
pictureFileNames[0], pictureTypes[0], ClientAnchor.AnchorType.MOVE_AND_RESIZE);
addImage(0, 0, 0, 0, /*all fits in cell A1*/
/*Dx1 = gap left and Dy1 = gap top plus first picture's height plus gap between pictures*/
Units.pixelToEMU(gapLeftPx), Units.pixelToEMU(gapTopPx + pictureHeightPx + gapBetweenPx),
/*Dx2 is gapleft plus picture's width and Dy2 is gap top plus first picture's height plus gab betweeen pictures plus second picture's height*/
Units.pixelToEMU(gapLeftPx + pictureWidthPx), Units.pixelToEMU(gapTopPx + pictureHeightPx + gapBetweenPx + pictureHeightPx),
pictureFileNames[1], pictureTypes[1], ClientAnchor.AnchorType.MOVE_AND_RESIZE);
FileOutputStream fos = new FileOutputStream(excelPath);
workbook.write(fos);
fos.close();
workbook.close();
}
...
这导致: