jacob ppt html,java 使用 jacob 控制 ppt 记录

首先结论 : 给现有 ppt 添加一页设置背景图片置底,修改文字颜色

声明两个私有变量

private ActiveXComponent ppt;

private ActiveXComponent presentation;

根据传入的 ppt 路径构建一个 ppt 对象

/***

*

* Title: JacobPptUtil

* Description: 构建ppt对象

* @param filePath ppt路径

* @param isVisble 是否可见

*/

public JacobPptUtil(String filePath, boolean isVisble) throws Exception {

if (null == filePath || "".equals(filePath)) {

throw new Exception("文件路径为空!");

}

File file = new File(filePath);

if (!file.exists()) {

throw new Exception("文件不存在!");

}

ppt = new ActiveXComponent("PowerPoint.Application");

//设置是否可见

Dispatch.put(ppt, "Visible", isVisble);

// 打开一个现有的 Presentation 对象

ActiveXComponent presentations = ppt.getPropertyAsComponent("Presentations");

presentation = presentations.invokeGetComponent("Open", new Variant(filePath), new Variant(true));

}

获取幻灯片对象

Dispatch windows = presentation.getProperty("Windows").toDispatch();

Dispatch window = Dispatch.call(windows, "Item", new Variant(1)).toDispatch();

Dispatch selection = Dispatch.get(window, "Selection").toDispatch();

//获取幻灯片对象

ActiveXComponent slides = presentation.getPropertyAsComponent("Slides");

在之前添加一页

/**

* @param type

* 2:标题+文本

* 3:标题+左右对比文本

* 4:标题+表格

* 5:标题+左文本右图表

* 6:标题+左图表右文本

* 7:标题+SmartArt图形

* 8:标题+图表

*/

private static Variant addPptPage(ActiveXComponent slides,int pptPage,int type)throws Exception{

return slides.invoke("Add", new Variant(pptPage), new Variant(type));

}

给选中元素添加值 (每页幻灯片的元素在添加值的时候已经确定了

例: 如果创建类型为 2,那么元素就只有标题和文本

/**

* 在Selection对象上修改TEXT对象的值

*

* @param selectionObj

* @param value

* @throws Exception

*/

public void addTextValue(Dispatch selectionObj, String value) throws Exception {

Dispatch shapeRange = (Dispatch) Dispatch.get(selectionObj, "ShapeRange").getDispatch();

Dispatch textFrame = (Dispatch) Dispatch.get(shapeRange, "TextFrame").getDispatch();

Dispatch textRange = (Dispatch) Dispatch.get(textFrame, "TextRange").getDispatch();

Dispatch.call(textRange, "Select");

Dispatch.put(textRange, "Text", value);

}

修改文字颜色

/***

*

* @Title: addTextCloc

* @Description: 设置字体颜色

* @param selectionObj

* @param color

* @throws Exception

* void 返回类型

* @throws

*/

public void addTextColor(Dispatch selectionObj,String color) throws Exception {

Dispatch shapeRange = (Dispatch) Dispatch.get(selectionObj, "ShapeRange").getDispatch();

Dispatch textFrame = (Dispatch) Dispatch.get(shapeRange, "TextFrame").getDispatch();

Dispatch textRange = (Dispatch) Dispatch.get(textFrame, "TextRange").getDispatch();

Dispatch Font = (Dispatch) Dispatch.get(textRange, "Font").getDispatch();

Dispatch Color = (Dispatch) Dispatch.get(Font, "Color").getDispatch();

Dispatch.put(Color, "RGB",color);

}

添加背景图片

//后面参数值依次是 left top whith hight

Dispatch picture = Dispatch.call(shapes, "AddPicture","图片路径", 1, 1, 1, 1).toDispatch();

// 选中图片

Dispatch.call(picture, "Select");

//设置宽度高度

//Dispatch.put(picture, "Width", new Variant(1920));

//Dispatch.put(picture, "Height", new Variant(1200));

//设置图片的层级关系

Dispatch.call(picture,"ZOrder",1);

总结

有上面的代码可知

修改字体颜色的代码是

Dispatch shapeRange = (Dispatch) Dispatch.get(selectionObj, "ShapeRange").getDispatch();

Dispatch textFrame = (Dispatch) Dispatch.get(shapeRange, "TextFrame").getDispatch();

Dispatch textRange = (Dispatch) Dispatch.get(textFrame, "TextRange").getDispatch();

Dispatch Font = (Dispatch) Dispatch.get(textRange, "Font").getDispatch();

Dispatch Color = (Dispatch) Dispatch.get(Font, "Color").getDispatch();

Dispatch.put(Color, "RGB",color);

有 ShapeRange 对象得到 TextFrame,再由 TextFrame 得到 TextRange 对象再得到 Font 对象

与之对应的ppt宏的VBA代码是

Sub Macro1()

' 宏由 User 记录,日期: 2018-7-2

ActiveWindow.Selection.TextRange.Font.Color.SchemeColor = ppAccent3

End Sub

通过观察对比JAVA和VBA代码得知(是的...不会 vba 全程用猜):

ActiveWindow.Selection

等同于

(Dispatch) Dispatch.get(selectionObj, "ShapeRange").getDispatch()

&&&

Selection.TextRange

等同于

Dispatch textRange = (Dispatch) Dispatch.get(textFrame, "TextRange").getDispatch();

由观察得志,JACOB 的 Dispath 对象可以抽象理解为 VBA 的对象,而 Dispath 的 get() 方法的意思是通过传入的第一个参数得到 VBA 意义上的和 get() 方法第二个字符串参数值匹配的 VBA 对象,那么知道这个之后大部分的 VBA 代码都是可以用 Dispath对象的get()方法翻译。

后记

综上所述~VBA 是可以翻译为 JAVA 代码的,(累死个仙人

值得一提的是 :在颜色的选择方面,一般来说颜色都是通过 RGB 或者是 16 进制来确定的。但是 jacob 在设置字体颜色的时候传入的值是一个由三个","分隔的数字。最后发现一条线索是把 16 进制的颜色数字转化为 10 进制,之后两位一组","隔开传入.....最后试了试还是不行.....但是有些是可以,现在能确定的颜色是:

Dispatch.put(font, "Color", "16,77,72,15");//白色字体

Dispatch.put(font, "Color", "1,0,0,0");//红色字体

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值