内容字号:默认大号超大号

段落设置:取消段首缩进段首缩进

字体设置:切换到微软雅黑切换到宋体

业界资讯 软件之家
Win10之家 WP之家
iPhone之家 iPad之家
安卓之家 数码之家
评测中心 智能设备
精准搜索请尝试:精确搜索

IT之家学院:微软PowerPoint绘制阵列教程(附下载)

2017-8-1 18:10:41来源:IT之家作者:CookTim责编:仲平 评论:

感谢IT之家网友 CookTim 的原创投稿

PowerPoint(PPT)是一款非常优秀的工具软件,可能大家对它的第一印象的是用来播放映幻灯片,给客户展示用。当然,这是它最本质的功能。除此之外,有少部分人把它当作轻量化的矢量绘图软件(比如作者)。实际上,ppt的绘图能力一点都不差,除了能够绘制一些基本的形状之外,2013及之后的版本添加了合并形状的功能,能够实现形状的联合、组合、拆分、相交和剪除,进一步增强了其绘图能力。

用过其他绘图软件的网友应该知道,绘制矢量图时有一个非常常用的功能——阵列。遗憾的是,直到2016版的PPT都没有将这个功能添加进去(可能有,作者没找到),难道是因为没有人需要这种功能吗?也许有网友的动手能力比较强,直接复制后再对齐,非常暴力。作者属于比较懒的,像这种规则的排列是懒得动手的。而且,常用的阵列有三种:矩形、环形、环形并旋转。第一种可以暴力解决,后两种呢?没有一定的三角函数的知识是解决不了的。因此,作者认为,用程序自动阵列是很有必要的。有高手能用VBA解决,缺点是VBA得跟着文档走,PPT默认还会禁用宏,一般用户不打开开发工具还找不着它。在PPT的功能界面添加这么一个功能,既方便又实用。

无图无真相,先上图

IT之家学院:微软PowerPoint绘制阵列教程(附下载)

▲三种不同类型的阵列

IT之家学院:微软PowerPoint绘制阵列教程(附下载)

▲PPT阵列加载项

“阵列”选项卡完全和内置的选项卡融为一体了,不知道的人还以为是软件自带的功能呢,哈哈。本着能网上下载就不自己动手的原则,先附上下载链接(需要.net 4.0)。

下面开始教程:

序言:作者用的是VS2017,PowerPoint 2016,理论上别的版本也适合。

1、安装开发环境

IT之家学院:微软PowerPoint绘制阵列教程(附下载)

▲添加Office/SharePoint开发

2、新建PowerPoint 2013和2016 VSTO外接程序

IT之家学院:微软PowerPoint绘制阵列教程(附下载)

作者用的是C#,.Net版本需要4.0以上,选中PowerPoint 2013和2016 VSTO外接程序,给你的工程取个名字,如PowerPointArray,单击确定。

3、界面设计

3.1 添加一个Ribbon界面,项目——添加新项——功能区(可视化设计器),随便起个名称,如RibbonArray.cs,如图

IT之家学院:微软PowerPoint绘制阵列教程(附下载)

3.2 界面设计

IT之家学院:微软PowerPoint绘制阵列教程(附下载)

单击TadAddIns(内置),在右边修改成属性。ControlldType改成Custom,Label改成阵列。单击group1,其Label改成阵列。在阵列这个group上拉控件:

Dropdown——1个,用来存放不同的阵列类型,添加3个Items,Label分别设置为矩形、环形、环形(旋转)

EditBox——4个,用来给用户输入参数

Button——1个,生成阵列

最终效果如下图

IT之家学院:微软PowerPoint绘制阵列教程(附下载)

4、开始写代码

4.1 双击Label为“类型”的DropDown控件,生成SelectionChanged事件,主要用来更改四个EditBox的Label。

private void dropDown1_SelectionChanged(object sender, RibbonControlEventArgs e)

{

        switch (dropDown1.SelectedItemIndex)

        {

            case 0:

                editBox1.Label = "水平间距";

                editBox2.Label = "水平数量";

                editBox3.Label = "竖直间距";

                editBox4.Label = "竖直数量";

                break;

            case 1:

            case 2:

                editBox1.Label = "角度";

                editBox2.Label = "数量";

                editBox3.Label = "中心X";

                editBox4.Label = "中心Y";

            break;

            default:

                break;

        }

   }

在RibbonArray_Load事件中添加如下代码,让加载项加载时选中矩形的阵列类型。

dropDown1.SelectedItemIndex = 0;

4.2双击Label为“生成”的Button控件,生成Click事件,为生成阵列的主程序,下面以矩形阵列为例介绍,各行的含义在代码中注释了。

try

{

    if (dropDown1.SelectedItemIndex == 0)

    {

        float xInterval = Convert.ToSingle(editBox1.Text) * 72 / 2.54f;//水平方向间距,默认单位为磅,需要转换成厘米

        int xNum = Convert.ToInt32(editBox2.Text);//水平方向阵列个数

        float yInterval = Convert.ToSingle(editBox3.Text) * 72 / 2.54f;//竖直方向间距,默认单位为磅,需要转换成厘米

        int yNum = Convert.ToInt32(editBox4.Text);//竖直方向阵列个数

        Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange.Left -= 12;//选中图形的位置向左移12磅,复制时会自动加12

        Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange.Top -= 12;//选中图形的位置向上移12磅,复制时会自动加12

        float xOriginal = Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange.Left;//保存下选中图形的初始位置

        float yOriginal = Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange.Top;

        //开始循环复制

        for (int x = 1; x <= xNum; x++)

        {

            for (int y = 1; y <= yNum; y++)

                {

                        if (x == 1 && y == 1) continue;//已经有一个了,少复制一个了

                        Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange.Duplicate();//复制一个,水平和竖直方向会自动加12

                        Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange.Left = xOriginal + (x - 1) * xInterval;//更改原始图的位置,为下一次复制做准备

                        Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange.Top = yOriginal + (y - 1) * yInterval;

                }

        }

        //最后一个移到了右下角的位置,不需要复制了,直接手动加上12

        Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange.Left += 12;

        Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange.Top += 12;

     }

    else

    {

        //其他阵列代码

    }

}

catch (Exception ex)

{

    System.Windows.Forms.MessageBox.Show(ex.Message);

}

单击启动,此时会自动启动PPT,需要在此之前没有PPT软件没运行。输入合适的参数,点生成就能直接生成阵列了。效果如下图。

IT之家学院:微软PowerPoint绘制阵列教程(附下载)

环形(旋转)阵列就属于数学问题了,大家可以自己琢磨,再次附上下载连接

作者编程能力很差,也不规范,本着能解决问题的原则写代码,高手勿嘲笑,有需要的直接下载。

IT之家,软媒旗下科技门户网站 - 爱科技,爱这里。

Copyright (C) RuanMei.com, All Rights Reserved.

软媒公司 版权所有 鲁ICP备11016544号-10