`
收藏列表
标题 标签 来源
jacob 生成ppt jacob
package cn.com.hongyousoft.pandorax.ppt;

import java.io.File;

import cn.com.hongyousoft.pandorax.CellUtil;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class MyTest {
    
    public static final int WORD_HTML = 8;
    
    public static final int WORD_TXT = 7;
    
    public static final int EXCEL_HTML = 44;
    
    public static final int ppSaveAsJPG = 17;
    
    private static final String ADD_CHART = "AddChart";
    
    private ActiveXComponent ppt;
    private ActiveXComponent presentation;
    
    /** 
     * 构造一个新的PPT 
     * @param isVisble 
     */
    public MyTest(boolean isVisble) {
        if (null == ppt) {
            ppt = new ActiveXComponent("PowerPoint.Application");
            //            ppt.setProperty("Visible", new Variant(isVisble));  
            //            ppt.setProperty("WindowState ", new Variant(2));  
            ActiveXComponent presentations = ppt.getPropertyAsComponent("Presentations");
            presentation = presentations.invokeGetComponent("Add", new Variant(1));
        }
    }
    
    public MyTest(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");
        setIsVisble(ppt, isVisble);
        // 打开一个现有的 Presentation 对象  
        ActiveXComponent presentations = ppt.getPropertyAsComponent("Presentations");
        presentation = presentations.invokeGetComponent("Open", new Variant(filePath), new Variant(true));
    }
    
    public MyTest(String filePath, String tarPath, 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");
        setIsVisble(ppt, isVisble);
        // 打开一个现有的 Presentation 对象  
        ActiveXComponent presentations = ppt.getPropertyAsComponent("Presentations");
        presentation = presentations.invokeGetComponent("Open", new Variant(filePath), new Variant(true));
    }
    
    /** 
     * 播放ppt 
     *  
     * @param pptFile 
     * @date 2009-7-4 
     * @author YHY 
     */
    public void PPTShow(String pptFile) {
        // powerpoint幻灯展示设置对象  
        ActiveXComponent setting = presentation.getPropertyAsComponent("SlideShowSettings");
        // 调用该对象的run函数实现全屏播放  
        setting.invoke("Run");
        // 释放控制线程  
        ComThread.Release();
    }
    
    /** 
     * ppt另存为 
     *  
     * @param presentation 
     * @param saveTo 
     * @param ppSaveAsFileType 
     * @date 2009-7-4 
     * @author YHY 
     */
    public void saveAs(Dispatch presentation, String saveTo, int ppSaveAsFileType) throws Exception {
        Dispatch.call(presentation, "SaveAs", saveTo, new Variant(ppSaveAsFileType));
    }
    
    /** 
     * 关闭PPT并释放线程 
     * @throws Exception 
     */
    public void closePpt() throws Exception {
        if (null != presentation) {
            Dispatch.call(presentation, "Close");
        }
        ppt.invoke("Quit", new Variant[] {});
        ComThread.Release();
    }
    
    public void closeFile() throws Exception {
        if (null != presentation) {
            Dispatch.call(presentation, "Close");
        }
        ComThread.Release();
    }
    
    /** 
     * 运行PPT 
     * @throws Exception 
     */
    public void runPpt() throws Exception {
        ActiveXComponent setting = presentation.getPropertyAsComponent("SlideShowSettings");
        setting.invoke("Run");
    }
    
    /** 
     * 设置是否可见 
     * @param visble 
     * @param obj 
     */
    private void setIsVisble(Dispatch obj, boolean visble) throws Exception {
        Dispatch.put(obj, "Visible", new Variant(visble));
    }
    
    /** 
     *  
     * @param pageShapes 页面的SHAPES的对象 
     * @param chartType 图表类型 
     * @param leftDistance 距离左边框的距离 
     * @param topDistance 距离上边框的距离 
     * @param width 图表的宽度 
     * @param height 图表的高度 
     * @return 
     * @throws Exception 
     */
    public static Dispatch addChart(Dispatch pageShapes, int chartType, int leftDistance, int topDistance, int width,
            int height) throws Exception {
        Variant chart = Dispatch.invoke(pageShapes, ADD_CHART, 1, new Object[] { new Integer(chartType),//图表类型  
                new Integer(leftDistance),//距离左边框的距离  
                new Integer(topDistance),//距离上边框的距离  
                new Integer(width),//图表的宽度  
                new Integer(height),//图表的高度  
        }, new int[1]);//错误类型  
        
        return chart.toDispatch();
    }
    
    /** 
     * 获取第几个幻灯片 
     * @param index 序号,从1开始 
     * @return 
     * @throws Exception 
     */
    public Dispatch getPptPage(int pageIndex) throws Exception {
        //获取幻灯片对象  
        ActiveXComponent slides = presentation.getPropertyAsComponent("Slides");
        //获得第几个PPT  
        Dispatch pptPage = Dispatch.call(slides, "Item", new Object[] { new Variant(pageIndex) }).toDispatch();
        try {
            Dispatch.call(pptPage, "Select");
        } catch (Exception e) {
            Dispatch.call(pptPage, "Select");
        }
        return pptPage;
    }
    
    /**
     * @Description: 第2页PPT操作
     * @param window
     * @param pageIndex
     * @throws Exception
     */
    private void scyxPPT2(Dispatch window, int pageIndex) throws Exception {
        getPptPage(pageIndex);
        
        //获取当前页中的Shape对象
        Dispatch shapes = getShapes(window);
        
        //获取Shape中的第1个元素  
        int shapeIndex = 1;
        Dispatch shape1 = getShapeByIndex(shapes, shapeIndex);
        
        //第几期赋值
        addText(shape1, "(第20期)");
        
        //获取Shape中的第2个元素  
        shapeIndex = 2;
        Dispatch shape2 = getShapeByIndex(shapes, shapeIndex);
        
        //日期赋值
        addText(shape2, "2012年12月21日");
    }
    
    /**
     * @Description: 第4页PPT操作
     * @param window
     * @param pageIndex
     * @throws Exception
     */
    private void scyxPPT4(Dispatch window, int pageIndex) throws Exception {
        getPptPage(pageIndex);
        
        //获取当前页中的Shape对象
        Dispatch shapes = getShapes(window);
        
        //获取Shape中的第2个元素  
        int shapeIndex = 2;
        Dispatch shape1 = getShapeByIndex(shapes, shapeIndex);
        
        Dispatch.call(shape1, "Select");
        
        //第几期赋值
        addText(shape1, "12月第3周, 原油平均日产0万吨, 比计划低10000万吨");
        //获取幻灯片中的第N个元素 
        shapeIndex = 1;
        Dispatch chartData = getChartData(shapes, shapeIndex);
        
        Dispatch.call(chartData, "Activate");//激活excel sheet,不激活无法修改数据
        
        //获得excel对象
        Dispatch workBook = Dispatch.get(chartData, "Workbook").getDispatch();
        Dispatch workSheetItem = this.getWorkSheetItem(workBook);
        
        int[] plans = { 88888, 59548, 30323, 27516, 15000, 15903, 12774, 11774, 5613, 4484, 4290, 1419, 355, 548, 129 };
        int[] realitys = { 188888, 159548, 130323, 127516, 115000, 115903, 112774, 111774, 15613, 14484, 14290, 11419,
                1355, 1548, 1129 };
        char c = 'B';//定义英语大写首字母
        for (int i = 1; i <= 15; i++) {
            // 修改计划的值
            Dispatch cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { c + "2" }, new int[1])
                    .toDispatch();
            Dispatch.put(cell, "Value", plans[i - 1]);
            
            // 修改实际的值
            cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { c + "3" }, new int[1])
                    .toDispatch();
            Dispatch.put(cell, "Value", realitys[i - 1]);
            c++;
        }
        Dispatch.call(workBook, "Close"); //关闭当前excel文件
    }
    
    /**
     * @Description: 第5页PPT操作
     * @param window
     * @param pageIndex
     * @throws Exception
     */
    private void scyxPPT5(Dispatch window, int pageIndex) throws Exception {
        getPptPage(pageIndex);
        
        //获取当前页中的Shape对象
        Dispatch shapes = getShapes(window);
        
        //获取Shape中的第2个元素  
        int shapeIndex = 2;
        Dispatch shape1 = getShapeByIndex(shapes, shapeIndex);
        Dispatch.call(shape1, "Select");
        //第几期赋值
        addText(shape1, "12月第3周,平均日产2亿方/日, 与月度基本计划一致,主要气区生产平稳");
        //获取幻灯片中的第1个元素  操作图表
        
        shapeIndex = 1;
        Dispatch chartData = getChartData(shapes, shapeIndex);
        
        Dispatch.call(chartData, "Activate");//激活excel sheet,不激活无法修改数据
        
        //获得excel对象
        Dispatch workBook = Dispatch.get(chartData, "Workbook").getDispatch();
        Dispatch workSheetItem = this.getWorkSheetItem(workBook);
        
        String[] companys = { "新疆", "大庆", "股份", "青海", "塔里木" };
        int[] plans = { 8, 5, 3, 4, 6 };
        int[] realitys = { 88, 55, 33, 44, 66 };
        char c = 'B';//定义英语大写首字母
        for (int i = 1; i <= 5; i++) {
            // 修改公司的值
            Dispatch cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { c + "1" }, new int[1])
                    .toDispatch();
            Dispatch.put(cell, "Value", companys[i - 1]);
            // 修改计划的值
            cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { c + "2" }, new int[1])
                    .toDispatch();
            Dispatch.put(cell, "Value", plans[i - 1]);
            
            // 修改实际的值
            cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { c + "3" }, new int[1])
                    .toDispatch();
            Dispatch.put(cell, "Value", realitys[i - 1]);
            c++;
        }
        Dispatch.call(workBook, "Close"); //关闭当前excel文件
    }
    
    /**
     * @Description: 第7页PPT操作
     * @param window
     * @param pageIndex
     * @throws Exception
     */
    private void scyxPPT7(Dispatch window, int pageIndex) throws Exception {
        getPptPage(pageIndex);
        
        //获取当前页中的Shape对象
        Dispatch shapes = getShapes(window);
        
        //获取幻灯片中的第1个元素  操作图表
        
        int shapeIndex = 1;
        Dispatch chartData = getChartData(shapes, shapeIndex);
        
        Dispatch.call(chartData, "Activate");//激活excel sheet,不激活无法修改数据
        
        //获得excel对象
        Dispatch workBook = Dispatch.get(chartData, "Workbook").getDispatch();
        Dispatch workSheetItem = this.getWorkSheetItem(workBook);
        
        String[] companys = { "陕京线", "靖西线 ", "忠武线", " 涩宁兰线", "西气东输" };
        String[] plans = { "1.8", "1.5", "1.3", "1.4", "1.6" };
        String[] realitys = { "1.8", "2.5", "2.3", "2.4", "2.6" };
        char c = 'B';//定义英语大写首字母
        for (int i = 1; i <= 5; i++) {
            // 修改管线的值
            Dispatch cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { c + "1" }, new int[1])
                    .toDispatch();
            Dispatch.put(cell, "Value", companys[i - 1]);
            // 修改计划的值
            cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { c + "2" }, new int[1])
                    .toDispatch();
            Dispatch.put(cell, "Value", plans[i - 1]);
            
            // 修改实际的值
            cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { c + "3" }, new int[1])
                    .toDispatch();
            Dispatch.put(cell, "Value", realitys[i - 1]);
            c++;
        }
        Dispatch.call(workBook, "Close"); //关闭当前excel文件
    }
    
    /**
     * @Description: 第9页PPT操作
     * @param window
     * @param pageIndex
     * @throws Exception
     */
    private void scyxPPT9(Dispatch window, int pageIndex) throws Exception {
        getPptPage(pageIndex);
        
        //获取当前页中的Shape对象
        Dispatch shapes = getShapes(window);
        
        //获取Shape中的第2个元素  
        int shapeIndex = 3;
        Dispatch shape1 = getShapeByIndex(shapes, shapeIndex);
        Dispatch.call(shape1, "Select");
        //第几期赋值
        addText(shape1, "\r\t本周动用钻机2000台, 比上周增加100台." + "\r\n" + "平均日钻井进尺20万米,其中开发井20.18万米,探井及评价井5万米");
        
        //获取幻灯片中的第1个元素  操作饼状图表
        
        shapeIndex = 1;
        Dispatch chartData = getChartData(shapes, shapeIndex);
        
        Dispatch.call(chartData, "Activate");//激活excel sheet,不激活无法修改数据
        
        //获得excel对象
        Dispatch workBook = Dispatch.get(chartData, "Workbook").getDispatch();
        Dispatch workSheetItem = this.getWorkSheetItem(workBook);
        
        // 修改开发井的值
        Dispatch cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { "B2" }, new int[1])
                .toDispatch();
        Dispatch.put(cell, "Value", "5000");
        // 修改勘探井的值
        cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { "C2" }, new int[1]).toDispatch();
        Dispatch.put(cell, "Value", "500");
        
        //获取幻灯片中的第2个元素  操作图表
        
        shapeIndex = 2;
        chartData = getChartData(shapes, shapeIndex);
        
        Dispatch.call(chartData, "Activate");//激活excel sheet,不激活无法修改数据
        
        //获得excel对象
        workSheetItem = this.getWorkSheetItem(workBook);
        // 修改总进尺的值
        cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { "B2" }, new int[1]).toDispatch();
        Dispatch.put(cell, "Value", "18.88");
        // 修改开发井的值
        cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { "C2" }, new int[1]).toDispatch();
        Dispatch.put(cell, "Value", "16.66");
        // 修改勘探井的值
        cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { "D2" }, new int[1]).toDispatch();
        Dispatch.put(cell, "Value", "8.88");
        Dispatch.call(workBook, "Close"); //关闭当前excel文件
    }
    
    /**
     * @Description: 第10页PPT操作
     * @param window
     * @param pageIndex
     * @throws Exception
     */
    private void scyxPPT10(Dispatch window, int pageIndex) throws Exception {
        getPptPage(pageIndex);
        
        //获取当前页中的Shape对象
        Dispatch shapes = getShapes(window);
        
        //获取幻灯片中的第1个元素  操作饼状图表
        
        int shapeIndex = 1;
        Dispatch chartData = getChartData(shapes, shapeIndex);
        
        Dispatch.call(chartData, "Activate");//激活excel sheet,不激活无法修改数据
        
        //获得excel对象
        Dispatch workBook = Dispatch.get(chartData, "Workbook").getDispatch();
        Dispatch workSheetItem = this.getWorkSheetItem(workBook);
        
        for (int i = 2; i < 7; i++) {
            String s = "a";
            for (int j = 0; j < 52; j++) {
                s = CellUtil.getCellIndex(s);
                // 修改曲线图的值
                Dispatch cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { s + "" + i },
                        new int[1]).toDispatch();
                Dispatch.put(cell, "Value", (int) (Math.random() * 1000));
                s = s.toLowerCase();
            }
        }
        Dispatch.call(workBook, "Close"); //关闭当前excel文件
    }
    
    /**
     * @Description: 第11页PPT操作
     * @param window
     * @param pageIndex
     * @throws Exception
     */
    private void scyxPPT11(Dispatch window, int pageIndex) throws Exception {
        getPptPage(pageIndex);
        
        //获取当前页中的Shape对象
        Dispatch shapes = getShapes(window);
        //获取Shape中的第2个元素  
        int shapeIndex = 2;
        Dispatch shape1 = getShapeByIndex(shapes, shapeIndex);
        Dispatch.call(shape1, "Select");
        //第几期赋值
        addText(shape1, "新疆油田");
        //获取幻灯片中的第1个元素  操作饼状图表
        
        shapeIndex = 1;
        Dispatch chartData = getChartData(shapes, shapeIndex);
        
        Dispatch.call(chartData, "Activate");//激活excel sheet,不激活无法修改数据
        
        //获得excel对象
        Dispatch workBook = Dispatch.get(chartData, "Workbook").getDispatch();
        Dispatch workSheetItem = this.getWorkSheetItem(workBook);
        
        for (int i = 2; i < 5; i++) {
            String s = "a";
            for (int j = 0; j < 52; j++) {
                s = CellUtil.getCellIndex(s);
                // 修改曲线图的值
                Dispatch cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { s + "" + i },
                        new int[1]).toDispatch();
                Dispatch.put(cell, "Value", (int) (Math.random() * 1000));
                s = s.toLowerCase();
            }
        }
        Dispatch.call(workBook, "Close"); //关闭当前excel文件
    }
    
    /**
     * @Description: 第12页PPT操作
     * @param window
     * @param pageIndex
     * @throws Exception
     */
    private void scyxPPT12(Dispatch window, int pageIndex) throws Exception {
        getPptPage(pageIndex);
        
        //获取当前页中的Shape对象
        Dispatch shapes = getShapes(window);
        //获取Shape中的第2个元素  
        int shapeIndex = 2;
        Dispatch shape1 = getShapeByIndex(shapes, shapeIndex);
        Dispatch.call(shape1, "Select");
        //第几期赋值
        addText(shape1, "大庆油田");
        //获取幻灯片中的第1个元素  操作饼状图表
        
        shapeIndex = 1;
        Dispatch chartData = getChartData(shapes, shapeIndex);
        
        Dispatch.call(chartData, "Activate");//激活excel sheet,不激活无法修改数据
        
        //获得excel对象
        Dispatch workBook = Dispatch.get(chartData, "Workbook").getDispatch();
        Dispatch workSheetItem = this.getWorkSheetItem(workBook);
        
        for (int i = 2; i < 5; i++) {
            String s = "a";
            for (int j = 0; j < 52; j++) {
                s = CellUtil.getCellIndex(s);
                // 修改曲线图的值
                Dispatch cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { s + "" + i },
                        new int[1]).toDispatch();
                Dispatch.put(cell, "Value", (int) (Math.random() * 160));
                s = s.toLowerCase();
            }
        }
        Dispatch.call(workBook, "Close"); //关闭当前excel文件
    }
    
    /**
     * @Description: 第13页PPT操作
     * @param window
     * @param pageIndex
     * @throws Exception
     */
    private void scyxPPT13(Dispatch window, int pageIndex) throws Exception {
        getPptPage(pageIndex);
        
        //获取当前页中的Shape对象
        Dispatch shapes = getShapes(window);
        //获取Shape中的第2个元素  
        int shapeIndex = 2;
        Dispatch shape1 = getShapeByIndex(shapes, shapeIndex);
        Dispatch.call(shape1, "Select");
        //第几期赋值
        addText(shape1, "辽河油田");
        //获取幻灯片中的第1个元素  操作饼状图表
        
        shapeIndex = 1;
        Dispatch chartData = getChartData(shapes, shapeIndex);
        
        Dispatch.call(chartData, "Activate");//激活excel sheet,不激活无法修改数据
        
        //获得excel对象
        Dispatch workBook = Dispatch.get(chartData, "Workbook").getDispatch();
        Dispatch workSheetItem = this.getWorkSheetItem(workBook);
        
        for (int i = 2; i < 5; i++) {
            String s = "a";
            for (int j = 0; j < 52; j++) {
                s = CellUtil.getCellIndex(s);
                // 修改曲线图的值
                Dispatch cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { s + "" + i },
                        new int[1]).toDispatch();
                Dispatch.put(cell, "Value", (int) (Math.random() * 140));
                s = s.toLowerCase();
            }
        }
        Dispatch.call(workBook, "Close"); //关闭当前excel文件
    }
    
    /**
     * @Description: 第14页PPT操作
     * @param window
     * @param pageIndex
     * @throws Exception
     */
    private void scyxPPT14(Dispatch window, int pageIndex) throws Exception {
        getPptPage(pageIndex);
        
        //获取当前页中的Shape对象
        Dispatch shapes = getShapes(window);
        int shapeIndex = 2;
        Dispatch shape1 = getShapeByIndex(shapes, shapeIndex);
        Dispatch.call(shape1, "Select");
        //第几期赋值
        addText(shape1, "华北油田");
        //获取幻灯片中的第1个元素  操作饼状图表
        
        shapeIndex = 1;
        Dispatch chartData = getChartData(shapes, shapeIndex);
        
        Dispatch.call(chartData, "Activate");//激活excel sheet,不激活无法修改数据
        //获得excel对象
        Dispatch workBook = Dispatch.get(chartData, "Workbook").getDispatch();
        Dispatch workSheetItem = this.getWorkSheetItem(workBook);
        
        for (int i = 2; i < 5; i++) {
            String s = "a";
            for (int j = 0; j < 52; j++) {
                s = CellUtil.getCellIndex(s);
                // 修改曲线图的值
                Dispatch cell = Dispatch.invoke(workSheetItem, "Range", Dispatch.Get, new Object[] { s + "" + i },
                        new int[1]).toDispatch();
                Dispatch.put(cell, "Value", (int) (Math.random() * 120));
                s = s.toLowerCase();
            }
        }
        Dispatch.call(workBook, "Close"); //关闭当前excel文件
    }
    
    public Dispatch getWorkSheetItem(Dispatch workBook) {
        
        Dispatch workSheets = Dispatch.get(workBook, "Worksheets").getDispatch();
        return Dispatch.call(workSheets, "Item", new Variant(1)).toDispatch();
    }
    
    /**
     * @Description: 获得操作表的对象
     * @param shapes
     * @param shapeIndex
     * @return
     */
    private Dispatch getChartData(Dispatch shapes, int shapeIndex) {
        Dispatch shape = Dispatch.call(shapes, "Item", new Variant(shapeIndex)).toDispatch();
        Dispatch.call(shape, "Select");
        Dispatch chart = Dispatch.get(shape, "Chart").getDispatch();
        Dispatch chartData = Dispatch.get(chart, "ChartData").getDispatch();
        return chartData;
    }
    
    /** 
     * 设置图表上是否显示数据表格 
     * @param chartObj 
     * @param value 
     * @throws Exception 
     */
    public static void setHasDataTable(Dispatch chartObj, boolean value) throws Exception {
        Dispatch.put(chartObj, "HasDataTable", value);
    }
    
    /**
     * @Description: 文本域赋值
     * @param shape
     */
    private void addText(Dispatch shape, String value) {
        Dispatch textFrame = Dispatch.get(shape, "TextFrame").getDispatch();
        Dispatch textRange = Dispatch.get(textFrame, "TextRange").getDispatch();
        Dispatch.call(textRange, "Select");
        Dispatch.put(textRange, "Text", value);
    }
    
    /**
     * @Description: 获取Shape中的第几个元素  
     * @param shapes
     * @param shapeIndex
     * @return
     */
    private Dispatch getShapeByIndex(Dispatch shapes, int shapeIndex) {
        Dispatch shape = Dispatch.call(shapes, "Item", new Variant(shapeIndex)).toDispatch();
        try {
            Dispatch.call(shape, "Select");
        } catch (Exception e) {
            Dispatch.call(shape, "Select");
        }
        return shape;
    }
    
    /**
     * @Description: 获取当前页中的Shape对象
     * @param window
     * @return
     */
    private Dispatch getShapes(Dispatch window) {
        Dispatch selection = Dispatch.get(window, "Selection").toDispatch();
        Dispatch slideRange = Dispatch.get(selection, "SlideRange").getDispatch();
        Dispatch shapes = Dispatch.get(slideRange, "Shapes").getDispatch();
        return shapes;
    }
    
    public static void main(String[] strs) throws Exception {
        String templatePPT = "e:/生成运行周报模版1.pptx";
        
        MyTest test = new MyTest(templatePPT, true);
        test.generageSCYXZBPpt();
    }
    
    /**
     * @Description: 生成PPT
     * @throws Exception
     */
    public void generageSCYXZBPpt() throws Exception {
        long startTime = System.currentTimeMillis();
        Dispatch windows = presentation.getProperty("Windows").toDispatch();
        
        //获取打开的第几个ppt文件
        int pptFileIndex = 1; //第几个ppt文件,一个powerpoint可能同时打开多个文件。此处应注意唯一性,存在并发问题,可考虑先拷贝模板为其他文件,然后打开,并赋值。
        Dispatch window = Dispatch.call(windows, "Item", new Variant(pptFileIndex)).toDispatch();
        
        //操作PPT中第2页
        int pageIndex = 2;
        scyxPPT2(window, pageIndex);
        
        //操作PPT中第4页
        pageIndex = 4;
        scyxPPT4(window, pageIndex);
        
        //操作PPT中第5页
        pageIndex = 5;
        scyxPPT5(window, pageIndex);
        
        //操作PPT中第7页
        pageIndex = 7;
        scyxPPT7(window, pageIndex);
        
        //操作PPT中第9页
        pageIndex = 9;
        scyxPPT9(window, pageIndex);
        
        //操作PPT中第10页
        pageIndex = 10;
        scyxPPT10(window, pageIndex);
        
        //操作PPT中第11页
        pageIndex = 11;
        scyxPPT11(window, pageIndex);
        //操作PPT中第12页
        pageIndex = 12;
        scyxPPT12(window, pageIndex);
        //操作PPT中第13页
        pageIndex = 13;
        scyxPPT13(window, pageIndex);
        //操作PPT中第14页
        pageIndex = 14;
        scyxPPT14(window, pageIndex);
        
        //保存ppt
        presentation.invoke("SaveAs", new Variant("e:/测试.pptx"));
        //        PPTShow("e:/测试.pptx");
        //关闭当前ppt文件
        if (null != presentation) {
            Dispatch.call(presentation, "Close");
        }
        //      
        //退出powerpoint
        ppt.invoke("Quit", new Variant[] {});
        // 释放控制线程
        ComThread.Release();
        long endTime = System.currentTimeMillis();
        System.out.println("====" + (endTime - startTime));
    }
}
Global site tag (gtag.js) - Google Analytics