본문 바로가기
업무자동화/파이썬-아래아한글 자동화 응용

[자동화문의] 표 안에 이미지 넣는 작업

by 회사원코딩 2020. 12. 6.
반응형
[1]
안녕하세요? 
코딩하는 회사원들 유튜브 채널 구독자입니다.
궁금한것이 있어 이렇게 메일 드립니다.
저희회사에서는 매월 천개가 넘는 그림파일을 한글파일의 특정서식의 표에 붙여넣는 단순 업무가 있습니다.
그림파일명은 규칙이 있으며 그 파일이 들어가야할 위치가 정해져 있습니다. 가끔 파일이 생성이 되지 않을 수도 있는데 이 경우는 빈칸으로 내버려 두어야 합니다. 
혹시 이 업무를 자동화 할 수 있도록 파이썬으로 구현해 주실 수 있는지요? 하실수 있으시다면 비용은 얼마나 드리면 되는지요?
답변 부탁드리겠습니다.

[2]
안녕하세요? 답변 감사하며 무료로 해주신다니 더욱 감사합니다.
역시 뭐든지 알면 쉽고 모르면 손발이 고생하네요. 천개정도의 그림인줄 알았는데 그림이 3천개가 넘는다고 하네요. ㅜㅜ
예시자료는 첨부하였습니다.
그림파일은 제가 임의로 만든것이며 파일명은 제가 분석한 결과의 파일명 규칙과 같습니다.
국가용역사업이라 원 그림파일은 첨부하지 못한점 죄송합니다.
코딩하실때 다음을 참조하시면 되실듯 합니다.
1. 파일명은 다음과 같은 규칙을 가지고 있습니다.
네트워크코드.장소코드..채널명_그림파일종류.png입니다.
장소코드는 3자리 또는 네자리입니다.
2. 한글파일 한장에 한 장소의 한타입의 그림들이 9장 들어갑니다.
한글파일을 보시면 그림이 들어가야할 자리에 파일명을 적어 뒀습니다.
3. 페이지 위에 코드명이 적혀 있으며 이것이 장소코드입니다.
4. 페이지 위에 타입이 적혀 있으며 괄호안이 채널명입니다.
채널은 E, N, Z 세종류입니다. 
5. 그림종류는 time, PDF, temporal 세종류입니다.
이상입니다.
감사합니다.

아래는 첨부해주신 예시자료입니다. 임의로 생성한 이미지들과 예시 HWP파일이 들어 있네요.

압축을 풀어보니 아래와 같은 자료가 나옵니다.

예시자료.zip
0.06MB
압축 파일 안에 들어있는 이미지들과 문서파일. 실제 이미지는 3천여개라고 하심.

문서도 한 번 열어보니 아래와 같은 서식입니다.

문서 서식은 이와 같다.

의외로 간단하네요. (보내주신 원본 내용을 다소간 수정하였습니다.)

이와 같은 순서로 해당 아홉 개의 이미지를 찾아서 한 페이지에 넣으면 끝.

이미지가 많다는 것 말고는 문제될 게 없는 것 같아요.

자동화한 영상은 다음과 같습니다. (이게 만들어드린 최종본은 아닙니다.)

[움짤]표생성 및 이미지삽입 자동화

 

표생성 및 이미지삽입 자동화

그리고 아래는 파이썬 코드입니다.

기타 영상의 코드예제와 달리 def나 main 하나없이

실행 순서대로만 쭉 적어놓은, 날것의 코드입니다. 리뷰나 부분실행에 참 편하죠.

# %% 임포트

from tkinter import Tk
from tkinter.filedialog import askopenfilenames
import os
import win32com.client as win32

# %% 이미지파일 선택

root = Tk()  # 이미지선택창 열기
imagelist = askopenfilenames()
root.destroy()  # 이미지선택창 닫기

BASE_DIR = imagelist[0].rsplit("/", maxsplit=1)[0]  # 이미지리스트에서 경로 추출
imagelist = [i.rsplit("/", maxsplit=1)[1] for i in imagelist]  # 이미지리스트에서 파일명만 남김

# %% 표_리스트 만들기

표_리스트 = list(set([i.split("_")[0][:-1] for i in imagelist]))
표_리스트.sort()

# %% 한/글 오브젝트 생성

