[]
        
(Showing Draft Content)

自定义形状格式和形状文本

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);

注意: 形状的线条还支持实体填充、渐变填充和图案填充,其用法与形状填充类似。

3D 格式

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);

Setting text on shape in GcExcel

给形状文本设置公式

可以使用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");

image

锚定文本

文本框(或文本主体)包含您添加到形状中的文本或段落。ITextFrame接口的setHorizontalAnchorsetVerticalAnchor方法允许您使用HorizontalAnchorVerticalAnchor枚举在形状中设置文本框的水平和垂直锚点。文本框可以水平居中或垂直位于顶部、中部或底部。

请参考以下示例代码来锚定形状中的文本框:

//创建一个新的工作簿
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"); 

image

您可以设置文本范围和段落的对齐方式,以及形状中文本框的锚点。参考以下示例代码,将一个段落对齐并锚定在右下角:

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");

image

设置形状文本的方向

您可以使用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");

image

设置形状文本的边距

可以在底部、左侧、右侧和顶部方向设置形状中的文本边距。 ITextFrame 接口的 setMarginBottom, setMarginLeft, setMarginRightsetMarginTop 同样可以用于实现。

请参阅以下示例代码,该代码在第一个形状中配置文本边距,并在另一个形状中将其保留为默认值。

//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");

Setting margin for text on shape in GcExcel