チュートリアル

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

チュートリアル»docpythontable

Displaying items by tag: docpythontable

現代のワークフローでは、データ分析は 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 日間有効な一時ライセンスを取得してください。

Published in
Tagged under

Word 文書の表に行や列を追加・削除することで、データの構造を適切に調整できます。行や列を追加することで、データの増加に対応し、必要な情報をすべて表示できるようになります。一方で、不必要な行や列を削除すれば、表を整理し、文書の冗長な情報を削減できます。本記事では、Spire.Doc for Python を使用して、Python で Word 文書の表に行や列を追加・削除する方法を解説します。

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

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

pip install Spire.Doc

Python で Word の表に行を追加または挿入する

Word の表に行を追加するには、表の末尾に追加する方法と、特定の位置に挿入する方法があります。これには Table.AddRow() または Table.InsertRow() メソッドを使用します。以下の手順で実装できます。

  • Document オブジェクトを作成します。
  • Document.LoadFromFile() メソッドを使用して Word 文書を読み込みます。
  • Document.Sections[] プロパティを使用して最初のセクションを取得します。
  • Section.Tables[] プロパティを使用してセクション内の最初の表を取得します。
  • Table.Rows.Insert() メソッドを使用して、表の特定の位置に行を挿入します。
  • 挿入した行にデータを追加します。
  • Table.AddRow() メソッドを使用して表の末尾に行を追加します。
  • 追加した行にデータを入力します。
  • Document.SaveToFile() メソッドを使用して、変更を保存します。
  • Python
from spire.doc import Document, Table, HorizontalAlignment, VerticalAlignment

# Document オブジェクトを作成します。
document = Document()
# Word 文書を読み込みます。
document.LoadFromFile("Sample.docx")

# 文書の最初のセクションを取得します。
section = document.Sections[0]

# 最初のセクションの最初のテーブルを取得します。
table = section.Tables[0] if isinstance(section.Tables[0], Table) else None

# テーブルの 3 行目として新しい行を挿入します。
table.Rows.Insert(2, table.AddRow())
# 挿入された行を取得します。
insertedRow = table.Rows[2]
# 行にデータを追加します。
for i in range(insertedRow.Cells.Count):
    cell = insertedRow.Cells[i]
    paragraph = cell.AddParagraph()
    textRange = paragraph.AppendText("挿入された行")
    textRange.CharacterFormat.FontName = "Yu Gothic UI"
    paragraph.Format.HorizontalAlignment = HorizontalAlignment.Left
    cell.CellFormat.VerticalAlignment = VerticalAlignment.Middle

# テーブルの末尾に新しい行を追加します。
addedRow = table.AddRow()
# 行にデータを追加します。
for i in range(addedRow.Cells.Count):
    cell = addedRow.Cells[i]
    paragraph = cell.AddParagraph()
    textRange = paragraph.AppendText("終了行")
    textRange.CharacterFormat.FontName = "Yu Gothic UI"
    paragraph.Format.HorizontalAlignment = HorizontalAlignment.Left
    cell.CellFormat.VerticalAlignment = VerticalAlignment.Middle

# 変更後の文書を保存します。
document.SaveToFile("output/Wordの表に行を追加・挿入.docx")
document.Close()

PythonでWordのテーブルに行を追加・挿入する

Python で Word の表に列を追加または挿入する

Spire.Doc for Python には、Word の表に直接列を追加・挿入するメソッドはありません。しかし、各行の特定の位置にセルを追加・挿入することで実現できます。TableRow.Cells.Add() または TableRow.Cells.Insert() メソッドを使用し、以下の手順で実装します。

  • Document オブジェクトを作成します。
  • Document.LoadFromFile() メソッドを使用して Word 文書を読み込みます。
  • Document.Sections[] プロパティを使用して最初のセクションを取得します。
  • Section.Tables[] プロパティを使用してセクション内の最初の表を取得します。
  • 表の各行をループ処理します。
  • TableCell オブジェクトを作成し、TableRow.Cells.Insert() メソッドを使用して各行の特定の位置に挿入し、セルの幅を設定します。
  • セルにデータを追加し、テキストの配置を設定します。
  • TableRow.AddCell() メソッドを使用して各行の末尾にセルを追加し、セルの幅を設定します。
  • セルにデータを追加し、テキストの配置を設定します。
  • Document.SaveToFile() メソッドを使用して、変更を保存します。
  • Python
from spire.doc import Document, TableCell, Table, HorizontalAlignment, VerticalAlignment, AutoFitBehaviorType

