天天看點

用python給表格加邊框_Python-PPTX:更改表格樣式或向單元格添加邊框

我已經開始整理一些代碼來擷取Pandas資料并将其放入PowerPoint幻燈片中.我使用的模闆預設為中等樣式2 – 重音1,這很好,因為更改字型和背景相當容易,但似乎沒有實作python-pptx的部分允許更改單元格邊框.以下是我的代碼,可以解決任何問題. (改變XML或更改模闆預設設定以填充更好的樣式對我來說是個不錯的選擇,但是沒有找到關于如何做的好文檔).中等風格4對我來說是理想的,因為它具有我正在尋找的邊界.

import pandas

import numpy

from pptx import Presentation

from pptx.util import Inches, Pt

from pptx.dml.color import RGBColor

#Template Location

tmplLoc = 'C:/Desktop/'

#Read in Template

prs = Presentation(tmplLoc+'Template.pptx')

#Import data as Pandas Dataframe - dummy data for now

df = pandas.DataFrame(numpy.random.randn(10,10),columns=list('ABCDEFGHIJ'))

#Determine Table Header

header = list(df.columns.values)

#Determine rows and columns

in_rows = df.shape[0]

in_cols = df.shape[1]

#Insert table from C1 template

slide_layout = prs.slide_layouts[11]

slide = prs.slides.add_slide(slide_layout)

#Set slide title

title_placeholder = slide.shapes.title

title_placeholder.text = "Slide Title"

#Augment placeholder to be a table

placeholder = slide.placeholders[1]

graphic_frame = placeholder.insert_table(rows = in_rows+1, cols = in_cols)

table = graphic_frame.table

#table.apply_style = 'MediumStyle4'

#table.apply_style = 'D7AC3CCA-C797-4891-BE02-D94E43425B78'

#Set column widths

table.columns[0].width = Inches(2.23)

table.columns[1].width = Inches(0.9)

table.columns[2].width = Inches(0.6)

table.columns[3].width = Inches(2)

table.columns[4].width = Inches(0.6)

table.columns[5].width = Inches(0.6)

table.columns[6].width = Inches(0.6)

table.columns[7].width = Inches(0.6)

table.columns[8].width = Inches(0.6)

table.columns[9].width = Inches(0.6)

#total_width = 2.23+0.9+0.6+2+0.6*6

#Insert data into table

for rows in xrange(in_rows+1):

for cols in xrange(in_cols):

#Write column titles

if rows == 0:

table.cell(rows, cols).text = header[cols]

table.cell(rows, cols).text_frame.paragraphs[0].font.size=Pt(14)

table.cell(rows, cols).text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 255, 255)

table.cell(rows, cols).fill.solid()

table.cell(rows, cols).fill.fore_color.rgb=RGBColor(0, 58, 111)

#Write rest of table entries

else:

table.cell(rows, cols).text = str("{0:.2f}".format(df.iloc[rows-1,cols]))

table.cell(rows, cols).text_frame.paragraphs[0].font.size=Pt(10)

table.cell(rows, cols).text_frame.paragraphs[0].font.color.rgb = RGBColor(0, 0, 0)

table.cell(rows, cols).fill.solid()

table.cell(rows, cols).fill.fore_color.rgb=RGBColor(255, 255, 255)

#Write Table to File

prs.save('C:/Desktop/test.pptx')

解決方法:

也許不是真正幹淨的代碼,但允許我調整表格中所有單元格的所有邊框:

from pptx.oxml.xmlchemy import OxmlElement

def SubElement(parent, tagname, **kwargs):

element = OxmlElement(tagname)

element.attrib.update(kwargs)

parent.append(element)

return element

def _set_cell_border(cell, border_color="000000", border_width='12700'):

tc = cell._tc

tcPr = tc.get_or_add_tcPr()

for lines in ['a:lnL','a:lnR','a:lnT','a:lnB']:

ln = SubElement(tcPr, lines, w=border_width, cap='flat', cmpd='sng', algn='ctr')

solidFill = SubElement(ln, 'a:solidFill')

srgbClr = SubElement(solidFill, 'a:srgbClr', val=border_color)

prstDash = SubElement(ln, 'a:prstDash', val='solid')

round_ = SubElement(ln, 'a:round')

headEnd = SubElement(ln, 'a:headEnd', type='none', w='med', len='med')

tailEnd = SubElement(ln, 'a:tailEnd', type='none', w='med', len='med')

标簽:python,border,powerpoint,python-pptx