hwp = win32.gencache.EnsureDispatch("HWPFrame.HwpObject")  # 한/글 오브젝트 생성
hwp.XHwpWindows.Item(0).Visible = True  # 숨김해제
hwp.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")  # 실행하는 컴퓨터에서 레지스트리 등록해야 함
# 참고영상 : https://www.martinii.fun/entry/파이썬-아래아한글-보안모듈-설치방법귀찮은-보안팝업-제거-1

# %% 여백조정

hwp.HAction.GetDefault("PageSetup", hwp.HParameterSet.HSecDef.HSet)
hwp.HParameterSet.HSecDef.PageDef.Landscape = 1  # 가로로
hwp.HParameterSet.HSecDef.PageDef.LeftMargin = hwp.MiliToHwpUnit(25.0)
hwp.HParameterSet.HSecDef.PageDef.RightMargin = hwp.MiliToHwpUnit(20.0)
hwp.HParameterSet.HSecDef.PageDef.TopMargin = hwp.MiliToHwpUnit(15.0)
hwp.HParameterSet.HSecDef.PageDef.BottomMargin = hwp.MiliToHwpUnit(15.0)
hwp.HParameterSet.HSecDef.PageDef.HeaderLen = hwp.MiliToHwpUnit(0.0)
hwp.HParameterSet.HSecDef.PageDef.FooterLen = hwp.MiliToHwpUnit(0.0)
hwp.HParameterSet.HSecDef.PageDef.GutterLen = hwp.MiliToHwpUnit(0.0)
hwp.HParameterSet.HSecDef.HSet.SetItem("ApplyClass", 24)
hwp.HParameterSet.HSecDef.HSet.SetItem("ApplyTo", 3)  # 문서 전체 변경
hwp.HAction.Execute("PageSetup", hwp.HParameterSet.HSecDef.HSet)

