Python 操作 Excel 和 Word


Python 作為一門解釋型語言,又是一種動態類型的語言,其靈活性非常適合編寫日常腳本。
一些日常不注重效率的需求可以用 Python 來實現。何況Python有足夠的開源依賴包供我們使用。
本文主要介紹通過 Python 語言實現對 Excel 和 Word 的操作,以及可能出現的坑。

幾種選擇

Python 對 Excel,Word 的操作選擇其實不是很多。主要分類兩類。

  • Win32Com 通過調用Win32Api實現操作Word, Excel, PowerPoint
  • python-docx(word 讀寫), python-excel (excel 操作),在Windo32Api 之上實現對Word,Excel 的操作, 文檔比較齊全和豐富

Win32Com

Windows 對 Excel, Word, PowerPoint 等應用程序會提供專門的Com包供開發者使用。Win32Com 是對包的簡單封裝,接口層基本無變化。
在很多博客中頭疼對Win32Com 的接口不是很了解,無法開發。其實Windows 官方提供了詳細的接口文檔,和 VBA 語言接口是基本一致的。
因此可以參考如下文檔的實現:

舉個例子:

在Excel 中,Sheet 有兩種形式,Charts 或者 Worksheet, 下面舉例從 Chart Sheet 中獲取圖片,並導出到本地。

import win32com.client as win32

# 從Excel excel_name 的sheet_name 中導出圖片保存至picture_name 中
def export_picture(excel_name, picture_name, sheet_name):
    # 獲取Excel api
    excel = win32.gencache.EnsureDispatch("Excel.Application")
    
    # 打開Excel 文檔, wb 為文件句柄
    wb = excel.Workbooks.Open("excel_name.xlsx")
    
    # 導出圖片
    wb.Sheets("sheet_name").Export("picture_name.jpg")
    
    wb.Close()

python-docx 包

使用win32com 操作會有一些不方便,可以使用docx 庫。 docx 庫使用比較人性化。

doc 是按照回車符分割為一個一個段落、heading 等。因此如果需要插入一個回車符,那就需要插入一個paragraph。

舉個例子:


import docx

def edit_doc(doc_name, text):
    doc = docx.Document(doc_name)

    # 添加文字,並居中
    # 此處可直接添加文字,add_paragraph 默認會調用 add_run
    doc.add_paragraph(text).paragraph_format.aligenment = docx.enum.text.WD_ALIGN_PARAGRAPH.CENTER

    # 添加空段落
    doc.add_paragraph()


    # 添加 10x10 的表格
    rows = 10
    cols = 10
    table = doc.add_table( rows, cols, style="Table Grid")

    # 對表格內容進行賦值
    for x,y in [(x,y) for x in range(0,9) for y in range (0, 9)]:
        table.cell(x,y).text = str(x * y)
        table.cell(x,y).paragraphs[0].paragraph_format.alignment = docx.enum.text.WD_ALIGN_PARAGRAPH.CENTER
        # 設置 cell 的寬度
        table.cell(x,y).width = 25600 * 30

    # 第一行表格的合並
    table.cell(0,0).merge(table.cell(0,9))

    # 插入分頁符
    doc.add_page_break()

    # 插入一張圖片
    # 對word 的編輯,需要通過 add_run() 來實現
    doc.add_paragraph().add_run().add_picture("pciture_name.jpg", 25600 * 200, 25600 * 200)

    # 保存文件
    doc.save("output.docx")
    

python-excel 的使用

excel 的操作,有兩個包, xlrd 用於excel 的讀取, xlwt 是用於excel 的寫操作。這里只對excel 的讀取簡單介紹。


# 獲取表格的數據 [0, rows] x [0, cols]
def get_table_data(excel_name, sheet_name, rows, cols):
    result = []

    book = xlrd.open_workbook(excel_name)
    sheet = book.sheet_by_name(sheet_name)
    for row in range (0, rows):
        line = []
        for col in range (0, cols):
            line.append(sheet.cell_value(row, col))
        result.append(line)

    return result

遇到的一個問題:
如何判斷表格內容為空:


if sheet.cell_type(x,y) is 0:
    print "is empty"

技術總結

操作Word,Excel 的包還是比較豐富的,以上是使用比較多的幾個。
對於在xlrd, xlwt, docx 中沒有實現的接口,可以使用win32com 來實現。
如果win32com 無法實現,則可以考慮是否應用程序沒有提供相應的接口服務了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM