簡體   English   中英

將 csv 作為表格導入 docx 時,如何將列標題與每列中的值對齊?

[英]How can I align the column headers with the values in each column when importing a csv into docx as a table?

將此 csv 作為表格導入 docx 時,如何將列標題與每列中的值對齊?

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'Target':['Targetttt','Targetttttttttttttttttt'],
    'Something': ['2.037','2.099'],
    'Something_long': ['3.123','4.123'],
    'Something _even_longer': ['1.123','1.234']
})
df

df.to_csv(r"C:\Users\crist\word_automation\Summary_template\TABLE.csv", sep='\t', encoding='utf-8', index = False)

import docx 
import csv

doc = docx.Document()

with open('TABLE.csv', newline='') as f:
    csv_reader = csv.reader(f) 

    csv_headers = next(csv_reader)
    csv_cols = len(csv_headers)

    table = doc.add_table(rows=2, cols=csv_cols)
    hdr_cells = table.rows[0].cells

    for i in range(csv_cols):
        hdr_cells[i].text = csv_headers[i]

    for row in csv_reader:
        row_cells = table.add_row().cells
        for i in range(csv_cols):
            row_cells[i].text = row[i]

doc.add_page_break()
doc.save("data.docx")

數據框看起來像這樣:

    Target            Something Something_long  Something _even_longer
0   Targetttt         2.037     3.123           1.123
1   Targetttttttttttt 2.099     4.123           1.234

將 csv 導出為 word 時,表格會丟失其格式,並且列中的值不再在每列中對齊,因為每個值的字符長度不同。

對於每個單元格,只需按照您想要的方式對齊其第一段:

from docx.enum.text import WD_ALIGN_PARAGRAPH

cell.paragraphs[0].paragraph_format.alignment = WD_ALIGN_PARAGRAPH.LEFT
# --- or .RIGHT or .CENTER if you like ---

您可能希望以不同方式對齊不同的單元格塊,例如您希望行標題左對齊,這在表格布局中很常見。

一個實用函數可能很方便:

def align_cell(cell, alignment):
    for p in cell.paragraphs:
        p.paragraph_format.alignment = alignment

這樣你就可以調用:

align_cell(cell, WD_ALIGN_PARAGRAPH.RIGHT)

這更緊湊一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM