Sub Align_Pictures()
    Dim shp As Shape
    Dim N As Integer
    Dim cnt As Integer
    Dim rowcnt As Integer
    Dim C As Range
    
    N = 5
    Set C = Cells(5, 3) '이미지 삽입 위치
    
    Debug.Print (ActiveSheet.Shapes.Range("그림 22").height) '그림 높이
    Debug.Print (ActiveSheet.Shapes.Range("그림 22").Width)  '그림 너비
    
    For Each shp In ActiveSheet.Shapes
      With shp
        If .Name Like "*Picture*" Then
          .ScaleHeight 1#, True, msoScaleFromTopLeft
          .ScaleWidth 1#, True, msoScaleFromTopLeft
        End If
      End With
    Next shp

    For Each shp In ActiveSheet.Shapes
        Select Case shp.Type
        Case msoPicture, msoMedia, msoShapeTypeMixed, msoOLEControlObject, msoAutoShape
            
            shp.Left = C.Left + cnt * C.Width
            shp.Top = C.Top + rowcnt * (C.height + Cells(6, 3).height)
            

            Debug.Print (rowcnt)
            Debug.Print (cnt)
            
        Case Else
        End Select
        
        cnt = cnt + 1
        If cnt = N Then
            rowcnt = 1
            cnt = 0
        End If
            
            
    Next
        
End Sub

Range

range(행,열)


1 -> 1행
4:7 -> 4~7행
즉 길이는 세로길이


3 -> 3열
2:5 -> 2~5열
즉 길이는 가로길이

B1 ~ H6 만들고 싶다면?
(1~6, B~H) 이므로
(0:6,1:8) 하면 된다.

 

예시

import xlwings as xw
wb = xw.Book("test.xlsm")
Sheet1 = wb.sheets[0]

wb.sheets[0].range("a4:z4").api.Insert(InsertShiftDirection.xlShiftDown)
Sheet1['c4:d4'].merge()
Sheet1.range('a8').api.RowHeight = 16.9
k = Sheet1[7,2:2+N]

https://streamls.tistory.com/262

 

Python - 엑셀에서 파이썬 매크로 사용하기(xlwings 설치)

현대 사회에서 엑셀의 지위는 정말... 이걸 빼고서는 업무를 상상할 수 없을 정도로 막강한데요,,, 한가지 아쉬운 점이 매크로를 작성할 때 Visual Basic을 사용한다는 것입니다. 그게 무슨 아쉬운

streamls.tistory.com

다른거 다실패 이건 성공

https://antilibrary.org/2326

 

엑셀과 파이썬 결합을 통한 강력한 엑셀 활용법 How to Supercharge Excel With Python

Photo by Lukas from Pexels How to integrate Python and Excel with xlwings 엑셀과 파이썬을 결합하여 사용할 수 있다면, 엑셀에 날개를 다는 것이나 마찬가지다. xlwings 라고 불리는 파이썬 라이브러리는..

antilibrary.org

https://investcommodity.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC-xlwings

 

파이썬 xlwings

1. DB 구축이 안되어 있는 이유가 가장 크겠지만 여러가지로 아직까지 엑셀을 버리기는 힘들다.  파이썬을 이용하여 엑셀을 다루는 라이브러리 여러가지를 보고 있는데 https://libsora.so/posts/python-e

investcommodity.tistory.com

https://blog.naver.com/o12486vs2/222270908439

 

엑셀 자동화의 시작 엑셀에 파이썬 날개다는 방법 - 파이썬과 xlwings설치부터 sample예제실행까지

엑셀에서 파이썬을 사용할 수있도록 하는 것 아주 좋습니다~ 그런데 처음에 약간이지만 귀찮은것이 있습니...

blog.naver.com

https://streamls.tistory.com/262

 

Python - 엑셀에서 파이썬 매크로 사용하기(xlwings 설치)

현대 사회에서 엑셀의 지위는 정말... 이걸 빼고서는 업무를 상상할 수 없을 정도로 막강한데요,,, 한가지 아쉬운 점이 매크로를 작성할 때 Visual Basic을 사용한다는 것입니다. 그게 무슨 아쉬운

streamls.tistory.com

https://maeng-gun.github.io/excel/excel1/

 

사내망 엑셀파일에 걸린 자물쇠를 뚫고 코딩하기

엑셀 자동화 (1) - xlwings 라이브러리 시작하기

maeng-gun.github.io

https://maeng-gun.github.io/excel/excel4/

 

DRM 걸린 엑셀 파일을 판다스 데이터프레임으로 불러오기

엑셀 자동화 (4) - 엑셀과 판다스를 연동시켜보자

maeng-gun.github.io

 

목표: 집에 방 8개, 투숙객 있는 방 목록 만들기, 모든 방에 있으면 언급X

 

https://www.oppadu.com/%EC%97%91%EC%85%80-%EC%A4%91%EB%B3%B5%EA%B0%92-%EC%A0%9C%EA%B1%B0-%ED%95%A8%EC%88%98-%EA%B3%B5%EC%8B%9D/

 