for idx, content in enumerate(표_리스트):
    # %% 표 생성
    
    hwp.HAction.GetDefault("TableCreate", hwp.HParameterSet.HTableCreation.HSet)
    hwp.HParameterSet.HTableCreation.Rows = 5
    hwp.HParameterSet.HTableCreation.Cols = 3
    hwp.HParameterSet.HTableCreation.WidthType = 2
    hwp.HParameterSet.HTableCreation.HeightType = 1
    hwp.HParameterSet.HTableCreation.WidthValue = hwp.MiliToHwpUnit(250)  # 표만들기 포스팅 참고 
    hwp.HParameterSet.HTableCreation.HeightValue = hwp.MiliToHwpUnit(205)
    hwp.HParameterSet.HTableCreation.CreateItemArray("ColWidth", 5)
    hwp.HParameterSet.HTableCreation.ColWidth.SetItem(0, hwp.MiliToHwpUnit(79.73))
    hwp.HParameterSet.HTableCreation.ColWidth.SetItem(1, hwp.MiliToHwpUnit(79.73))
    hwp.HParameterSet.HTableCreation.ColWidth.SetItem(2, hwp.MiliToHwpUnit(79.73))
    hwp.HParameterSet.HTableCreation.CreateItemArray("RowHeight", 5)
    hwp.HParameterSet.HTableCreation.RowHeight.SetItem(0, hwp.MiliToHwpUnit(10.0))
    hwp.HParameterSet.HTableCreation.RowHeight.SetItem(1, hwp.MiliToHwpUnit(10.0))
    hwp.HParameterSet.HTableCreation.RowHeight.SetItem(2, hwp.MiliToHwpUnit(50))
    hwp.HParameterSet.HTableCreation.RowHeight.SetItem(3, hwp.MiliToHwpUnit(50))
    hwp.HParameterSet.HTableCreation.RowHeight.SetItem(4, hwp.MiliToHwpUnit(50))
    hwp.HParameterSet.HTableCreation.TableProperties.TreatAsChar = 1  # 글자처럼 취급
    hwp.HParameterSet.HTableCreation.TableProperties.Width = hwp.MiliToHwpUnit(250)
    hwp.HAction.Execute("TableCreate", hwp.HParameterSet.HTableCreation.HSet)

    # %% 라인 투명 설정
    
    hwp.HAction.Run("TableCellBlockRow")  # 표 1행 선택
    hwp.HAction.GetDefault("CellBorder", hwp.HParameterSet.HCellBorderFill.HSet)
    hwp.HParameterSet.HCellBorderFill.TypeVert = hwp.HwpLineType("None")  # 세로줄 투명
    hwp.HAction.Execute("CellBorder", hwp.HParameterSet.HCellBorderFill.HSet)

    hwp.HAction.Run("TableColPageDown")  # 표 전체 선택
    hwp.HAction.GetDefault("CellBorder", hwp.HParameterSet.HCellBorderFill.HSet)
    hwp.HParameterSet.HCellBorderFill.BorderTypeTop = hwp.HwpLineType("None")  # 상단 투명
    hwp.HParameterSet.HCellBorderFill.BorderTypeRight = hwp.HwpLineType("None")  # 우측 투명
    hwp.HParameterSet.HCellBorderFill.BorderTypeLeft = hwp.HwpLineType("None")  # 좌측 투명
    hwp.HAction.Execute("CellBorder", hwp.HParameterSet.HCellBorderFill.HSet)
    hwp.HAction.Run("Cancel")  # 셀선택 해제

    # %% 커서를 2행(A2)으로 이동
    
    # hwp.HAction.Run("TableCellBlock")
    hwp.HAction.Run("TableColBegin")
    hwp.HAction.Run("TableColPageUp")
    hwp.HAction.Run("TableLowerCell")
    hwp.HAction.Run("Cancel")

    # %% 제목 3개 셀 색 채우기
    
    hwp.HAction.GetDefault("CellFill", hwp.HParameterSet.HCellBorderFill.HSet)
    hwp.HParameterSet.HCellBorderFill.FillAttr.type = hwp.BrushType("NullBrush|WinBrush")
    hwp.HParameterSet.HCellBorderFill.FillAttr.WinBrushFaceColor = hwp.RGBColor(66, 199, 241)
    hwp.HParameterSet.HCellBorderFill.FillAttr.WinBrushHatchColor = hwp.RGBColor(153, 153, 153)
    hwp.HParameterSet.HCellBorderFill.FillAttr.WinBrushFaceStyle = hwp.HatchStyle("None")
    hwp.HParameterSet.HCellBorderFill.FillAttr.WindowsBrush = 1
    hwp.HAction.Execute("CellFill", hwp.HParameterSet.HCellBorderFill.HSet)

    hwp.HAction.Run("TableRightCell")  # 우측셀로 이동

    hwp.HAction.GetDefault("CellFill", hwp.HParameterSet.HCellBorderFill.HSet)
    hwp.HParameterSet.HCellBorderFill.FillAttr.type = hwp.BrushType("NullBrush|WinBrush")
    hwp.HParameterSet.HCellBorderFill.FillAttr.WinBrushFaceColor = hwp.RGBColor(50, 215, 9)
    hwp.HParameterSet.HCellBorderFill.FillAttr.WinBrushHatchColor = hwp.RGBColor(153, 153, 153)
    hwp.HParameterSet.HCellBorderFill.FillAttr.WinBrushFaceStyle = hwp.HatchStyle("None")
    hwp.HParameterSet.HCellBorderFill.FillAttr.WindowsBrush = 1
    hwp.HAction.Execute("CellFill", hwp.HParameterSet.HCellBorderFill.HSet)

    hwp.HAction.Run("TableRightCell")  # 우측셀로 이동

    hwp.HAction.GetDefault("CellFill", hwp.HParameterSet.HCellBorderFill.HSet)
    hwp.HParameterSet.HCellBorderFill.FillAttr.type = hwp.BrushType("NullBrush|WinBrush")
    hwp.HParameterSet.HCellBorderFill.FillAttr.WinBrushFaceColor = hwp.RGBColor(209, 209, 209)
    hwp.HParameterSet.HCellBorderFill.FillAttr.WinBrushHatchColor = hwp.RGBColor(153, 153, 153)
    hwp.HParameterSet.HCellBorderFill.FillAttr.WinBrushFaceStyle = hwp.HatchStyle("None")
    hwp.HParameterSet.HCellBorderFill.FillAttr.WindowsBrush = 1
    hwp.HAction.Execute("CellFill", hwp.HParameterSet.HCellBorderFill.HSet)

    # %% 제목행 다시 선택

    hwp.HAction.Run("TableColBegin")
    hwp.HAction.Run("TableColPageUp")
    hwp.HAction.Run("TableCellBlockRow")

    # %% 휴먼명조, 16pt로 변경

    hwp.HAction.GetDefault("CharShape", hwp.HParameterSet.HCharShape.HSet)
    hwp.HParameterSet.HCharShape.FaceNameUser = "휴먼명조"
    hwp.HParameterSet.HCharShape.FontTypeUser = hwp.FontType("TTF")
    hwp.HParameterSet.HCharShape.FaceNameSymbol = "휴먼명조"
    hwp.HParameterSet.HCharShape.FontTypeSymbol = hwp.FontType("TTF")
    hwp.HParameterSet.HCharShape.FaceNameOther = "휴먼명조"
    hwp.HParameterSet.HCharShape.FontTypeOther = hwp.FontType("TTF")
    hwp.HParameterSet.HCharShape.FaceNameJapanese = "휴먼명조"
    hwp.HParameterSet.HCharShape.FontTypeJapanese = hwp.FontType("TTF")
    hwp.HParameterSet.HCharShape.FaceNameHanja = "휴먼명조"
    hwp.HParameterSet.HCharShape.FontTypeHanja = hwp.FontType("TTF")
    hwp.HParameterSet.HCharShape.SizeLatin = 100
    hwp.HParameterSet.HCharShape.FaceNameLatin = "휴먼명조"
    hwp.HParameterSet.HCharShape.FontTypeLatin = hwp.FontType("TTF")
    hwp.HParameterSet.HCharShape.SizeHangul = 100
    hwp.HParameterSet.HCharShape.FaceNameHangul = "휴먼명조"
    hwp.HParameterSet.HCharShape.FontTypeHangul = hwp.FontType("TTF")
    hwp.HParameterSet.HCharShape.RatioUser = 100
    hwp.HParameterSet.HCharShape.SizeUser = 100
    hwp.HParameterSet.HCharShape.RatioSymbol = 100
    hwp.HParameterSet.HCharShape.SizeSymbol = 100
    hwp.HParameterSet.HCharShape.RatioOther = 100
    hwp.HParameterSet.HCharShape.SizeOther = 100
    hwp.HParameterSet.HCharShape.SpacingJapanese = 0
    hwp.HParameterSet.HCharShape.RatioJapanese = 100
    hwp.HParameterSet.HCharShape.SizeJapanese = 100
    hwp.HParameterSet.HCharShape.SpacingHanja = 0
    hwp.HParameterSet.HCharShape.RatioHanja = 100
    hwp.HParameterSet.HCharShape.SizeHanja = 100
    hwp.HParameterSet.HCharShape.SpacingLatin = 0
    hwp.HParameterSet.HCharShape.RatioLatin = 100
    hwp.HParameterSet.HCharShape.SpacingHangul = 0
    hwp.HParameterSet.HCharShape.RatioHangul = 100
    hwp.HParameterSet.HCharShape.OffsetUser = 0
    hwp.HParameterSet.HCharShape.SpacingUser = 0
    hwp.HParameterSet.HCharShape.OffsetSymbol = 0
    hwp.HParameterSet.HCharShape.SpacingSymbol = 0
    hwp.HParameterSet.HCharShape.OffsetOther = 0
    hwp.HParameterSet.HCharShape.SpacingOther = 0
    hwp.HParameterSet.HCharShape.OffsetJapanese = 0
    hwp.HParameterSet.HCharShape.OffsetHanja = 0
    hwp.HParameterSet.HCharShape.OffsetLatin = 0
    hwp.HParameterSet.HCharShape.OffsetHangul = 0
    hwp.HParameterSet.HCharShape.Height = hwp.PointToHwpUnit(16.0)
    hwp.HAction.Execute("CharShape", hwp.HParameterSet.HCharShape.HSet)

    # %% 제목행에 문자열 삽입

    hwp.HAction.Run("TableColBegin")

    hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet)
    hwp.HParameterSet.HInsertText.Text = "장소명 : "
    hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet)
    hwp.CreateField(Direction="장소명", memo="장소명을 입력하세요.", name=f"{idx}_name")

    hwp.HAction.Run("TableRightCell")

    hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet)
    hwp.HParameterSet.HInsertText.Text = "코드명 : "
    hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet)
    hwp.CreateField(Direction="장소코드", memo="장소 코드명을 입력하세요.", name=f"{idx}_code")
    hwp.HAction.Run("ParagraphShapeAlignCenter")

    hwp.HAction.Run("TableRightCell")

    hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet)
    hwp.HParameterSet.HInsertText.Text = "타입 : "
    hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet)
    hwp.CreateField(Direction="타입", memo="자료타입을 입력하세요.", name=f"{idx}_type")
    hwp.HAction.Run("ParagraphShapeAlignCenter")

    # %% 아래 열 글자크기 12로
    
    hwp.HAction.Run("TableRightCell")  # 2행으로 이동
    hwp.HAction.Run("TableCellBlockRow")  # 2행 전체 선택
    hwp.HAction.Run("CharShapeHeightIncrease")  # 폰트+=1
    hwp.HAction.Run("CharShapeHeightIncrease")  # 폰트+=1
    hwp.Run("TableColBegin")  # 2행1열로 이동

    # %% 텍스트 삽입
    
    hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet)
    hwp.HParameterSet.HInsertText.Text = "시간-폭"
    hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet)
    hwp.HAction.Run("ParagraphShapeAlignCenter")

    hwp.HAction.Run("TableRightCell")

    hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet)
    hwp.HParameterSet.HInsertText.Text = "주파수-폭"
    hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet)
    hwp.HAction.Run("ParagraphShapeAlignCenter")

    hwp.HAction.Run("TableRightCell")

    hwp.HAction.GetDefault("InsertText", hwp.HParameterSet.HInsertText.HSet)
    hwp.HParameterSet.HInsertText.Text = "주파수-시간-폭"
    hwp.HAction.Execute("InsertText", hwp.HParameterSet.HInsertText.HSet)
    hwp.HAction.Run("ParagraphShapeAlignCenter")

    # %% 이미지 삽입할 9개의 셀에 각각 필드명 삽입(나중에 편함)

    hwp.HAction.Run("TableRightCell")

    hwp.HAction.GetDefault("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)
    hwp.HParameterSet.HShapeObject.ShapeTableCell.Editable = 1
    hwp.HParameterSet.HShapeObject.ShapeTableCell.CellCtrlData.name = f"{idx}_E_time"
    hwp.HAction.Execute("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)

    hwp.HAction.Run("TableRightCell")

    hwp.HAction.GetDefault("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)
    hwp.HParameterSet.HShapeObject.ShapeTableCell.Editable = 1
    hwp.HParameterSet.HShapeObject.ShapeTableCell.CellCtrlData.name = f"{idx}_E_PDF"
    hwp.HAction.Execute("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)

    hwp.HAction.Run("TableRightCell")

    hwp.HAction.GetDefault("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)
    hwp.HParameterSet.HShapeObject.ShapeTableCell.Editable = 1
    hwp.HParameterSet.HShapeObject.ShapeTableCell.CellCtrlData.name = f"{idx}_E_temporal"
    hwp.HAction.Execute("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)

    hwp.HAction.Run("TableRightCell")

    hwp.HAction.GetDefault("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)
    hwp.HParameterSet.HShapeObject.ShapeTableCell.Editable = 1
    hwp.HParameterSet.HShapeObject.ShapeTableCell.CellCtrlData.name = f"{idx}_N_time"
    hwp.HAction.Execute("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)

    hwp.HAction.Run("TableRightCell")

    hwp.HAction.GetDefault("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)
    hwp.HParameterSet.HShapeObject.ShapeTableCell.Editable = 1
    hwp.HParameterSet.HShapeObject.ShapeTableCell.CellCtrlData.name = f"{idx}_N_PDF"
    hwp.HAction.Execute("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)

    hwp.HAction.Run("TableRightCell")

    hwp.HAction.GetDefault("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)
    hwp.HParameterSet.HShapeObject.ShapeTableCell.Editable = 1
    hwp.HParameterSet.HShapeObject.ShapeTableCell.CellCtrlData.name = f"{idx}_N_temporal"
    hwp.HAction.Execute("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)

    hwp.HAction.Run("TableRightCell")

    hwp.HAction.GetDefault("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)
    hwp.HParameterSet.HShapeObject.ShapeTableCell.Editable = 1
    hwp.HParameterSet.HShapeObject.ShapeTableCell.CellCtrlData.name = f"{idx}_Z_time"
    hwp.HAction.Execute("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)

    hwp.HAction.Run("TableRightCell")

    hwp.HAction.GetDefault("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)
    hwp.HParameterSet.HShapeObject.ShapeTableCell.Editable = 1
    hwp.HParameterSet.HShapeObject.ShapeTableCell.CellCtrlData.name = f"{idx}_Z_PDF"
    hwp.HAction.Execute("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)

    hwp.HAction.Run("TableRightCell")

    hwp.HAction.GetDefault("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)
    hwp.HParameterSet.HShapeObject.ShapeTableCell.Editable = 1
    hwp.HParameterSet.HShapeObject.ShapeTableCell.CellCtrlData.name = f"{idx}_Z_temporal"
    hwp.HAction.Execute("TablePropertyDialog", hwp.HParameterSet.HShapeObject.HSet)

    # %% 텍스트 필드에 문자열 삽입
    
    hwp.PutFieldText(f"{idx}_name", content.split("..")[0])
    hwp.PutFieldText(f"{idx}_code", content.split(".")[1])
    hwp.PutFieldText(f"{idx}_type", "(속도" + content.split("..")[-1] + "*)")

    # %% 이미지 삽입
    
    slot_list = [f"{idx}_E_time", f"{idx}_E_PDF", f"{idx}_E_temporal", f"{idx}_N_time", f"{idx}_N_PDF",
                 f"{idx}_N_temporal", f"{idx}_Z_time", f"{idx}_Z_PDF", f"{idx}_Z_temporal"]  # 이미지 삽입할 셀 필드 리스트
    for j in slot_list:
        hwp.MoveToField(j)  # 해당 필드로 이동
        hwp.InsertPicture(os.path.join(BASE_DIR, f"{content + j.split('_', maxsplit=1)[1]}.png"), Embedded=True,
                          sizeoption=3)  # 이미지 삽입
    hwp.Run("MoveDocEnd")  # 문서 끝으로 이동
    hwp.Run("DeleteBack")  # 엔터 하나 삭제

########### hwp.Save는 생략함. 끝.

 

물론 이런 업무를 루틴하게 매일 하시지는 않겠죠..ㄷㄷㄷ

다만, 스크립트매크로나 VBA만으로는 이런 자동화작업에 한계를 만날 수 있으니까, 

가급적 파이썬 자동화를 배워서 업무에 활용해 보시라는 뜻에서

이런 영상을 만들어 보았습니다. 이 콘텐츠는 향후 유튜브 등에도 업로드할 예정입니다. (만 지금은 귀찮아서ㅜㅜㅜ)

요청해 주시고 콘텐츠 제작에 허락해 주신 Y님께도 이 자리를 빌어 감사의 말씀 드립니다.

 

감사합니다.

행복한 하루 되세요!

반응형

댓글2

  • 윤성중 2021.12.17 21:36

    감사히 잘 보고 있습니다.
    위 내용은 이미지를 선택하고 넣는것인데.. 저는 폴더 안에 여러 폴더가 존재하고 그 폴더안에 사진이 2장씩들어 있습니다. 예로 날짜이름 폴더 20211208 이 있고 이 안에 1_사진,2_사진 이런 폴더가 있습니다.
    날짜이름폴더를 선택해서 그 안의 폴더에 있는 사진들을 한글양식에 붙여 넣고 싶은데.. 폴더를 선택해서 붙여 넣는 방법이 궁금해서 이렇게 질문 드립니다. 즐거운 연말 보내세요~
    답글

    • 회사원코딩 2021.12.18 02:19 신고

      안녕하세요?
      저는 여러 개의 파일을 선택하기 위해 4번라인에서 askopenfilenames를 임포트해서 11번 라인에 코드를 넣었습니다.

      성중님의 경우처럼 폴더를 선택하고 싶으시다면 askopenfilenames 대신 askdirectory를 임포트하여 사용하시면 됩니다.

      다만, 단순히 선택한 폴더(경로)만 불러오는 명령이므로, 하위의 이미지파일을 선택하려면, 추가로 os.listdir 이나 os.walk 등을 통해서 이미지 경로를 불러오시면 됩니다.

      os.listdir은 해당 폴더 내의 파일만, os.walk는 하위폴더의 파일까지 모두 탐색할 수 있는 메서드이며 사용법은 구글링으로 해결하실 수 있을 정도로 간단합니다.

      혹시 막히거나 추가 질문이 있으면 댓글이나 방명록 남겨주시기 바랍니다.

      감사합니다.
      행복한 하루 되세요^^