Excel 圖形處理的程式化

本文實際上是【Hebrew Flashcards 字型彙整】的延伸,但是談論的重點則着眼在 Excel 圖形的處理與程式管控的技巧。
首先,看下 01 ancient.jpg 圖檔的圖形及屬性資料,可以知道它是個 197 * 195 像素的圖檔。
01 ancient  image
要在 Excel 中,將該圖形檔案插入進來,就需要執行:插入/圖片/從檔案 …
image 當然插入後的圖形大小,還是會像上面圖形一樣,不會像下圖紅色圓框中的小圖形。
要變成小圖形,就要處理圖形:由大要變小

在Excel中,插入的第一張圖片,它的名稱:圖片1 第二張就是圖片2,同理,以此類推!
但在程式管控中,圖片則以 Picture 表示。

開啟已經插入過圖片的Excel檔案,若是需要新插入的圖片名稱仍然由圖片1產生,唯一方法就是在該檔案存檔前,先選取所有的圖片,並加以刪除之。ActiveSheet.Shapes.SelectAll
Selection.Delete
 image
以下說明圖形處理過程,所需用到的程式碼:
  • 記錄 Excel 檔案的存放路徑   
        strFilePath = Application.ActiveWorkbook.Path
  • 選取所有的圖片,並加以刪除   
        ActiveSheet.Shapes.SelectAll
        Selection.Delete
  • 設定存放縮小圖片的儲存格高度   
        ' set Row Height
        Rows("2:23").Select:    Selection.RowHeight = 40
  • 逐一插入 22個字母、四種字型圖檔
        For i = 1 To 22
            ActiveSheet.Pictures.Insert(strFilePath + "\jpg\" + Format(i, "00") + " ancient.jpg").Select
            ActiveSheet.Pictures.Insert(strFilePath + "\jpg\" + Format(i, "00") + " block.jpg").Select
            ActiveSheet.Pictures.Insert(strFilePath + "\jpg\" + Format(i, "00") + " cursive.jpg").Select
            ActiveSheet.Pictures.Insert(strFilePath + "\jpg\" + Format(i, "00") + " book.jpg").Select
        Next
  • 設定圖片縮小後的尺寸
        ActiveSheet.Shapes.SelectAll
        Selection.ShapeRange.LockAspectRatio = msoFalse
        ' Selection.ShapeRange.LockAspectRatio = msoTrue
              Selection.ShapeRange.Height = 38    ' (72 / 2.54) * 1.4     ' cm
              Selection.ShapeRange.Width = 38     ' (72 / 2.54) * 1.4
  • 將縮小圖片,逐一放置到指定位置上;程式碼 Int(i / 4) 是在做圖素計算的精度修正!   
        ' set Position
        sPos = 18
        For i = 1 To 22      
            ActiveSheet.Shapes("Picture " + Format((i - 1) * 4 + 1, "#")).Select:  Selection.ShapeRange.Left = 227:  Selection.ShapeRange.Top = sPos + 40 * (i - 1) - Int(i / 4)
            ActiveSheet.Shapes("Picture " + Format((i - 1) * 4 + 2, "#")).Select:  Selection.ShapeRange.Left = 295:  Selection.ShapeRange.Top = sPos + 40 * (i - 1) - Int(i / 4)
            ActiveSheet.Shapes("Picture " + Format((i - 1) * 4 + 3, "#")).Select:  Selection.ShapeRange.Left = 363:  Selection.ShapeRange.Top = sPos + 40 * (i - 1) - Int(i / 4)
            ActiveSheet.Shapes("Picture " + Format((i - 1) * 4 + 4, "#")).Select:  Selection.ShapeRange.Left = 431:  Selection.ShapeRange.Top = sPos + 40 * (i - 1) - Int(i / 4)
       Next

沒有留言: