チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル»Python»Spire.Doc for Python»»Python:Excel の表を Word 文書に統合する方法
2025-04-01

Python:Excel の表を Word 文書に統合する方法

現代のワークフローでは、データ分析は Excel で行われ、最終的なレポートは Word で作成されることが一般的です。しかし、データを手動でコピー&ペーストすると、エラーやバージョンの不整合、書式の乱れが発生する可能性があります。Python を活用した自動化により、Excel のデータ処理機能と Word のフォーマット機能をシームレスに統合でき、データの整合性を確保しながら作業の効率を向上させることが可能です。本記事では、Spire.Office for Python を使用して、Python コードで Excel の表を Word 文書に挿入する方法を解説します。

Spire.Office for Python のインストール

この操作には、Spire.Office for Python と plum-dispatch v1.7.4 が必要です。これらは、Spire.Office for Python の公式ウェブサイトから手動でダウンロードするか、以下の pip コマンドでインストールできます。

pip install Spire.Doc

Excel のデータを読み込み Word 文書に挿入する

Spire.XLS for Python を使用すると、Excel ワークシートから数値書式を保持したままデータを抽出できます(CellRange.NumberText プロパティを使用)。抽出したデータを、Spire.Doc for Python を使用して Word の表に挿入できます。この方法は、単純な Excel ワークシートや、Word で書式を変更する必要があるケースに適しています。

Excel のデータを読み込み Word に挿入する手順

  • Workbook クラスのインスタンスを作成し、Workbook.LoadFromFile() メソッドを使用して Excel ファイルを読み込みます。
  • Workbook.Worksheets.get_Item() メソッドでワークシートを取得し、Worksheet.AllocatedRange プロパティで使用範囲を取得します。
  • Document クラスのインスタンスを作成し、新しい Word 文書を作成します。
  • Document.AddSection() メソッドでセクションを追加し、Section.AddTable() メソッドで表を挿入します。
  • Table.ResetCells() メソッドを使用して、使用範囲の行数と列数を定義します。
  • 使用範囲の行と列をループ処理します。
  • Table.Rows.get_Item().Cells.get_Item() メソッドで表のセルを取得し、TableCell.AddParagraph() メソッドで段落を追加します。
  • CellRange.get_Item().NumberText プロパティでセルの値を取得し、Paragraph.AppendText() メソッドで段落に追加します。
  • Word の表に必要な書式設定を適用します。
  • Document.SaveToFile() メソッドで Word 文書を保存します。
  • Python
from spire.doc import Document, AutoFitBehaviorType, FileFormat, DefaultTableStyle
from spire.xls import Workbook

# ファイル名を指定します
excel_file = "Sample.xlsx"
word_file = "output/ExcelDataToWord.docx"

# Workbook インスタンスを作成します
workbook = Workbook()
# Excel ファイルを読み込みます
workbook.LoadFromFile(excel_file)

# 最初のワークシートを取得します
sheet = workbook.Worksheets.get_Item(0)
# 最初のワークシートで使用されているセル範囲を取得します
allocatedRange = sheet.AllocatedRange

# Document インスタンスを作成します
doc = Document()

# 文書にセクションを追加し、そのセクションに表を追加します
section = doc.AddSection()
table = section.AddTable()

# Word の表の行数と列数を Excel のワークシートと同じにリセットします
table.ResetCells(allocatedRange.RowCount, allocatedRange.ColumnCount)

# 使用されているセル範囲の各行と各列をループ処理します
for rowIndex in range(allocatedRange.RowCount):
    # 行内の各列をループ処理します
    for colIndex in range(allocatedRange.ColumnCount):
        # Word の表にセルを追加し、そのセルに段落を追加します
        cell = table.Rows.get_Item(rowIndex).Cells.get_Item(colIndex)
        paragraph = cell.AddParagraph()
        # セルの値を Word の表に追加し、フォントを設定します
        textRange = paragraph.AppendText(allocatedRange.get_Item(rowIndex + 1, colIndex + 1).NumberText)
        textRange.CharacterFormat.FontName = "Yu Gothic UI"

# 表のサイズをウィンドウに合わせて自動調整し、表のスタイルを適用します
table.AutoFit(AutoFitBehaviorType.AutoFitToWindow)
table.ApplyStyle(DefaultTableStyle.GridTable1LightAccent6)

# Word 文書を保存します
doc.SaveToFile(word_file, FileFormat.Docx2019)

# リソースを解放します
doc.Dispose()
workbook.Dispose()

Spire.DocでExcelデータを読み込み、Word文書の表に書き込む

Excel のデータと書式を Word にコピーする

Spire.XLS for Python と Spire.Doc for Python を併用すると、Excel のデータと書式の両方を Word にコピーし、表の構造と外観を保持できます。

