設(shè)置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

IT之家學(xué)院:微軟PowerPoint繪制陣列教程(附下載)

2017/8/1 18:10:41 來源:IT之家 作者:CookTim 責(zé)編:仲平
感謝IT之家網(wǎng)友 小西格瑪 的線索投遞!

感謝IT之家網(wǎng)友 CookTim 的原創(chuàng)投稿

PowerPoint(PPT)是一款非常優(yōu)秀的工具軟件,可能大家對它的第一印象的是用來播放映幻燈片,給客戶展示用。當(dāng)然,這是它最本質(zhì)的功能。除此之外,有少部分人把它當(dāng)作輕量化的矢量繪圖軟件(比如作者)。實際上,ppt的繪圖能力一點都不差,除了能夠繪制一些基本的形狀之外,2013及之后的版本添加了合并形狀的功能,能夠?qū)崿F(xiàn)形狀的聯(lián)合、組合、拆分、相交和剪除,進(jìn)一步增強(qiáng)了其繪圖能力。

用過其他繪圖軟件的網(wǎng)友應(yīng)該知道,繪制矢量圖時有一個非常常用的功能——陣列。遺憾的是,直到2016版的PPT都沒有將這個功能添加進(jìn)去(可能有,作者沒找到),難道是因為沒有人需要這種功能嗎?也許有網(wǎng)友的動手能力比較強(qiáng),直接復(fù)制后再對齊,非常暴力。作者屬于比較懶的,像這種規(guī)則的排列是懶得動手的。而且,常用的陣列有三種:矩形、環(huán)形、環(huán)形并旋轉(zhuǎn)。第一種可以暴力解決,后兩種呢?沒有一定的三角函數(shù)的知識是解決不了的。因此,作者認(rèn)為,用程序自動陣列是很有必要的。有高手能用VBA解決,缺點是VBA得跟著文檔走,PPT默認(rèn)還會禁用宏,一般用戶不打開開發(fā)工具還找不著它。在PPT的功能界面添加這么一個功能,既方便又實用。

無圖無真相,先上圖

▲三種不同類型的陣列

▲PPT陣列加載項

“陣列”選項卡完全和內(nèi)置的選項卡融為一體了,不知道的人還以為是軟件自帶的功能呢,哈哈。本著能網(wǎng)上下載就不自己動手的原則,先附上下載鏈接(需要.net 4.0)。

下面開始教程:

序言:作者用的是VS2017,PowerPoint 2016,理論上別的版本也適合。

1、安裝開發(fā)環(huán)境

▲添加Office/SharePoint開發(fā)

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

作者用的是C#,.Net版本需要4.0以上,選中PowerPoint 2013和2016 VSTO外接程序,給你的工程取個名字,如PowerPointArray,單擊確定。

3、界面設(shè)計

3.1 添加一個Ribbon界面,項目——添加新項——功能區(qū)(可視化設(shè)計器),隨便起個名稱,如RibbonArray.cs,如圖

3.2 界面設(shè)計

單擊TadAddIns(內(nèi)置),在右邊修改成屬性。ControlldType改成Custom,Label改成陣列。單擊group1,其Label改成陣列。在陣列這個group上拉控件:

Dropdown——1個,用來存放不同的陣列類型,添加3個Items,Label分別設(shè)置為矩形、環(huán)形、環(huán)形(旋轉(zhuǎn))

EditBox——4個,用來給用戶輸入?yún)?shù)

Button——1個,生成陣列

最終效果如下圖

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 = "水平數(shù)量";

                editBox3.Label = "豎直間距";

                editBox4.Label = "豎直數(shù)量";

                break;

            case 1:

            case 2:

                editBox1.Label = "角度";

                editBox2.Label = "數(shù)量";

                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;//水平方向間距,默認(rèn)單位為磅,需要轉(zhuǎn)換成厘米

        int xNum = Convert.ToInt32(editBox2.Text);//水平方向陣列個數(shù)

        float yInterval = Convert.ToSingle(editBox3.Text) * 72 / 2.54f;//豎直方向間距,默認(rèn)單位為磅,需要轉(zhuǎn)換成厘米

        int yNum = Convert.ToInt32(editBox4.Text);//豎直方向陣列個數(shù)

        Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange.Left -= 12;//選中圖形的位置向左移12磅,復(fù)制時會自動加12

        Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange.Top -= 12;//選中圖形的位置向上移12磅,復(fù)制時會自動加12

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

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

        //開始循環(huán)復(fù)制

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

        {

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

                {

                        if (x == 1 && y == 1) continue;//已經(jīng)有一個了,少復(fù)制一個了

                        Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange.Duplicate();//復(fù)制一個,水平和豎直方向會自動加12

                        Globals.ThisAddIn.Application.ActiveWindow.Selection.ShapeRange.Left = xOriginal + (x - 1) * xInterval;//更改原始圖的位置,為下一次復(fù)制做準(zhǔn)備

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

                }

        }

        //最后一個移到了右下角的位置,不需要復(fù)制了,直接手動加上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軟件沒運行。輸入合適的參數(shù),點生成就能直接生成陣列了。效果如下圖。

環(huán)形(旋轉(zhuǎn))陣列就屬于數(shù)學(xué)問題了,大家可以自己琢磨,再次附上下載連接。

作者編程能力很差,也不規(guī)范,本著能解決問題的原則寫代碼,高手勿嘲笑,有需要的直接下載。

廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關(guān)文章

關(guān)鍵詞:Win10教程,Win10學(xué)院

軟媒旗下網(wǎng)站: IT之家 最會買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機(jī)APP應(yīng)用 魔方 最會買 要知