Excel & IT Info

아이엑셀러 닷컴, 엑셀러TV

Python

파이썬으로 Word에서 테이블 만들기(추출하기)

권현욱(엑셀러) 2024. 5. 4. 19:18
반응형

들어가기 전에

표(Table)는 정보를 명확하고 정확하게 정리하는 데 필수적인 도구입니다. 데이터를 체계적이고 시각적으로 배치하여 매력적인 레이아웃을 만들 수 있게 해줍니다. 파이썬을 사용하여 Microsoft Word 문서에서 테이블을 생성하거나 테이블 데이터를 추출하는 방법을 소개합니다.

권현욱(엑셀러) | 아이엑셀러 닷컴 대표 · Microsoft Excel MVP · Excel 솔루션 프로바이더 · 작가

이미지: 아이엑셀러 닷컴

 

※ 이 글은 아래 기사 내용을 토대로 작성되었습니다만, 필자의 개인 의견이나 추가 자료들이 다수 포함되어 있습니다.


  • 원문: Create or Extract Tables in Word with Python
  • URL: https://medium.com/@alice.yang_10652/create-or-extract-tables-in-word-with-python-98b2c5f6d9e5

Word에서 표를 만들거나 추출하는 파이썬 라이브러리

Python으로 Word 문서에서 표를 만들거나 추출하려면 Python용 Spire.Doc 라이브러리를 사용할 수 있습니다. Python용 Spire.Doc은 Python 애플리케이션 내에서 Word 파일을 만들고, 읽고, 편집하고, 변환하기 위한 기능이 풍부하고 사용하기 쉬운 라이브러리입니다.

 

이 라이브러리를 사용하면 Doc, Docx, Docm, Dot, Dotx, Dotm 등 다양한 Word 포맷으로 작업할 수 있습니다. 또한 Word 문서를 PDF, RTF, HTML, 텍스트, 이미지, SVG, ODT, PostScript, PCL, XPS와 같은 다른 유형의 파일 형식으로 렌더링할 수도 있습니다. 터미널에서 다음 명령을 실행하여 PyPI에서 Python용 Spire.Doc을 설치할 수 있습니다.

pip install Spire.Doc

 

설치에 대한 자세한 내용은 [여기]에서 확인할 수 있습니다.


파이썬으로 Word에서 미리 정의된 행과 열이 있는 표 만들기

Python용 Spire.Doc에서 제공하는 Section.AddTable() 및 Table.ResetCells(int, int) 메서드를 사용하여 Word 문서에서 표를 만들고 행과 열의 개수를 미리 정의할 수 있습니다.

다음은 미리 정의된 행과 열이 있는 표를 만들고 Python 및 Python용 Spire.Doc을 사용하여 Word 문서에서 표에 데이터를 추가하는 방법을 보여주는 예제입니다.

from spire.doc import *
from spire.doc.common import *

# Create a Document instance
document = Document()

# Add a section to the document
section = document.AddSection()

# Set page margins for the section
section.PageSetup.Margins.All = 72.0
 
# Add a paragraph to the section
para = section.AddParagraph()
# Set text alignment
para.Format.HorizontalAlignment = HorizontalAlignment.Center
# Add text to the paragraph
txtRange = para.AppendText("Employee List")
txtRange.CharacterFormat.FontName = "Calibri"
txtRange.CharacterFormat.FontSize = 16           
txtRange.CharacterFormat.Bold = True
 
# Define table data
header = ["Employee#", "Name", "Department" ]
data =[["93775", "John", "Finance"],
       ["38295", "Jane", "IT"],
       ["83864", "Brain", "Marketing"],
       ["39801", "Sandra", "R&D"]]
 
# Add a table to the section
table = section.AddTable(True)
# Specify the number of rows and columns for the table
table.ResetCells(len(data) + 1, len(header))
 
# Set the first row as table header
headerRow = table.Rows[0]
headerRow.IsHeader = True
# Set the height and background color of the header row
headerRow.Height = 23
headerRow.RowFormat.BackColor = Color.FromArgb(1, 142, 170, 219)
 
