[]
在GcExcel中,您可以通过IShape接口的getTextFrame,根据自己的喜好配置形状的文本和文本样式。
参考以下示例代码配置插入形状的文本和文本样式:
// 配置形状的文本和文本样式
IShape shape = worksheet.getShapes().addShape(AutoShapeType.Rectangle, 40, 40, 100, 100);
shape.getTextFrame().getTextRange().getFont().getColor().setRGB(Color.FromArgb(0, 255, 0));
shape.getTextFrame().getTextRange().getFont().setBold(true);
shape.getTextFrame().getTextRange().getFont().setItalic(true);
shape.getTextFrame().getTextRange().getFont().setSize(20);
shape.getTextFrame().getTextRange().getFont().setStrikethrough(true);
shape.getTextFrame().getTextRange().getParagraphs().add("This is a rectangle shape.");
shape.getTextFrame().getTextRange().getParagraphs().add("My name is Excel.");
shape.getTextFrame().getTextRange().getParagraphs().get(0).getRuns().add("Hello World!");
shape.getTextFrame().getTextRange().getParagraphs().get(0).getRuns().get(0).getFont().setStrikethrough(false);
shape.getTextFrame().getTextRange().getParagraphs().get(0).getRuns().get(0).getFont().setSize(14);
您可以通过IShape接口的setFormula方法为形状设置公式。此方法用于配置引用某个范围的文本或定义的名称的公式。首次为形状设置公式时,该形状会获取引用的第一个单元格的文本和字体样式。一旦形状文本被设置,引用单元格内容的任何更改都会自动更新形状文本的值,但字体样式保持不变。

// 为形状设置指向G8单元格的公式
IShape shapeResult = worksheet.getShapes().addShape(AutoShapeType.Rectangle, worksheet.getRange("B7:D8"));
shapeResult.setFormula("=G8");您可以通过将setFormula方法设置为null来移除形状的引用。移除引用后,形状文本会变为自定义的普通文本,形状内容会获取被移除引用的第一个单元格的文本,且字体样式为默认样式。如果从形状中移除了形状文本,单元格引用将不再对形状文本产生任何影响。
此外,在导出为JSON IO、GcExcel API、PDF、HTML或图像时,您还可以保留引用形状的公式。
要查看该功能的实际效果,请参见设置形状公式演示。
您可以使用setTextAlignment方法将形状中的文本对齐方式设置为左对齐、右对齐、居中对齐、分散对齐和两端对齐。此外,您可以使用setHorizontalAnchor方法将包含文本的文本框位置固定在中心,使用setVerticalAnchor方法将其固定在顶部、中间或底部。
形状中文本的这些不同对齐方式和位置也可以导出到PDF文档中。对齐文本
ITextRange接口中的setTextAlignment方法允许您使用TextAlignmentAnchor枚举设置形状中文本范围或段落的对齐方式。此方法可将文本对齐方式设置为左对齐、右对齐、居中对齐、分散对齐和两端对齐。
参考以下示例代码设置形状中文本范围和段落的对齐方式:
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.getWorksheets().get(0);
// 添加一个形状
IShape shape = worksheet.getShapes().addShape(AutoShapeType.Rectangle, 10, 10, 200, 200);
// 为形状添加文本范围和两个段落
shape.getTextFrame().getTextRange().setText("文本范围对齐");
shape.getTextFrame().getTextRange().getParagraphs().add("左对齐");
shape.getTextFrame().getTextRange().getParagraphs().add("居中对齐");
shape.getTextFrame().getTextRange().getParagraphs().add("右对齐");
// 将文本范围设置为左对齐
shape.getTextFrame().getTextRange().setTextAlignment(TextAlignmentAnchor.Left);
// 将段落设置为居中对齐
shape.getTextFrame().getTextRange().getParagraphs().get(2).setTextAlignment(TextAlignmentAnchor.Center);
// 将段落设置为右对齐
shape.getTextFrame().getTextRange().getParagraphs().get(3).setTextAlignment(TextAlignmentAnchor.Right);
// 将工作簿保存为XLSX和PDF格式
workbook.save("Alignment.xlsx");
workbook.save("Alignment.pdf");
文本框(或文本主体)包含您添加到形状中的文本或段落。ITextFrame接口的setHorizontalAnchor和setVerticalAnchor方法允许您使用HorizontalAnchor和VerticalAnchor枚举设置形状中文本框的水平和垂直锚点。文本框可以水平定位在中心,或垂直定位在顶部、中间或底部。
参考以下示例代码锚定形状中的文本框:
// 创建一个新工作簿
Workbook workbook = new Workbook();
// 获取默认工作表
IWorksheet worksheet = workbook.getWorksheets().get(0);
// 添加一个形状
IShape shape = worksheet.getShapes().addShape(AutoShapeType.Rectangle, 10, 10, 300, 300);
// 为形状添加两个段落
shape.getTextFrame().getTextRange().getParagraphs().add("Document Solutions for Excel");
shape.getTextFrame().getTextRange().getParagraphs().add("Middle Centered");
// 将文本垂直居中
shape.getTextFrame().setVerticalAnchor(VerticalAnchor.AnchorMiddle);
// 将文本水平居中
shape.getTextFrame().setHorizontalAnchor(HorizontalAnchor.Center);
// 保存工作簿
workbook.save("Alignment.xlsx");
workbook.save("Alignment.pdf");
您还可以同时设置文本范围和段落的对齐方式,以及形状中文本框的锚点。参考以下示例代码将段落对齐并锚定在右下角:
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.getWorksheets().get(0);
// 添加一个形状
IShape shape = worksheet.getShapes().addShape(AutoShapeType.Rectangle, 10, 10, 300, 300);
// 为形状添加一个段落
shape.getTextFrame().getTextRange().getParagraphs().add("对齐并锚定在右下角");
// 将文本框垂直锚定在底部
shape.getTextFrame().setVerticalAnchor(VerticalAnchor.AnchorBottom);
// 将段落设置为右对齐
shape.getTextFrame().getTextRange().getParagraphs().get(0).setTextAlignment(TextAlignmentAnchor.Right);
// 将工作簿保存为XLSX和PDF格式
workbook.save("Alignment.xlsx");
workbook.save("Alignment.pdf");
!type=note
注意:TextAlignmentAnchor.Mixed是一个特殊的枚举值,当形状的文本范围中不同段落应用了不同的对齐方式时,会返回该值。如果您使用TextAlignment.Mixed为形状中的文本或段落设置对齐方式,将会抛出异常。
您可以将形状中文本的方向设置为水平、垂直、旋转(90度或270度)和堆叠(文本从左到右或从右到左读取)。ITextFrame接口中的setDirection方法允许您使用TextDirection枚举设置形状中文本框的方向。
参考以下示例代码将文本方向设置为垂直:
// 初始化工作簿
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.getWorksheets().get(0);
// 添加一个形状
IShape shape = worksheet.getShapes().addShape(AutoShapeType.Rectangle, 10, 10, 200, 200);
// 为形状添加段落
shape.getTextFrame().getTextRange().getParagraphs().add("Document Solutions for Excel");
// 将文本框的方向设置为垂直
shape.getTextFrame().setDirection(TextDirection.Vertical);
// 保存工作簿
workbook.save("TextDirection.xlsx");
您可以设置形状中文本在底部、左侧、右侧和顶部方向的边距。可以使用ITextFrame接口的setMarginBottom、setMarginLeft、setMarginRight和setMarginTop方法来实现。
参考以下示例代码,该代码为第一个形状配置文本边距,而另一个形状保持默认边距:
// 创建一个新工作簿
Workbook workbook = new Workbook();
IWorksheet worksheet = workbook.getWorksheets().get(0);
IShape shape = worksheet.getShapes().addShape(AutoShapeType.Rectangle, 1, 10, 250, 200);
IShape shape2 = worksheet.getShapes().addShape(AutoShapeType.Rectangle, 300, 10, 250, 200);
// 设置文本边距
shape.getTextFrame().setMarginBottom(40);
shape.getTextFrame().setMarginTop(40);
shape.getTextFrame().setMarginRight(40);
shape.getTextFrame().setMarginLeft(40);
shape.getTextFrame().getTextRange().getParagraphs().get(0).getRuns().add("测试为形状中的文本设置边距");
shape2.getTextFrame().getTextRange().getParagraphs().get(0).getRuns().add("测试具有默认边距的输入文本");
// 保存为Excel文件
workbook.save("SetMarginOfShapeText.xlsx");