엑셀 중복값 제거 및 고유값 추출 하기 :: 엑셀 함수 공식 - 오빠두엑셀

엑셀 중복값 제거 (또는 고유값 추출) 함수 공식 알아보기  함수공식 옵션1. INDEX/MATCH 배열수식 (정방향 출력) { = INDEX($참조범위, MATCH (0, COUNTIF($머릿글:머릿글, $참조범위), 0)) } 옵션2. LOOKUP 간단

www.oppadu.com

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

중복제거

=IFERROR(LOOKUP(2,1/(COUNTIF($C$1:C1,$B$2:$B$14)=0),$B$2:$B$14),"")

빈 칸이 0으로 인식돼서 그냥 0을 처음부터 넣어버림.

 

오름차순

=SORT(C2:C13)

 

이름소스

=","&D3

 

이름

=IF(ISTEXT(D3),"",E3) 

SORT로 정렬된 빈 부분이 TEXT로 인식돼서 이 부분 없애줌.

 

=IF(COUNT(C3:C13)>=8,"_","방"&F3&F4&F5&F6&F7&F8&F9&F10&F11&F12&F13&"_")

 

<함수>

IFERROR

LOOKUP

COUNTIF

SORT

ISTEXT(), ISBLANK(), ISNUMBER()

목표: 프로그램에서 이미지 목록 순서대로 열고 캡쳐 열고 캡쳐 반복. 후 엑셀에 예쁘게 붙여넣기까지.

1. 오토핫키로 저장까지.

 

2. 오토핫키로 픽픽 실행.

 

3. 파이썬으로 엑셀삽입까지 실행.

PyAutoGUI 사용 https://pyautogui.readthedocs.io/en/latest/index.html 

https://blankspace-dev.tistory.com/417 

https://goodthings4me.tistory.com/491

1) 이미지 캡쳐

import pyautogui as pag
pag.moveTo(1100,550) #이미지파일 위치

a = [0, 1, 2, 3, 4, 5, 6]
for i in a:
    pag.doubleClick(880+216*i,550) #이미지파일 더블클릭
    pag.sleep(2.2)
    pag.write(['printscreen']) #printscreen 누르기
    pag.sleep(0.7)
    pag.moveTo(77,352) #이미지 시작위치로 이동
    pag.drag(1061,704,duration=1,button='left') #클릭한채로 드래그
    pag.sleep(1.5)
    pag.click(2518,19) #픽픽 최소화
    pag.sleep(0.6)
    pag.click(1153,188) #엑스창 클릭
    pag.sleep(0.5)   
    i += 1

효율 개별로.

마우스 말고 키보드 사용해야될듯.

멍청한데 구경하는 재미는 있는 코드 ㅎㅎ

 

import pyautogui as pag
pag.moveTo(1100,550) #이미지파일 위치

a = list(range(0,7))
for i in a:
    pag.doubleClick(880+216*i,550) #이미지파일 더블클릭
    pag.sleep(2.2)
    
    img_name = '하{}.png'.format(i)
    pag.screenshot(img_name, region = (77, 352, 1061, 704))
    pag.sleep(0.5)
    pag.click(1153,188) #엑스창 클릭
    pag.sleep(0.5)
    i += 1

훨씬 빠르고 낫다.

이름이 하1,... 인건 그래야 뒤에 생겨서...

 

 

2) 이미지 삽입

import openpyxl
from openpyxl import Workbook
from openpyxl.drawing.image import Image

wb = Workbook()
ws = wb.active

c = ['A50', 'C50', 'E50', 'G50', 'I50','K50','M50','O50']
ws['A49'] = '아래 사진이 삽입될거에용'

for _num in a:
    image_list = ['하0.png','하1.png','하2.png','하3.png','하4.png','하5.png','하6.png'] 
    
    img = Image(image_list[_num])
    img.height = 200
    img.width = 150

    ws.add_image(img, c[_num])
    _num += 1
    
wb.save('이미지엑셀.xlsx')

Q1.파일 새로만들기 말고 원래파일에 쓰는건?

Q2.이미지 이름 수정. 자동으로 못하나?

Q3.셀이름도 자동으로 좀..

Q4.픽셀 말고 cm는 안될까(큰상관은없음)

 

A1.

#새 excel파일 생성
from openpyxl import Workbook
wb = Workbook() #새 워크북 생성
ws = wb.active #현재 활성화된 sheet가져옴
~~
wb.save("test.xlsx")

#기존 excel파일 사용
from openpyxl import load_workbook
wb = load_workbook("test.xlsx") #기존 파일 불러오기
ws = wb.active

#Cell의 수식이 아닌 값을 읽고 싶다면
wb = load_workbook("test.xlsx", data_only=True)
ws = wb.active

A2.

i = 0
b = []
for i in range(0, 7):
    a = '하'+ str(i)+'.png'
    b.append(a)
    i += 1
    
