Apache POI生成的文本框样式与Excel原生文本框不符该如何调整

POI默认生成的XSSF文本框自带白色填充、默认粗边框,和Excel原生插入的文本框默认样式不一致,你可以在设置文本的代码后补充样式配置,修改后的完整代码如下:
import org.apache.poi.sl.usermodel.LineStyle; import org.apache.poi.xssf.usermodel.*; import org.openxmlformats.schemas.drawingml.x2006.main.CTShape; import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody; import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBodyProperties; import org.openxmlformats.schemas.drawingml.x2006.main.STTextAnchoringType; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public void TestXSSFPatriarch(String fileName, String richText) { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet("hssf"); XSSFDrawing xssfDrawing = sheet.createDrawingPatriarch(); XSSFTextBox xssfTextBox = xssfDrawing.createTextbox( new XSSFClientAnchor(0, 0, 25, 50, (short) 0, 0, (short) 25, 50)); xssfTextBox.setText(new XSSFRichTextString(richText)); // 新增以下样式配置,匹配Excel原生文本框默认效果 // 1. 关闭默认白色填充 xssfTextBox.setNoFill(true); // 2. 设置边框为1pt黑色实线,和原生默认一致 xssfTextBox.setLineWidth(1); xssfTextBox.setLineStyle(LineStyle.SOLID); xssfTextBox.setLineStyleColor(0, 0, 0); // 3. 调整文本内边距、垂直对齐规则匹配原生表现 CTShape ctShape = xssfTextBox.getCTShape(); CTTextBody ctTextBody = ctShape.getTxBody(); CTTextBodyProperties bodyPr = ctTextBody.getBodyPr(); // 内边距单位为EMU,1pt = 12700 EMU,以下是Excel原生默认的内边距参数 bodyPr.setLIns(91440); // 左内边距7.2pt bodyPr.setRIns(91440); // 右内边距7.2pt bodyPr.setTIns(45720); // 上内边距3.6pt bodyPr.setBIns(45720); // 下内边距3.6pt // 文本垂直靠上对齐 bodyPr.setAnchor(STTextAnchoringType.TOP); try (OutputStream fileOut = new FileOutputStream(fileName)) { workbook.write(fileOut); System.out.println("Success"); } catch (IOException e) { e.printStackTrace(); } }
如果你需要完全去掉边框,只要把边框设置的三行代码替换为xssfTextBox.setLineStyle(LineStyle.NONE)即可。
内容的提问来源于stack exchange,提问作者Sam Si
相关产品推荐
相关产品推荐

