此篇對應功能出自:第10波-快速排列工做表圖形對象 - 簡書 https://www.jianshu.com/p/eab71f2969a6數據庫
在Excel的對象模型中,列的寬度不是通常所期待的和行高同樣是磅爲單位,而是由當前所設定的字符大小的字符寬度爲單位,導致在根據圖片大小來調整列寬時,沒有辦法調整到位,老是有那麼一點點偏差。編程
此篇介紹的圖形排列過程當中,也會受此困擾,間接使用循環的方式將列寬調整好,或者用當前的ColumnWidth和Width兩個值來算他們之間的比例的方式,但仍然有偏差,因此Excel催化劑的圖片系列功能,都改成使用PictureBox容器的方式解決圖片縱橫比問題。服務器
將全部選定的圖形進行從上往下的按列排列,或從左往右的按行排列兩種方式。須要記錄到全部圖形的基本信息如top、left、height、width等屬性,新建一個實體類來存儲這些信息,利用.Net裏的泛型的特定來解決它。微信
class ShapeInfo { public int ShapeIndex { get; set; } public Single Height { get; set; } public Single Width { get; set; } public Excel.Range TopLeftCell { get; set; } public Single Top { get; set; } public Single Left { get; set; } }
再經如下的主方法,將圖形信息存入List集合,並從中取出最大的寬度的圖形,做爲這次圖形排列的列寬。函數
再用一個While循環,讓列寬和當前最大的圖形列寬相等,因轉換系數問題,老是會有一點點小偏差的。工具
調整圖形的顯示也是很重要shp.Placement = Excel.XlPlacement.xlMoveAndSize;此屬性可保證用戶再編輯行列寬時,圖形會跟着自動縮小放大。學習
圖形的高度,使用和單元格的高度貼合,方便後期調整行列高時自動調整,會有原圖形有些許的大小出入,若是非圖片,變形影響不大。
shp.Height = (Single)actSht.Range[shp.TopLeftCell, shp.BottomRightCell].Height;插件
最後,不一樣圖形累在一塊兒,只需改變其Top屬性便可,將下一個Top屬性定位在當前的Top位置+當前的圖形的高度。excel
dstRangeTop = dstRangeTop + shp.Height;code
public static void ArrangeShapeByCol(Excel.ShapeRange shpSelected, Excel.Range dstRange) { Excel.Worksheet actSht = dstRange.Worksheet; List<Entity.ShapeInfo> ShapeLists = GetShapelist(shpSelected); int increaseColwidthStep = 0; Single shapMaxWidth = ShapeLists.Max(s => s.Width); while (dstRange.Width < shapMaxWidth) { increaseColwidthStep++; dstRange.EntireColumn.ColumnWidth = dstRange.EntireColumn.ColumnWidth + increaseColwidthStep; } Single dstRangeTop = (Single)dstRange.Top; foreach (Entity.ShapeInfo shpInfo in ShapeLists.OrderBy(s => s.Top)) { Excel.Shape shp = shpSelected.Item(shpInfo.ShapeIndex); shp.Top = dstRangeTop; shp.Left = (Single)dstRange.Left; shp.Width = (Single)dstRange.Width; shp.Height = (Single)actSht.Range[shp.TopLeftCell, shp.BottomRightCell].Height; shp.Placement = Excel.XlPlacement.xlMoveAndSize; //把top的值改寫爲top+這次循環的shp的高度設置值 dstRangeTop = dstRangeTop + shp.Height; } }
雖然此篇在VBA的方式下實現也不難,但利用了.Net編程環境下的泛型、Linq查詢等特性,在代碼編寫過程當中,將變得很是優雅,和天然思惟很是接近,代碼量也很精簡便可完成,再次讓你們看到VSTO的方式下開發的高效性。
QQ羣名:Excel催化劑開源討論羣, QQ羣號:788145319
Excel催化劑先是一微信公衆號的名稱,後來順其名稱,正式推出了Excel插件,插件將持續性地更新,更新的週期視本人的時間而定爭取一週可以上線一個大功能模塊。Excel催化劑插件承諾我的用戶永久性無償使用!
Excel催化劑插件使用最新的佈署技術,實現一次安裝,往後全部更新自動更新完成,無需重複關注更新動態,手動下載安裝包從新安裝,只需一次安裝便可隨時保持最新版本!
Excel催化劑插件下載連接:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q
取名催化劑,因Excel自己的強大,並不是全部人可以立馬享受到,大部分人仍是在被Excel軟件所虐的階段,就是頭腦裏很清晰想達到的效果,並且高手們也已經實現出來,就是本身怎麼弄都弄不出來,或者更糟的是還不知道Excel可以作什麼而停留在不斷地重複、機械、手工地在作着數據,耗費着無數的青春年華歲月。因此催生了是否能夠做爲一種媒介,讓廣大的Excel用戶們能夠瞬間點燃Excel的爆點,無需苦苦地掙扎地沒日沒夜的技巧學習、高級複雜函數的燒腦,最終走向了從入門到放棄的道路。
最後Excel功能強大,其實還需樹立一個觀點,不是全部事情都要交給Excel去完成,也不是全部事情Excel都是十分勝任的,外面的世界仍然是一個廣闊的世界,Excel只是其中一枚耀眼的明星,還有其餘更多一樣精彩強大的技術、工具等。*Excel催化劑也將借力這些其餘技術,讓Excel可以發揮更強大的爆發!
姓名:李偉堅,從事數據分析工做多年(BI方向),一名一樣在路上的學習者。
服務過行業:零售特別是鞋服類的零售行業,電商(淘寶、天貓、京東、惟品會)
技術路線從一名普通用戶,經過Excel軟件的學習,今後走向數據世界,非科班IT專業人士。
歷經重重難關,終於在數據的道路上達到技術平原期,學習衆多的知識再也不太吃力,同時也造成了本身的一套數據解決方案(數據採集、數據加工清洗、數據多維建模、數據報表展現等)。
擅長技術領域:Excel等Office家族軟件、VBA&VSTO的二次開發、Sqlserver數據庫技術、Sqlserver的商業智能BI技術、Powerbi技術、雲服務器佈署技術等等。
2018年開始職業生涯做了重大調整,從原來的正職工做,轉爲自由職業者,暫無固定收入,暫對前面道路不太明朗,苦從新回到正職工做,對Excel催化劑的運營和開發一定受到很大的影響(正職工做時間內不可能維護也不可能隨便把工做時間內的成果公佈於外,工做外的時間也十分有限,因已而立之年,家庭責任重大)。
和廣大擁護者一同期盼:Excel催化劑一直能運行下去,我所惠及的羣體們可以給予支持(多留言鼓勵下、轉發下朋友圈推薦、小額打賞下和最重點的能夠和所在公司及同行推薦推薦,讓個人技術能夠在貴司發揮價值,實現共贏(初步設想能夠數據顧問的方式或一些小型項目開發的方式合做)。