如何使用 docx 模块将样式对象中的格式化值添加到 Word 文档 table 中?
How do I add formatted values from a Style Object into a Word document table using the docx module?
我正在使用 pandas 和 Python .docx 模块使用来自数据框的数据在 Word 文档中添加 tables。我希望数据值以我应用于数据框的格式样式出现在 Word 文档 table 中。有些列的数字格式带有逗号分隔符 {:,},有些列的百分比格式为 {:.2%}。
但是,在我将格式样式添加到数据框后,数据框变成了一个 Style 对象。然后我无法将 Style 对象的值添加到 Word 中的 table。
如何将格式样式应用于数据框中的值,以便它们在 Word 文档中显示样式table?
import pandas as pd
import docx
import openpyxl
# initialize list of lists
data = [[150000, 100000,.14565], [250000, 200000,.16334]]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns = ['Revenues', 'Expenditures', 'Surplus'])
# Apply style to pandas DataFrame
df = df.style.format({"Revenues": "${:20,.0f}","Expenditures": "${:20,.0f}","Surplus": "{:.2%}"})
# Create the Word Document
doc = docx.Document('hello.docx')
# add a table to the end and create a reference variable
# extra row is so we can add the header row
t = doc.add_table(df.shape[0]+1, df.shape[1])
# add the header rows.
for j in range(df.shape[-1]):
t.cell(0,j).text = df.columns[j]
# add the rest of the data frame
for i in range(df.shape[0]):
for j in range(df.shape[-1]):
t.cell(i+1,j).text = str(df.values[i,j])
doc.save('hello_python_output.docx')
而不是使用 style
对象(主要用于在 HTML 中渲染数据框)。您可以将这些转换直接应用于数据框(从而使每一列成为 string
或 object
dtype)并将这些字符串值写入您的 word 文档。您可以通过 transform
方法应用格式:
conversions = {
"Revenues": "${:20,.0f}",
"Expenditures": "${:20,.0f}",
"Surplus": "{:.2%}"
}
new_df = df.transform({k: v.format for k, v in conversions.items()})
print(new_df)
Revenues Expenditures Surplus
0 $ 150,000 $ 100,000 14.56%
1 $ 250,000 $ 200,000 16.33%
我正在使用 pandas 和 Python .docx 模块使用来自数据框的数据在 Word 文档中添加 tables。我希望数据值以我应用于数据框的格式样式出现在 Word 文档 table 中。有些列的数字格式带有逗号分隔符 {:,},有些列的百分比格式为 {:.2%}。
但是,在我将格式样式添加到数据框后,数据框变成了一个 Style 对象。然后我无法将 Style 对象的值添加到 Word 中的 table。
如何将格式样式应用于数据框中的值,以便它们在 Word 文档中显示样式table?
import pandas as pd
import docx
import openpyxl
# initialize list of lists
data = [[150000, 100000,.14565], [250000, 200000,.16334]]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns = ['Revenues', 'Expenditures', 'Surplus'])
# Apply style to pandas DataFrame
df = df.style.format({"Revenues": "${:20,.0f}","Expenditures": "${:20,.0f}","Surplus": "{:.2%}"})
# Create the Word Document
doc = docx.Document('hello.docx')
# add a table to the end and create a reference variable
# extra row is so we can add the header row
t = doc.add_table(df.shape[0]+1, df.shape[1])
# add the header rows.
for j in range(df.shape[-1]):
t.cell(0,j).text = df.columns[j]
# add the rest of the data frame
for i in range(df.shape[0]):
for j in range(df.shape[-1]):
t.cell(i+1,j).text = str(df.values[i,j])
doc.save('hello_python_output.docx')
而不是使用 style
对象(主要用于在 HTML 中渲染数据框)。您可以将这些转换直接应用于数据框(从而使每一列成为 string
或 object
dtype)并将这些字符串值写入您的 word 文档。您可以通过 transform
方法应用格式:
conversions = {
"Revenues": "${:20,.0f}",
"Expenditures": "${:20,.0f}",
"Surplus": "{:.2%}"
}
new_df = df.transform({k: v.format for k, v in conversions.items()})
print(new_df)
Revenues Expenditures Surplus
0 $ 150,000 $ 100,000 14.56%
1 $ 250,000 $ 200,000 16.33%