繁体   English   中英

在Java的Aspose Cells中设置形状对象的Z顺序索引,以在文本后面发送形状

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM