Python讀取Excel單元格的內容

xlrd讀取Excel文件

python讀取excel的單元格返回類型

Python通過xlrd對Excel進行讀取操作時,返回的數據類型(ctype)有下面5中類型:
0 – empty:空
1 – string:字符串
2 – number:數字
3 – date:日期
4 – boolean:布爾
5 – error
Excel文件示例圖片

import xlrd
import os
from LYKION.self.log import Logger
from datetime import datetime
from xlrd import xldate_as_tuple
'''
python讀取excel中單元格的內容返回的5種類型
0 --empty:空
1 --string:字符串
2 --number:數字
3 --date:日期
4 --boolean:布爾
5 --error
'''
excel_path = os.path.join(os.getcwd(), 'extra.xlsx')    # Excel文件路徑
Logger().info('Excel文件的路徑:' + excel_path)
excel_file = xlrd.open_workbook(excel_path)             # 打開Excel文件
# table = excel_file.sheet_by_index(1)                  # 通過索引打開
# table = excel_file.sheet_by_name('mode')              # 通過名字打開
table = excel_file.sheets()[1]                          # 通過索引打開
Logger().info('已經打開的工作簿的名字:' + table.name)
Logger().info('**********開始讀取Excel單元格的內容**********')

all_content = []
for i in range(table.nrows):
    row_content = []
    for j in range(table.ncols):
        ctype = table.cell(i, j).ctype              # 獲取單元格返回的數據類型
        cell_value = table.cell(i, j).value         # 獲取單元格內容
        if ctype == 2 and cell_value % 1 == 0:      # 是否是數字類型
            cell_value = int(cell_value)
        elif ctype == 3:                            # 是否是日期
            date = datetime(*xldate_as_tuple(cell_value, 0))
            cell_value = date.strftime('%Y/%m/%d %H:%M:%S')
        elif ctype == 4:                            # 是否是布爾類型
            cell_value = True if cell_value == 1 else False
        row_content.append(cell_value)
    all_content.append(row_content)
    # Logger().info('[' + ', '.join("'" + str(element) + "'" for element in row_content) + ']')
    Logger().info(row_content)
    # Logger().info(all_content)

Logger().info('**********Excel單元格的內容讀取完畢**********')

Logger().info('行數:%d' % table.nrows)     # 打印行數
Logger().info('列數:%d' % table.ncols)     # 打印列數
Logger().info('========================')
Logger().info('第二行的內容:' + str(table.row_values(1)))     # 打印一行的內容
Logger().info('第二列的內容:' + str(table.col_values(1)))     # 打印一列的內容
Logger().info('========================')
# 打印單元格的內容(以下打印的是第二行第二列的單元格的內容)
Logger().info(table.cell(1, 1).value)
Logger().info(table.cell_value(1, 1))
Logger().info(table.row(1)[1].value)
Logger().info('========================')
1)注意

在xlutils.copy使用保存Excel文件時,只能保存後綴爲xls的文件,不能保存xlsx的文件

# -*- coding:utf-8 -*-
import xlrd
import os
import time
from xlutils.copy import copy

filePath = os.path.join(os.getcwd(), 'text.xlsx')
book = xlrd.open_workbook(filePath)
fs = copy(book)
ws = fs.get_sheet(0)
ws.write(4, 0, '天府軟件園')
fs.save('new01.xls')

openpyxl讀取Excel文件

在openpyxl中,有三個概念:Workbooks,Sheets,Cells:
1、Workbook就是一個打開的excel文件,即excel工作簿
2、Sheet是工作簿中的一張表,即工作表
3、Cell就是一個簡單的單元格
openpyxl就是圍繞着這三個概念進行的,不管讀寫都是“三板斧”:打開Workbook,定位Sheet,操作Cell

向Excel寫入內容

以下過程:創建excel→寫入內容→保存excel

'''
以下過程:創建excel→寫入內容→保存excel
'''
wb = openpyxl.Workbook()    # 創建一個新的excel文件(還未保存)
# ws = wb.active              # 激活sheet,默認至少會創建一個sheet
ws = wb.create_sheet(title='TestCase', index=0)     # 直接創建一個自定義title的sheet;index=0:表示插在開頭,補貼寫則表示插在最末
ws.cell(1, 1).value = 'Hello World'     # 給單元個賦值
'''
1、rang(x,y)的邊界不包含x,但包含y;例如range(2,5) 表示[2,5),即(2,3,4)
2、openpyxl的索引是從1開始的,與excel本身的序號相同;例如ws.cell(1, 1) 表示第一行第一例
3、注意:excel文件處於打開狀態時,是不能保存成功
'''
# 用for循環的方式連續向單元格中寫入內容
for i in range(2, 5):
    for j in range(2, 6):
        ws.cell(i, j).value = i*j
wb.save('lykion.xls')      # 保存excel文件,寫入完成後,一定要保存
讀取Excel的內容

以下過程:打開excel文件→獲取工作簿(sheet)→讀取單元格內容

'''
以下過程:打開excel文件→獲取工作簿(sheet)→讀取單元格內容
'''
filePath = os.path.join(os.getcwd(), 'text.xlsx')
wb = openpyxl.load_workbook(filePath)   # 打開excel文件
# ws = wb.get_sheet_by_name('示例文件')      # 通過工作簿的名字(sheet)打開
ws = wb['TestCase']
res = ws.cell(row=1, column=1).value    # 獲取單元格的內容
# print(res)
# print(wb.sheetnames)                    # 顯示excel文件的所有sheet名字
print(ws.min_row, ws.max_row, ws.max_column, ws.min_column)      # 單元格的行數、列數; max_row:最大行、max_column:最大列
print('*******************************************************')
all_content = []
# 方式一、用for循環的方式獲取所有單元格的內容
# for i in range(1, ws.max_row+1):
#     row_content = []
#     for j in range(1, ws.max_column+1):
#         value = ws.cell(row=i, column=j).value
#         row_content.append(value)
#     all_content.append(row_content)
#     print(row_content)
#     print('*******************************************************')
# print(all_content)
# print('===========================================================')
# # 方式二、用for循環的方式遍歷每個單元格
# all_row = []
# for row in ws.rows:       # 按行獲取單元格(Cell對象) - 生成器
#     ev_row = []
#     for cell in row:
#         value = cell.value
#         ev_row.append(value)
#     all_row.append(ev_row)
#     print(ev_row)
#     print('*******************************************************')
#     print(all_row)
# 方式三
all_value = []
for row in ws.values:       # 按行獲取表格的內容(數據) - 生成器
    all_value.append(row)
print(all_value)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章