print(b)
print(b[1])
print('하'+b[2])
['하0.png', '하1.png', '하2.png', '하3.png', '하4.png', '하5.png', '하6.png']
하1.png
하하2.png

str()로 해결.

 

A3. 

from openpyxl import load_workbook
from openpyxl.drawing.image import Image
from openpyxl.utils import get_column_letter, column_index_from_string

wb = load_workbook('test.xlsx')
ws = wb.active

_col = get_column_letter(3)
_cell_value = _col+str(33)

_cell = str(_cell_value) #문자로 변환
print(_cell_value) #얘랑
print(_cell) #얘랑 값이 같아보이지만 다르다

img = Image("하2.png")
ws.add_image(img, _cell)

wb.save('test_2.xlsx')

너무 힘들었다...

add_image 함수에는 셀값을 넣어야 하는데 셀값을 어떻게 만드느냐가 너무 어려웠음

 

A4.

1cm = 37.7952755906px

1px = 0.0264583333cm

라고한다.

# 1cm = 37.7952755906px
_cm = [,]
img.height = _cm[0]*37.7952755906
img.width = _cm[1]*37.7952755906

 

3) 최종본

from openpyxl import load_workbook
from openpyxl.drawing.image import Image
from openpyxl.utils import get_column_letter, column_index_from_string

wb = load_workbook('test.xlsx') # 입력
ws = wb.active
img_is = []
i = 0

for i in range(0,7):  # 입력
    _col = get_column_letter(i*2+2)
    _cell_value = _col+str(6)

    _cell = str(_cell_value) 
    print(_cell_value)
    print(_cell) 

    img_name = '하'+ str(i)+'.png' # 입력
    img_is.append(img_name)
    
    img = Image(img_is[i])

    _cm = [3.23,3.76]  # 입력
    img.height = _cm[0]*37.7952755906
    img.width = _cm[1]*37.7952755906
    
    ws.add_image(img, _cell)

wb.save('test_2.xlsx') # 입력

 

결과

맘에든다..

import win32com.client       # Need pywin32 from pip
from PIL import ImageGrab    # Need PIL as well
import win32com.client as win32

excel = win32com.client.Dispatch("Excel.Application")
workbook = excel.Workbooks.Open(r'C:\Users\경로\파일명.xlsx')

wb_folder = workbook.Path
wb_name = workbook.Name


image_no = 0

for sheet in workbook.Worksheets:
    for i, shape in enumerate(sheet.Shapes):
        if shape.Name.startswith('Picture'):
            shape.Copy()
            image = ImageGrab.grabclipboard()
            image.save('{}.jpg'.format(i+1), 'png')

 

 

출처: https://www.kejisen.com/ko/article/203874816.html

> 마지막에 jpeg만 png로 바꿨는데 형식은 jpg. 저게 왜필요한지?

https://automatetheboringstuff.com/

 

Automate the Boring Stuff with Python

Automate the Boring Stuff with Python "The best part of programming is the triumph of seeing the machine do something useful. Automate the Boring Stuff with Python frames all of programming as these small triumphs; it makes the boring fun." - Hilary Mason,

automatetheboringstuff.com

Automate the Boring Stuff with Python

By Al Sweigart. Free to read under a Creative Commons license.

 

파이썬 공부 시작

목표는 회사 업무 노가다 타파!

 

책 고르는 기준은 두개였다.

엑셀 업무 자동화

이미지 파일 변환 기능

 

요 책이 둘 다 만족하더라.

글고 제목부터가 파이썬으로 지루한 일 자동화하기... 

한글판도 나왔는데 일단 영판이 무료니까ㅎ 도전해보고 안되면 그때 생각해보는걸로...

 

참고로 다음은 후보들.

후보>

 

엑셀 자동화 with 파이썬 - 교보문고

복잡하고 지루한 반복 업무를 쉽고 빠르게 해치우는 방법 | ★ 이 책에서 다루는 내용 ★ ◎ 아나콘다(Anaconda)를 활용한 파이썬 개발 환경 설치, 주피터 노트북 사용법◎ 파이썬 기본 문법, 문자

www.kyobobook.co.kr

 

싸니까 믿으니까 인터파크도서

Part 1 업무 자동화 첫걸음 Chapter 1 업무 자동화를 시작하며 01 책 한 권으로 자동화를 배우는 게 가능할까? 02 쉬운 자동화, 정말 가능할까? 03 업무 자동화가 현실에서 도움이 될까? Chapter 2 업무 자

book.interpark.com

 

파이썬 머신러닝 판다스 데이터 분석 - 교보문고

너도 할 수 있어, 판다스!사회적으로 데이터 분석에 대한 관심이 커지면서 머신러닝에 입문하려는 사용자들도 늘어났다. 하지만 복잡하고 어려운 고급적인 수학과 통계학 이론 도서들로는 금방

www.kyobobook.co.kr

+ Recent posts