書式を保持するために必要な補助メソッド

  • MergeCells: Excel ワークシートの結合セルに基づいて、Word の表のセルを結合します。
  • CopyFormatting: Excel のセルの書式(フォントスタイル、背景色、水平および垂直方向の配置)を Word の表に適用します。

データと書式をコピーする手順

  • Workbook クラスのインスタンスを作成し、Workbook.LoadFromFile() メソッドで Excel ファイルを読み込みます。
  • Workbook.Worksheets.get_Item() メソッドでワークシートを取得します。
  • Document クラスのインスタンスを作成し、Document.AddSection() メソッドでセクションを追加します。
  • Section.AddTable() メソッドで表を挿入します。
  • Table.ResetCells() メソッドを使用し、ワークシートの構造に基づいて表の構造を調整します。
  • MergeCells() メソッドを使用してセルの結合を適用します。
  • 各行をループ処理し、Table.Rows.get_Item().Height プロパティを使用して行の高さを設定します。
  • 各列の処理:
    • Worksheet.Range.get_Item() メソッドで Excel のセルを取得し、TableRow.Cells.get_Item() メソッドで Word のセルを取得します。
    • CellRange.NumberText プロパティでデータを取得し、TableCell.AddParagraph().AppendText() メソッドで Word のセルに追加します。
    • CopyFormatting() メソッドで書式を適用します。
  • Document.SaveToFile() メソッドで Word 文書を保存します。
  • Python
from spire.xls import Workbook, HorizontalAlignType, ExcelPatternType, VerticalAlignType
from spire.doc import Document, Color, HorizontalAlignment, VerticalAlignment, PageOrientation, FileFormat


def MergeCells(worksheet, wordTable):
    # セルの結合があるか確認します
    if not worksheet.HasMergedCells:
        return
    for cell_range in worksheet.MergedCells:
        start_row, start_col = cell_range.Row, cell_range.Column
        row_count, col_count = cell_range.RowCount, cell_range.ColumnCount
        # 横方向の結合を処理します
        if col_count > 1:
            for row in range(start_row, start_row + row_count):
                wordTable.ApplyHorizontalMerge(row - 1, start_col - 1, start_col - 1 + col_count - 1)
        # 縦方向の結合を処理します
        if row_count > 1:
            wordTable.ApplyVerticalMerge(start_col - 1, start_row - 1, start_row - 1 + row_count - 1)


def CopyFormatting(tableTextRange, excelCell, wordCell):
    # フォントスタイルをコピーします
    font = excelCell.Style.Font
    tableTextRange.CharacterFormat.TextColor = Color.FromRgb(font.Color.R, font.Color.G, font.Color.B)
    tableTextRange.CharacterFormat.FontSize = float(font.Size)
    tableTextRange.CharacterFormat.FontName = font.FontName
    tableTextRange.CharacterFormat.Bold = font.IsBold
    tableTextRange.CharacterFormat.Italic = font.IsItalic
    # 背景色をコピーします
    if excelCell.Style.FillPattern != ExcelPatternType.none:
        wordCell.CellFormat.BackColor = Color.FromRgb(excelCell.Style.Color.R, excelCell.Style.Color.G,
                                                      excelCell.Style.Color.B)
    # 横方向の配置をコピーします
    hAlignMap = {
        HorizontalAlignType.Left: HorizontalAlignment.Left,
        HorizontalAlignType.Center: HorizontalAlignment.Center,
        HorizontalAlignType.Right: HorizontalAlignment.Right
    }
    if excelCell.HorizontalAlignment in hAlignMap:
        tableTextRange.OwnerParagraph.Format.HorizontalAlignment = hAlignMap[excelCell.HorizontalAlignment]
    # 縦方向の配置をコピーします
    vAlignMap = {
        VerticalAlignType.Top: VerticalAlignment.Top,
        VerticalAlignType.Center: VerticalAlignment.Middle,
        VerticalAlignType.Bottom: VerticalAlignment.Bottom
    }
    if excelCell.VerticalAlignment in vAlignMap:
        wordCell.CellFormat.VerticalAlignment = vAlignMap[excelCell.VerticalAlignment]

# ファイル名を指定します
excelFileName = "Sample.xlsx"
wordFileName = "output/ExcelDataFormatToWord.docx"

# Workbook インスタンスを作成し、Excel ファイルを読み込みます
workbook = Workbook()
workbook.LoadFromFile(excelFileName)

# ワークシートを取得します
sheet = workbook.Worksheets.get_Item(0)

# Document インスタンスを作成します
doc = Document()
# 文書にセクションを追加し、ページの向きを設定します
section = doc.AddSection()
section.PageSetup.Orientation = PageOrientation.Landscape

