python-docx包部分記錄

深井蛙i發表於2020-11-15

官方文件

python-docx

結構記錄

這次主要是使用了paragraph和table,就只記錄比較熟悉的部分。
在這裡插入圖片描述

  • document:這個是整個文件的物件
    1. paragraph:承載文字資訊的一個基礎單元
      • run:最基本的單元,一個paragraph裡可能包含多個run
    2. table:表格結構的基本單元

基礎操作

特別基礎的操作,官方文件裡的範例都有,不在贅述。

改變字型

經常會碰到修改了font.name了,但是字型並沒有改變。

# 這兩行的呼叫需要一塊用上
run.font.name = u"黑體"
run._element.rPr.rFonts.set(qn('w:eastAsia'), u"黑體")

設定字號和影像的大小

需要用到docx.shared裡面的屬性。

from docx.shared import Pt, Cm
run.font.size = Pt(10.5)  # 設定字型的磅數
shape = paragraphs.add_run("\n").add_picture(draft_file_path, height=Cm(10.58), width=Cm(14.11))
# 或者是下面的操作
shape.height = Cm(10.58)  # 設定影像大小的釐米數
shape.width = Cm(14.11)

給表格加邊框

這個是借鑑別人部落格裡的程式碼,出處有點找不到了。

def set_cell_border(cell, **kwargs):
    """
    Set cell`s border
    Usage:
    set_cell_border(
        cell,
        top={"sz": 12, "val": "single", "color": "#FF0000", "space": "0"},
        bottom={"sz": 12, "color": "#00FF00", "val": "single"},
        left={"sz": 24, "val": "dashed", "shadow": "true"},
        right={"sz": 12, "val": "dashed"},
    )
    """
    tc = cell._tc
    tcPr = tc.get_or_add_tcPr()

    # check for tag existnace, if none found, then create one
    tcBorders = tcPr.first_child_found_in("w:tcBorders")
    if tcBorders is None:
        tcBorders = OxmlElement('w:tcBorders')
        tcPr.append(tcBorders)

    # list over all available tags
    for edge in ('left', 'top', 'right', 'bottom', 'insideH', 'insideV'):
        edge_data = kwargs.get(edge)
        if edge_data:
            tag = 'w:{}'.format(edge)

            # check for tag existnace, if none found, then create one
            element = tcBorders.find(qn(tag))
            if element is None:
                element = OxmlElement(tag)
                tcBorders.append(element)

            # looks like order of attributes is important
            for key in ["sz", "val", "color", "space", "shadow"]:
                if key in edge_data:
                    element.set(qn('w:{}'.format(key)), str(edge_data[key]))

# 呼叫
set_cell_border(table2.rows[i].cells[j], top={"sz": 0.5, "val": "single", "color": "#000000", "space": "0"},
                            bottom={"sz": 0.5, "val": "single", "color": "#000000", "space": "0"},
                            left={"sz": 0.5, "val": "single", "color": "#000000", "space": "0"},
                            right={"sz": 0.5, "val": "single", "color": "#000000", "space": "0"})

效果如下圖。
在這裡插入圖片描述

連線sqlsever遇見的中文亂碼問題

關鍵程式碼節選

self.conn = pymssql.connect(host=self.cf['host'], user=self.cf['user'], password=self.cf['pwd'],
                                        database=self.cf['db'], charset='UTF-8')
name = name.encode('latin-1').decode('GBK')

相關文章