# Add data to the header row
for i in range(len(header)):
    #Add a paragraph to each cell of the header row
    para = headerRow.Cells[i].AddParagraph()
    # Set text alignment
    headerRow.Cells[i].CellFormat.VerticalAlignment = VerticalAlignment.Middle
    para.Format.HorizontalAlignment = HorizontalAlignment.Center
    # Add data to the paragraph and set text format
    txtRange = para.AppendText(header[i])
    txtRange.CharacterFormat.FontName = "Calibri"
    txtRange.CharacterFormat.FontSize = 14
    txtRange.CharacterFormat.TextColor = Color.get_White()
    txtRange.CharacterFormat.Bold = True
            
# Add data to the remaining rows
for r in range(len(data)):
    dataRow = table.Rows[r + 1]
    dataRow.Height = 20
    for c in range(len(data[r])):
        # Add a paragraph to each cell of the rest of the rows
        para = dataRow.Cells[c].AddParagraph()
        # Set text alignment
        para.Format.HorizontalAlignment = HorizontalAlignment.Center
        dataRow.Cells[c].CellFormat.VerticalAlignment = VerticalAlignment.Middle
        # Add data to the paragraph and set text format
        txtRange = para.AppendText(data[r][c])
        txtRange.CharacterFormat.FontName = "Calibri"
        txtRange.CharacterFormat.FontSize = 11
                
             
# Save the result document
document.SaveToFile("CreateTable.docx", FileFormat.Docx2013)
document.Close()

 

이미지: medium

 

파이썬을 사용하여 Word에서 행과 셀을 동적으로 추가하여 표 만들기

미리 정의된 행과 열로 표를 만드는 것 외에도 행과 셀을 동적으로 추가하여 표를 만들 수 있습니다. 이 기능은 행과 열의 수를 결정할 수 없을 때 유용합니다.

다음은 Python 및 Python용 Spire.Doc을 사용하여 Word 문서에서 행과 셀을 동적으로 추가하여 표를 만드는 방법을 보여주는 예제입니다.

from spire.doc import *
from spire.doc.common import *

# Create a Document instance
document = Document()

# Add a section to the document
section = document.AddSection()

# Set page margins for the section
section.PageSetup.Margins.All = 72.0

# Add a table to the section
table = section.AddTable()
 
# Dynamically add rows and cells to the table
row = table.AddRow()
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
txtRange = cell.AddParagraph().AppendText("Product")
txtRange.CharacterFormat.FontSize = 13
txtRange.CharacterFormat.Bold = True
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
txtRange = cell.AddParagraph().AppendText("Unit Price")
txtRange.CharacterFormat.FontSize = 13
txtRange.CharacterFormat.Bold = True
 
row = table.AddRow(True, False)
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
cell.AddParagraph().AppendText("Monitor")
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
cell.AddParagraph().AppendText("$500")
 
row = table.AddRow(True, False)
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
cell.AddParagraph().AppendText("Keyboard")
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
cell.AddParagraph().AppendText("$80")
 
row = table.AddRow(True, False)
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
cell.AddParagraph().AppendText("CPU Coolers")
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
cell.AddParagraph().AppendText("$20")
 
row = table.AddRow(True, False)
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
cell.AddParagraph().AppendText("Mice")
cell = row.AddCell()
cell.SetCellWidth(200, CellWidthType.Point)
cell.AddParagraph().AppendText("$120")
 
# Apply table style
table.ApplyStyle(DefaultTableStyle.MediumGrid1Accent5)
# Auto resize the table to fit the window size
table.AutoFit(AutoFitBehaviorType.AutoFitToWindow)
 
# Save the result document
document.SaveToFile("CreateTableDynamically.docx", FileFormat.Docx2013)
document.Close()

 

이미지: medium

 

파이썬을 사용하여 Word에서 중첩된 표 만들기

데이터를 표시하기 위해 기존 표에 중첩된 표를 삽입하고 싶을 때가 있습니다. 이 작업을 구현하려면 TableCell.AddTable() 메서드를 사용할 수 있습니다.

다음은 Python 및 Python용 Spire.Doc을 사용하여 중첩된 표를 Word 문서의 기존 표에 삽입하는 방법을 보여주는 예제입니다.

from spire.doc import *
from spire.doc.common import *

# Create a Document instance
document = Document()
document.LoadFromFile("CreateTable.docx")

# Add a section to the document
section = document.Sections[0]

# Get the first table in the section
table = section.Tables[0]