# セクションに表を追加します
table = section.AddTable()
# Word の表の行数と列数を Excel のワークシートと同じに設定します
table.ResetCells(sheet.LastRow, sheet.LastColumn)

# MergeCells メソッドを実行してセルを結合します
MergeCells(sheet, table)

# Excel のワークシート内の各行と各列をループ処理します
for r in range(1, sheet.LastRow + 1):
    tableRow = table.Rows.get_Item(r - 1)
    tableRow.Height = float(sheet.Rows.get_Item(r - 1).RowHeight)
    for c in range(1, sheet.LastColumn + 1):
        # Excel の対応するセルと Word の表のセルを取得します
        eCell = sheet.Range.get_Item(r, c)
        wCell = table.Rows.get_Item(r - 1).Cells.get_Item(c - 1)
        # セルの値を Word の表に追加します
        textRange = wCell.AddParagraph().AppendText(eCell.NumberText)
        # セルの書式をコピーします
        CopyFormatting(textRange, eCell, wCell)

# Word 文書を保存します
doc.SaveToFile(wordFileName, FileFormat.Docx2019)
doc.Dispose()
workbook.Dispo

Pythonを使ってExcelワークシートのデータと書式をWord文書にコピー

Excel ワークシートを OLE オブジェクトとして Word に統合する

データと書式のコピーに加え、Excel ワークシートを OLE オブジェクトとして Word に埋め込むこともできます。この方法を使用すると、Excel のワークシートを完全な形式で表示できるだけでなく、Word 文書内で直接編集することも可能になります。

Spire.Doc for Python の Paragraph.AppendOleObject(str: filename, DocPicture, OleObjectType.ExcelWorksheet) メソッドを使用すると、Excel ファイルを簡単に OLE オブジェクトとして挿入できます。

Excel ワークシートを OLE オブジェクトとして挿入する手順

  • Workbook クラスのインスタンスを作成し、Workbook.LoadFromFile() メソッドで Excel ファイルを読み込みます。
  • Workbook.Worksheets.get_Item() メソッドでワークシートを取得し、Worksheet.ToImage().Save() メソッドを使用して画像として保存します。
  • Document クラスのインスタンスを作成し、Word 文書を作成します。
  • Document.AddSection() メソッドでセクションを追加し、Section.AddParagraph() メソッドで段落を挿入します。
  • DocPicture クラスのインスタンスを作成し、DocPicture.LoadImage() メソッドで保存した画像を読み込みます。
  • DocPicture.Width プロパティでページレイアウトに合わせて画像サイズを調整します。
  • Paragraph.AppendOleObject() メソッドで Excel ファイルを OLE オブジェクトとして挿入します。
  • DocOleObject.DisplayAsIcon プロパティを False に設定し、ワークシートの編集後に動的に更新されるようにします。
  • Document.SaveToFile() メソッドで Word 文書を保存します。
  • Python
from spire.doc import Document, DocPicture, FileFormat, OleObjectType
from spire.xls import Workbook

# ファイルパスとファイル名を指定します
excelFileName = "Sample.xlsx"
wordFileName = "output/ExcelOleToWord.docx"
tempImageName = "SheetImage.png"

# Workbook インスタンスを作成し、Excel ファイルを読み込みます
workbook = Workbook()
workbook.LoadFromFile(excelFileName)

# 最初のワークシートを画像として保存します
sheet = workbook.Worksheets.get_Item(0)
sheet.ToImage(1, 1, sheet.LastRow, sheet.LastColumn).Save(tempImageName)

# Word 文書を作成するために Document インスタンスを初期化します
doc = Document()
# 文書にセクションを追加し、そのセクションに段落を追加します
section = doc.AddSection()
paragraph = section.AddParagraph()

# DocPicture インスタンスを作成し、画像を読み込みます
pic = DocPicture(doc)
pic.LoadImage(tempImageName)

# 画像の幅を設定します
pic.Width = section.PageSetup.PageSize.Width - section.PageSetup.Margins.Left - section.PageSetup.Margins.Right

# Excel ファイルを OLE オブジェクトとして Word 文書に挿入し、保存した画像を表示用に設定します
ole = paragraph.AppendOleObject(excelFileName, pic, OleObjectType.ExcelWorksheet)
# OLE オブジェクトをアイコンとして表示しないように設定します
ole.DisplayAsIcon = False

# Word 文書を保存します
doc.SaveToFile(wordFileName, FileFormat.Docx2019)
workbook.Dispose()
doc.Dispose()

PythonでExcelワークシートをOLEオブジェクトとしてWord文書に挿入

一時ライセンスを申請する

結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。

Read 44 times