感謝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之家所有文章均包含本聲明。