# Document オブジェクトを作成します。
document = Document()
# Word 文書を読み込みます。
document.LoadFromFile("Sample.docx")

# 文書の最初のセクションを取得します。
section = document.Sections[0]

# 最初のセクションの最初のテーブルを取得します。
table = section.Tables[0] if isinstance(section.Tables[0], Table) else None

# テーブルの各行をループ処理します。
for i in range(table.Rows.Count):
    row = table.Rows[i]
    # TableCell オブジェクトを作成します。
    cell = TableCell(document)
    # 行の 3 列目にセルを挿入し、セルの幅を設定します。
    row.Cells.Insert(2, cell)
    cell.Width = row.Cells[0].Width
    # セルにデータを追加します。
    paragraph = cell.AddParagraph()
    textRange = paragraph.AppendText("挿入された列")
    textRange.CharacterFormat.FontName = "Yu Gothic UI"
    # テキストの配置を設定します。
    paragraph.Format.HorizontalAlignment = HorizontalAlignment.Left
    cell.CellFormat.VerticalAlignment = VerticalAlignment.Middle

    # 行の末尾にセルを追加し、セルの幅を設定します。
    cell = row.AddCell()
    cell.Width = row.Cells[1].Width
    # セルにデータを追加します。
    paragraph = cell.AddParagraph()
    textRange = paragraph.AppendText("終了列")
    textRange.CharacterFormat.FontName = "Yu Gothic UI"
    # テキストの配置を設定します。
    paragraph.Format.HorizontalAlignment = HorizontalAlignment.Left
    cell.CellFormat.VerticalAlignment = VerticalAlignment.Middle

# 列を自動調整する
table.AutoFit(AutoFitBehaviorType.AutoFitToContents)

# 変更後の文書を保存します。
document.SaveToFile("output/Wordの表に列を追加・挿入.docx")
document.Close()

Spire.DocでWordの表に行を追加・挿入する

Python で Word の表から行を削除する

Word の表から特定の行を削除するには、Table.Rows.RemoveAt() メソッドを使用します。以下の手順で実装します。

  • Document オブジェクトを作成します。
  • Document.LoadFromFile() メソッドを使用して Word 文書を読み込みます。
  • Document.Sections[] プロパティを使用して最初のセクションを取得します。
  • Section.Tables[] プロパティを使用してセクション内の最初の表を取得します。
  • Table.Rows.RemoveAt() メソッドを使用して、特定の行を削除します。
  • Document.SaveToFile() メソッドを使用して、変更を保存します。
  • Python
from spire.doc import Document, Table

# Document オブジェクトを作成します。
document = Document()
# Word 文書を読み込みます。
document.LoadFromFile("Sample.docx")

# 文書の最初のセクションを取得します。
section = document.Sections[0]

# 最初のセクションの最初のテーブルを取得します。
table = section.Tables[0] if isinstance(section.Tables[0], Table) else None

# 行を削除します。
table.Rows.RemoveAt(1)

# 変更後の文書を保存します。
document.SaveToFile("output/Wordの表から行を削除.docx")
document.Close()

PythonでWordの表から行を削除する

Python で Word の表から列を削除する

Word の表から特定の列を削除するには、各行から対応するセルを削除する必要があります。これには TableRow.Cells.RemoveAt() メソッドを使用します。以下の手順で実装します。

  • Document オブジェクトを作成します。
  • Document.LoadFromFile() メソッドを使用して Word 文書を読み込みます。
  • Document.Sections[] プロパティを使用して最初のセクションを取得します。
  • Section.Tables[] プロパティを使用してセクション内の最初の表を取得します。
  • 表の各行をループ処理します。
  • TableRow.Cells.RemoveAt() メソッドを使用して、各行の特定のセルを削除します。
  • Document.SaveToFile() メソッドを使用して、変更を保存します。
  • Python
from spire.doc import Document, Table

# Document オブジェクトを作成します。
document = Document()
# Word 文書を読み込みます。
document.LoadFromFile("Sample.docx")

# 文書の最初のセクションを取得します。
section = document.Sections[0]

# 最初のセクションの最初のテーブルを取得します。
table = section.Tables[0] if isinstance(section.Tables[0], Table) else None

# テーブルの各行をループ処理します。
for i in range(table.Rows.Count):
    row = table.Rows[i]
    # 列のセルを削除します。
    row.Cells.RemoveAt(2)

# 変更後の文書を保存します。
document.SaveToFile("output/Wordの表から列を削除.docx")
document.Close()

Spire.DocでWordの表から列を削除する

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

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

Published in
Tagged under