[英]Set the Z-Order Index for a Shape Object in Aspose Cells for Java to send the shape behind text
我使用Java的Aspose Cells将形状对象添加到Excel工作表的现有内容中,如下所示:
Shape shape = worksheet.getShapes().addTextEffect(...);
现在,我想将形状发送到工作表中已经存在的文本后面。 我查找了Shape
对象上的setZOrderPosition
方法。
但是,它接受一个整数值,而我似乎找不到像VSTO / VBA对象模型中的msoSendToBack
常量那样表示枚举到背面的枚举,幻数或msoSendToBack
。
此外,他们的文档没有提供此方法的值的解释: https : //apireference.aspose.com/net/cells/aspose.cells.drawing/shape/properties/zorderposition
因此,与所有其他绘图API一样,我假设Z Order值相对于工作表上其他内容的Z Order。
因此,我尝试指定-1以提供尽可能低的值。
shape.setZOrderPosition(-1);
这引发了IndexOutOfBoundsException
或类似的IndexOutOfBoundsException
,从中我推断Z顺序的有效值从零开始。
我提供了值0,希望它是最低的并且可以完成这项工作,但似乎没有。
shape.setZOrderPosition(0);
该形状仍会覆盖现有文本。
如何正确设置形状对象的Z顺序索引,使其位于文本后面?
我认为您应该相应地将艺术字形状的透明度设置为相应的值,以便准确显示这些单元格中的文本。 请参阅以下示例代码供您参考:例如,示例代码:
........
// Get the first default sheet
Worksheet sheet = workbook.getWorksheets().get(0);
// Add Watermark
Shape wordart = sheet.getShapes().addTextEffect(MsoPresetTextEffect.TEXT_EFFECT_1, "CONFIDENTIAL",
"Arial Black", 50, false, true, 18, 8, 1, 1, 130, 800);
// Get the fill format of the word art
FillFormat wordArtFormat = wordart.getFill();
// Set the color
wordArtFormat.setOneColorGradient(Color.getRed(), 0.2, GradientStyleType.HORIZONTAL, 2);
// Set the transparency
wordArtFormat.setTransparency(0.9);
// Make the line invisible
LineFormat lineFormat = wordart.getLine();
lineFormat.setWeight(0.0);
..........
我在Aspose担任技术支持/开发人员。
请根据需要使用Shape.setZOrderPosition()方法。 如果您还更改所有或受影响形状的z顺序位置,它将起作用。
请参阅以下示例代码以供参考。 我已附加了一张图像,该图像显示了此代码中使用的输入Excel文件和该代码生成的输出Excel文件。
正如您在图像内部看到的那样, Heart现在位于文本框的后面 。
爪哇
//Load your workbook
Workbook wb = new Workbook(dirPath + "sample.xlsx");
//Access first worksheet
Worksheet ws = wb.getWorksheets().get(0);
//Get shape 1 and 2
Shape sh = ws.getShapes().get(0);
Shape sh1 = ws.getShapes().get(1);
//Set the Z-Order Position, first shape to 1 and second shape to 0
sh.setZOrderPosition(1);
sh1.setZOrderPosition(0);
//Save the workbook
wb.save(dirPath + "output.xlsx");
注意: 我在Aspose担任开发人员布道者
Aspose.Cells已在17.9版中实现了该功能(即Send Shape Front或Back ),您可以从Aspose网站下载部分下载该功能。 这是示例代码供您参考。
爪哇
Workbook workbook = new Workbook();
Worksheet sheet = workbook.getWorksheets().get(0);
ShapeCollection shapes = workbook.getWorksheets().get(0).getShapes();
//Add first textbox
sheet.getTextBoxes().add(3, 3, 100, 100);
TextBox tb1 = sheet.getTextBoxes().get(0);
tb1.setText("This is first textbox.");
System.out.println(tb1.getZOrderPosition());
//Add second textbox
sheet.getTextBoxes().add(5, 3, 100, 100);
TextBox tb2 = sheet.getTextBoxes().get(1);
tb2.setText("This is second textbox.");
System.out.println(tb2.getZOrderPosition());
//Add second textbox
sheet.getTextBoxes().add(7, 3, 100, 100);
TextBox tb3 = sheet.getTextBoxes().get(2);
tb3.setText("This is third textbox.");
System.out.println(tb3.getZOrderPosition());
//Bring first textbox to front
tb1.toFrontOrBack(3);
//Send third textbox to back
tb3.toFrontOrBack(-1);
workbook.save(dirPath + "output.xlsx");
注意: 我在Aspose担任开发人员布道者
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.