# Add a nested table to the second cell of the fifth row
nestedTable= table.Rows[4].Cells[1].AddTable(True)
# Specify the number of rows and columns of the table
nestedTable.ResetCells(2, 2)

# Add data to the nested table
nestedTable.Rows[0].Cells[0].AddParagraph().AppendText("Birthday")
nestedTable.Rows[0].Cells[1].AddParagraph().AppendText("Phone")
nestedTable.Rows[1].Cells[0].AddParagraph().AppendText("11/16/1983")
nestedTable.Rows[1].Cells[1].AddParagraph().AppendText("01234567")

# Set table alignment
nestedTable.TableFormat.HorizontalAlignment = RowAlignment.Center
# Auto resize the nested table to fit the content
nestedTable.AutoFit(AutoFitBehaviorType.AutoFitToContents)

# Save the result document
document.SaveToFile("CreateNestedTable.docx", FileFormat.Docx2013)
document.Close()

 

이미지: medium

 

파이썬으로 Word의 HTML 문자열에서 표 만들기

HTML 콘텐츠로 작업할 때 HTML 문자열을 Word 문서 내에서 표로 변환해야 하는 경우가 있을 수 있습니다. 이 작업은 Word 문서에 표시하거나 통합하려는 HTML 형식의 표 형식 데이터가 있을 때 유용합니다.

Python용 Spire.Doc에서는 Paragraph.AppendHTML() 메서드를 사용하여 HTML 문자열을 Word 문서에 추가할 수 있습니다. 다음은 Python 및 Python용 Spire.Doc을 사용하여 Word 문서에서 HTML 문자열로 표를 만드는 방법을 보여주는 예제입니다.

from spire.doc import *
from spire.doc.common import *

# Create a Document instance
document = Document()

# Add a section to the document
section = document.AddSection()

# Set page margins for the section
section.PageSetup.Margins.All = 72.0

# Specify the HTML string
htmlString = """
<style>
  .myTable {
    border-collapse: collapse;
    border: 1px solid black;
  }
  .myTable th, .myTable td {
    border: 1px solid black;
  }
</style>

<table class="myTable">
  <tr>
    <th>Name</th>
    <th>Age</th>
    <th>City</th>
  </tr>
  <tr>
    <td>John Doe</td>
    <td>30</td>
    <td>New York</td>
  </tr>
  <tr>
    <td>Jane Smith</td>
    <td>25</td>
    <td>London</td>
  </tr>
</table>
"""
# Add a paragraph to the section
para = section.AddParagraph()

# Append the HTML string to the paragraph
para.AppendHTML(htmlString)

# Save the result document
document.SaveToFile("CreateTableFromHtml.docx", FileFormat.Docx2013)
document.Close()

 

이미지: medium

 

파이썬으로 Word에서 표 데이터 추출하기

특정 시나리오에서는 Word 문서에서 표 데이터를 추출해야 할 수도 있습니다. 이 작업은 Word 문서에서 표 형식의 정보를 분석, 조작 또는 다른 애플리케이션이나 시스템으로 전송하고자 할 때 유용합니다.

다음은 Python 및 Python용 Spire.Doc을 사용하여 Word 문서의 표에서 데이터를 추출하는 방법을 보여주는 예제입니다.

from spire.doc import *
from spire.doc.common import *

# Create a Document instance
document = Document()
# Load a Word document
document.LoadFromFile("CreateTable.docx")

# Get the first section of the document
section = document.Sections[0]

# Get the first table in the section
table = section.Tables[0]

# Create a list to store the extracted table data
data_list = []

# Loop through the rows in the table
for i in range(table.Rows.Count):
    row = table.Rows[i]
    # Loop through the cells in each row
    for j in range(row.Cells.Count):
        cell = row.Cells[j]
        # Loop through the paragraphs in each cell
        for k in range(cell.Paragraphs.Count):
            # Extract data from each paragraph
            paragraph = cell.Paragraphs[k]
            text = paragraph.Text
            # Append the data to the list
            data_list.append(text + "\t")
    data_list.append("\n")

# Write the extracted data into a text file
with open("TableData.txt", "w", encoding = "utf-8") as text_file:
    for data in data_list:
        text_file.write(data)

document.Close()

 

이미지: medium

Excel과 VBA의 모든 것 아이엑셀러 닷컴 · 강사들이 숨겨 놓고 보는 엑셀러TV