1. 程式人生 > >【Python】用python對excel進行讀寫

【Python】用python對excel進行讀寫

Description

  • 0014 :純文字檔案 student.txt為學生資訊, 裡面的內容(包括花括號)如下所示:
    {
    "1":["張三",150,120,100],
    "2":["李四",90,99,95],
    "3":["王五",60,66,68]
    }

    請將上述內容寫到 student.xls 檔案中。
  • 0015:純文字檔案 city.txt為城市資訊, 裡面的內容(包括花括號)如下所示:
    {
    "1" : "上海",
    "2" : "北京",
    "3" : "成都"
    }

    請將上述內容寫到 city.xls 檔案中。
  • 0016:純文字檔案 numbers.txt, 裡面的內容(包括方括號)如下所示:
    [
    [1, 82, 65535],
    [20, 90, 13],
    [26, 809, 1024]
    ]

    請將上述內容寫到 numbers.xls 檔案中。
  • 0020:本來此題題意是對excel表格應用formula。原題有點麻煩,所以把此題改為對numbers.xls進行按列求和操作。

Notes

    這個小專案中涉及用python操作excel的方法。
   
1. 首先觀察到這三個txt文件中的內容非常像dict或list這些基本資料結構的寫法,於是考慮能否將其轉化成基本資料結構。參考了python中將string轉化為dict的方法。這個小專案中選擇了eval()函式,這個函式能直接返回引數執行的結果,但是有一些危險性,可以參看python eval()函式的妙用和濫用
   
2. 查詢什麼python中什麼模組能夠對excel進行操作,參看了以下資料:
    (1)

用python + openpyxl處理excel(07+)文件 + 一些中文處理的技巧
    (2)Python處理Excel資料
    (3)How to write .xls (Excel) files in Python - Tutorial
這個視訊比較老,裡面的方法對03及以前的excel能用,07及以後就不行了。
    (4)OpenPyXL官方手冊
    .
3. 最後選擇用openpyxl模組對excel進行操作。
    寫excel操作
    (1)為了寫excel,首先可以建立一個Workbook類物件,對應著一個excel文件。
    wb = Workbook() # 對應著一個xlsx檔案

   
    (2)接著,對Workbook類物件呼叫create_sheet()函式,建立新的表單,引數為表單的名字,還有其他引數(加入的位置?)。
    sheet = wb.create_sheet(title = fileName.replace('.txt', '')) # xlsx檔案中的一張表,加在後面
   
    (3)對sheet中的cell的value進行寫操作:
    sheet.cell(row = lineNum, column = 1).value = c_key
    為了指定cell,可以採用以上方式,也可以:
    print(ws3['AA10'].value)
   
    對excel進行寫操作時,也可以一下子寫一行:
    for row in range(1, 40):
      sheet.append(range(600))

    以上程式碼實現的內容是對sheet的前四十行,每行的格子裡都依次放上1到600。

    (4)最後要進行儲存操作:
    wb.save(new_fileName)

    讀excel操作
    (1)用load_workbook()函式開啟一個已存在的excel檔案:
    wb = load_workbook(fileName.replace('txt', 'xlsx'))

    (2)選擇一個excel文件中的一個表格:
    sheet = wb['numbers']

    其他操作同上。
   
4. dictionary的遍歷
    (1)dict.items()方法會返回一個list,list中元素是dict中鍵-值對,元組的形式。
    (2)d.keys(), d.values()分別返回一個有全部的key或全部value的list。
    .
5. excel中的formula,直接寫在相應的單元格中就行:
    sheet["A1"] = "=SUM(1, 1)"

My Code

"""
* 0014 && 0015 && 0016
    txt轉化成excel
    by VegB
    2017/1/28

* 0020
    excel中formula的使用
    by VegB
    2017/1/29
"""

from openpyxl import Workbook, load_workbook

def T2E(fileName): # txt to excel
    fd = open(fileName, 'r')
    context = fd.read() # 讀入所有內容
    container = eval(context) # 把string轉化成dictionary/list,這個小專案中只有這兩種情況

    wb = Workbook() # 對應著一個xlsx檔案
    sheet = wb.create_sheet(fileName.replace('.txt', '')) # xlsx檔案中的一張表,加在後面

    # d.items()方法會將鍵-值對作為元組返回, d.keys(), d.values()
    if type(container) == type({}):
        lineNum = 1
        for (c_key, c_value) in container.items():
            sheet.cell(row = lineNum, column = 1).value = c_key

            if type(c_value) == type([]):
                for j in range(0, len(c_value)):
                    sheet.cell(row = lineNum, column = j + 2).value = c_value[j]
            else:
                sheet.cell(row = lineNum, column = 2).value = c_value

            lineNum += 1

    elif type(container) == type([]):
        for i in range(0, len(container)):
            for j in range(0, len(container[i])):
                sheet.cell(row = i + 1, column = j + 1).value = container[i][j]

    fd.close()
    new_fileName = fileName.replace('txt', 'xlsx')
    wb.save(new_fileName)

def Calc(fileName):
    wb = load_workbook(fileName.replace('txt', 'xlsx')) # 開啟excel表格
    sheet = wb['numbers'] # 選擇一個sheet
    for j in range(0, 3):
        sheet.cell(row = 4, column = j + 1).value = '=SUM(%s%d:%s%d)'% (chr(ord('A') + j), 1, chr(ord('A') + j), 3)
    wb.save(fileName.replace('txt', 'xlsx'))



T2E('student.txt')
T2E('city.txt')
T2E('numbers.txt')
Calc('numbers.txt')

Result

    執行結果後,資料夾中如願以償地出現了三個相應的xlsx檔案,點開看看裡面的內容:

     student.xlsx:
 
    student.xlsx

 
     city.xlsx:
   
      city.xlsx

 
    numbers.xlsx:

  numbers.xlsx