[]
GcExcel不仅允许您添加形状和图片,库还允许您自定义形状格式和形状文本。用户可以通过更改填充颜色、格式化三维方向或在形状周围添加线条来增强Excel文件中形状的外观。
使用GcExcel,用户可以自定义形状格式和形状文本。
在GcExcel中,可以用三种不同的方式自定义形状格式。这包括使用 IFillFormat 接口的属性和方法设置插入形状的填充格式,使用 ILineFormat 接口的属性和方法配置形状的线条,以及使用 IThreeDFormat 接口的属性和方法将三维格式应用于形状。
要使用实体填充设置形状的格式,首先需要使用 IFillFormat 接口的 Solid 方法指定填充格式,然后设置 setRGB 和 setTransparency 分别设置形状的填充颜色和透明度。
请参阅以下代码示例,以使用实心填充填充形状。
// Solid fill
IShape shape = worksheet.getShapes().addShape(AutoShapeType.Parallelogram, 1, 1, 200, 100);
shape.getFill().solid();
shape.getFill().getColor().setRGB(Color.GetRed());
使用渐变填充,可以使用 IFillFormat 接口的 oneColorGradient 方法, twoColorGradient 方法 或 presetGradient 方法将形状填充配置为渐变填充。
设置渐变填充后,可以插入、删除或更改渐变停止点;通过IFillFormat 接口的 getGradientStops 方法, setRotateWithObject 方法和 setGradientAngle 方法配置填充样式旋转以及渐变填充的形状和角度。
GcExcel支持四种渐变填充类型,即直线、径向、矩形和路径。默认情况下,应用“Line”渐变填充。
请参阅以下示例代码,使用预设渐变方法使用渐变填充填充形状。
// Gradient fill
IShape shape = worksheet.getShapes().addShape(AutoShapeType.Heart, 1, 1, 100, 100);
shape.getFill().presetGradient(GradientStyle.Vertical, 3, PresetGradientType.Silver);
shape.getFill().setRotateWithObject(false);
请参阅以下示例代码,使用twoColorGradient方法使用渐变填充形状。
// Initialize workbook
Workbook workbook = new Workbook();
// Fetch default worksheet
IWorksheet worksheet = workbook.getWorksheets().get(0);
// Add a shape
IShape rectangle = worksheet.getShapes().addShape(AutoShapeType.Rectangle, 20, 20, 300, 100);
// Init a two color gradient fill.
rectangle.getFill().twoColorGradient(GradientStyle.Horizontal, 1);
//save to an excel file
workbook.save("LineGradient.xlsx");
要设置径向、矩形或路径渐变填充,还需要使用twoColorGradient方法设置PathShapeType。
请参阅以下示例代码以使用“Radial”渐变填充填充形状。
// Initialize workbook
Workbook workbook = new Workbook();
// Fetch default worksheet
IWorksheet worksheet = workbook.getWorksheets().get(0);
// Add a shape
IShape rectangle = worksheet.getShapes().addShape(AutoShapeType.Rectangle, 20, 20, 300, 100);
// Init a two color gradient fill.
rectangle.getFill().twoColorGradient(GradientStyle.FromCenter, 1);
rectangle.getFill().getGradientPathType().equals(PathShapeType.Radial);
//save to an excel file
workbook.save("RadialGradient.xlsx");
使用填充图案,可以使用IFillFormat 接口的 patterned方法将形状填充设置为填充图案。
此外,还可以使用 IColorFormat 接口的 setObjectThemeColor方法和 IFillFormat 接口的 getPatternColor 方法配置背景色和图案颜色。
要使用填充图案填充形状,请参阅以下示例代码。
// Pattern fill
IShape shape = worksheet.getShapes().addShape(AutoShapeType.Rectangle, 1, 1, 100, 100);
shape.getFill().patterned(PatternType.Percent10);
shape.getFill().getColor().setObjectThemeColor(ThemeColor.Accent2);
shape.getFill().getPatternColor().setObjectThemeColor(ThemeColor.Accent6);
在图片填充中,可以使用 IShapes 接口的 addShape 方法插入要用图片填充的形状。
此外,您还可以使用 IPictureFormat 接口的方法配置具有图片高度、图片宽度、亮度、对比度、重着色、x轴和y轴偏移等特性的图片格式。
要用图片填充形状,请参阅以下示例代码。
// Add shape of picture type
IShape shape = worksheet.getShapes().addShape(AutoShapeType.Rectangle, 20, 20, 100, 100);
String path = "C:\\Users\\GPCTAdmin\\Pictures\\cat.jpg";
try {
FileInputStream stream = new FileInputStream(path);
shape.getFill().userPicture(stream, ImageType.JPG);
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
// Recolor the picture
shape.getPictureFormat().setColorType(PictureColorType.Grayscale);
// Set picture brightness and contrast ratio
shape.getPictureFormat().setBrightness(0.6);
shape.getPictureFormat().setContrast(0.3);
// Set height, width, x-axis offset and y-axis offset of the specified picture
shape.getPictureFormat().getCrop().setPictureOffsetX(10);
shape.getPictureFormat().getCrop().setPictureOffsetY(-5);
shape.getPictureFormat().getCrop().setPictureWidth(120);
shape.getPictureFormat().getCrop().setPictureHeight(80);
使用纹理填充,可以使用 IFillFormat 接口的 presetTextured 方法,使用所选纹理填充形状。
此外,还可以使用 setTextureAlignment 方法, setTextureHorizontalScale 方法, setTextureOffsetX 方法, setTextureOffsetY 方法和 setTextureVerticalScale 方法配置纹理的布局。
要使用纹理填充填充形状,请参阅以下示例代码。
// Texture Fill
IShape shape = worksheet.getShapes().addShape(AutoShapeType.Rectangle, 1, 1, 100, 100);
shape.getFill().presetTextured(PresetTexture.Canvas);
shape.getFill().setTextureAlignment(TextureAlignment.Center);
shape.getFill().setTextureOffsetX(2.5);
shape.getFill().setTextureOffsetY(3.2);
shape.getFill().setTextureHorizontalScale(0.9);
shape.getFill().setTextureVerticalScale(0.2);
shape.getFill().setTransparency(0.5);
线是形状周围的一种边框。可以使用 ILineFormat接口的属性和方法,围绕插入到表单单元格中的形状创建线。
请参阅以下代码示例来配置形状的线条和线条样式。
// To set shape's line style.
IShape shape = worksheet.getShapes().addShape(AutoShapeType.Rectangle, 1, 1, 100, 100);
shape.getLine().setDashStyle(LineDashStyle.Dash);
shape.getLine().setStyle(LineStyle.Single);
shape.getLine().setWeight(2);
shape.getLine().getColor().setObjectThemeColor(ThemeColor.Accent6);
shape.getLine().setTransparency(0.3);
注意: 形状的线条还支持实体填充、渐变填充和图案填充,其用法与形状填充类似。
GcExcel Java 使用户可以通过配置插入形状围绕x、y和z轴的旋转度来格式化插入形状的三维布局。 这可以使用IThreeDFormat接口的 setRotationX 方法, setRotationY 方法和 setRotationZ 方法来完成。
要将3D 格式应用于嵌入的形状,请参阅以下示例代码。
// To set rotation degree for the shape arround x, y, z axis.
IShape shape = worksheet.getShapes().addShape(AutoShapeType.Rectangle, 1, 1, 100, 100);
shape.getThreeD().setRotationX(50);
shape.getThreeD().setRotationY(20);
shape.getThreeD().setRotationZ(30);
shape.getThreeD().setDepth(7);
shape.getThreeD().setZ(20);
在GcExcel中,可以使用 IShape 接口的 getTextFrame 根据自己的喜好配置形状的文本和文本样式。
请参阅以下代码示例,为插入的形状配置文本和文本样式。
// To configure the text and text style of the shape.
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 xxx.");
shape.getTextFrame().getTextRange().getParagraphs().get(1).getRuns().add("Hello World!");
shape.getTextFrame().getTextRange().getParagraphs().get(1).getRuns().get(0).getFont().setStrikethrough(false);
shape.getTextFrame().getTextRange().getParagraphs().get(1).getRuns().get(0).getFont().setSize(35);
可以使用IShape接口的setFormula方法为形状设置公式。此方法配置引用范围文本或定义名称的公式。首次给设置形状公式时,形状将获取引用的第一个单元格的文本和字体样式。一旦设置了形状文本,引用单元格内容中的任何类型的更改也会更新形状文本的值。但是,字体样式保持不变。
// set shape formula to G8
IShape shapeResult = worksheet.getShapes().addShape(AutoShapeType.Rectangle, worksheet.getRange("B7:D8"));
shapeResult.setFormula("=G8");
您可以通过将公式设置为null来删除形状上的公式引用,删除引用后,形状的文本会变成普通文本。形状的内容会从被删除引用区域的第一个单元格获取,字体样式会变成默认样式。
此外,当使用导出JSON、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("Text range alignment");
shape.getTextFrame().getTextRange().getParagraphs().add("Aligned to the left");
shape.getTextFrame().getTextRange().getParagraphs().add("Centered");
shape.getTextFrame().getTextRange().getParagraphs().add("Aligned to the right");
//将文本范围设置为左对齐
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("GrapeCity Documents 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("Aligned and anchored to bottom right");
//使用setVerticalAnchor方法将文本框在垂直方向上锚定到底部
shape.getTextFrame().setVerticalAnchor(VerticalAnchor.AnchorBottom);
//将段落对齐到右边
shape.getTextFrame().getTextRange().getParagraphs().get(0).setTextAlignment(TextAlignmentAnchor.Right);
//将工作簿保存为XLSX和PDF格式.
workbook.save("Alignment.xlsx");
workbook.save("Alignment.pdf");
您可以使用ITextFrame接口中的setDirection方法来设置形状中文本框的文本方向,支持水平、垂直、旋转(90度或270度)和堆叠(从左到右或从右到左)。该方法使用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("GrapeCity Documents for Excel");
//将文本框的方向设置为垂直.
shape.getTextFrame().setDirection(TextDirection.Vertical);
// Save the workbook.
workbook.save("TextDirection.xlsx");
可以在底部、左侧、右侧和顶部方向设置形状中的文本边距。 ITextFrame 接口的 setMarginBottom, setMarginLeft, setMarginRight 与 setMarginTop 同样可以用于实现。
请参阅以下示例代码,该代码在第一个形状中配置文本边距,并在另一个形状中将其保留为默认值。
//create a new workbook
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);
//set the margin of text
shape.getTextFrame().setMarginBottom(40);
shape.getTextFrame().setMarginTop(40);
shape.getTextFrame().setMarginRight(40);
shape.getTextFrame().setMarginLeft(40);
shape.getTextFrame().getTextRange().getParagraphs().get(0).getRuns().add("Test setting margin for text in a shape");
shape2.getTextFrame().getTextRange().getParagraphs().get(0).getRuns().add("Test input text with default margin");
//save to an excel file
workbook.save("SetMarginOfShapeText.xlsx");