本文目錄一覽:
Python操作Excel
因為工作上的需要,最近經常用Python對報表做Excel導入導出,特此做個筆記,方便日後查看。
首先我選擇了Python-Excel下的xlrd和xlwt。需要注意的是,xlwt只支持生成xls,暫時還不支持xlsx。
讀取主要是用到這兩個方法,我想到就繼續補充,更多用法請查閱官方文檔
表格樣式設置有XFStyle和easyxf兩種方式
列寬在Excel裡面用字符寬帶來表示。xlwt以字符’0’的1/256寬為一個單位,默認表格寬度為2962,大致相當於11個字符寬度。設置Excel的列寬就大致等於,字符寬度 * 256 + 182 (有待繼續考證,精度目前還行)
行高再Excel裡面一般用磅來表示,磅 * 20 即是xlwt的數值。字體的大小也是用磅來設置。
設置頁面方向
使用num_format_str來設置單元格類型。
特別是遇到時間的時候,Excel會自動轉為May-2017這種格式,這時候就要設置為文本類型,防止自動轉換
python如何操作當前已經打開的excel?
讀取一個Excel的基本流程
1. 雙擊打開一個Excel文件
2. 選擇sheet
3. 對sheet裡面的東西進行操作
在python中我們使用第三方模塊 openpyxl模塊操作Excel
ps:這個模塊不是python自帶的 是第三方模塊需要我們下載的
進入終端輸入: pip install openpyxl
如果想要下載快點:百度搜索 python第三方源
from openpyxl import load_workbook
# 1. 打開Excel文件
workbook = load_workbook(“p1.xlsx”)
# 2. 選擇sheet
# 2.1 獲取所有sheet
# print(workbook.sheetnames)
# 2.2 選擇sheet
sheet = workbook[“Sheet1”]
print(sheet.max_row) # 最大行號
print(sheet.max_column) # 最大列號
# 2.3 我們選擇了sheet後就可以去操作數據了
# cell = sheet.cell(1, 1) # 獲取到單元格
# print(cell.value)
sheet 相關操作
from openpyxl import load_workbook
# 1. 打開Excel文件
workbook = load_workbook(“p1.xlsx”)
# 2. 選擇sheet
# 2.1 獲取所有sheet
# print(workbook.sheetnames)
# 2.2 選擇sheet
# sheet = workbook[“Sheet1”]
# 2.3 基於索引的方式獲取sheet
# sheet = workbook.worksheets[0]
# 3. 獲取到所有的sheet
# for name in workbook.sheetnames:
# sheet = workbook[name]
# cell = sheet.cell(1, 1)
# print(cell.value)
讀單元格的數據
from openpyxl import load_workbook
# 1. 打開Excel文件
workbook = load_workbook(“p1.xlsx”)
# 2 獲取sheet
sheet = workbook.worksheets[0]
# 獲取到第N行第N列的單元格
# cell = sheet.cell(1, 2)
# print(cell.value)
# 獲取到某個單元格
# cell = sheet[‘A2’]
# print(cell.value)
# print()
# for cell in sheet[1]: # 獲取到第一行的內容
# print(cell.value)
# 獲取到所有的行的數據 獲取到一列的值
# for row in sheet.rows:
# print(row[0].value)
# 獲取到所有的列的數據 獲取到一行的值
for col in sheet.columns:
print(col[0].value)
寫Excel
# 在Excel中想要寫文件 大致可以分為兩種
# 1. 在原有的Excel的基礎上寫內容
# 2. 在一個新的Excel裡面寫內容
1. 打開Excel表格
2. 找到單元格 修改寫入內容
3. 保存
# from openpyxl import load_workbook
#
# # 1. 打開Excel文件
# workbook = load_workbook(“p1.xlsx”)
# # 2 獲取sheet
# sheet = workbook.worksheets[0]
#
# # 獲取到第N行第N列的單元格
# # cell = sheet.cell(1, 2)
# # print(cell.value)
#
# # 獲取到某個單元格
#
# # cell = sheet[‘A2’]
# # print(cell.value)
#
# # print()
# # for cell in sheet[1]: # 獲取到第一行的內容
# # print(cell.value)
#
#
# # 獲取到所有的行的數據 獲取到一列的值
# # for row in sheet.rows:
# # print(row[0].value)
#
# # 獲取到所有的列的數據 獲取到一行的值
# for col in sheet.columns:
# print(col[0].value)
# from openpyxl import workbook
# wb = workbook.Workbook() # 創建一個Excel會默認有一個sheet 就叫 Sheet
# 1. 修改sheet名稱
# sheet = wb.worksheets[0]
# sheet.title = ‘數據集’
# wb.save(‘p2.xlsx’)
# 2. 創建一個新的sheet 還可以設置顏色
# sheet = wb.create_sheet(‘工作計劃’, 1)
# sheet.sheet_properties.tabColor = ‘FFB6C1’
# wb.save(‘p2.xlsx’)
# 3. copy sheet
# sheet = wb.create_sheet(‘工作計劃’)
# sheet.sheet_properties.tabColor = ‘FFB6C1’
#
# new_sheet = wb.copy_worksheet(wb[‘Sheet’])
# new_sheet.title = ‘新的計劃’
# wb.save(‘p2.xlsx’)
# print(wb.sheetnames)
# sheet = wb.worksheets[0]
# cell = sheet.cell(1, 1)
# cell.value = ‘哈哈哈’
#
# wb.save(‘p2.xlsx’)
from openpyxl import load_workbook
# 1. 打開Excel文件
workbook = load_workbook(“p2.xlsx”)
# 2 獲取sheet
sheet = workbook.worksheets[0]
# 1. 獲取某個單元格 修改值
# cell = sheet.cell(1, 1)
# cell.value = ‘哈哈哈’
# wb.save(‘p2.xlsx’)
# 2. 獲取某個單元格 修改值
# sheet[‘B3’] = ‘光’
# workbook.save(‘p2.xlsx’)
# cell_list = sheet[“B2”: ‘C3’]
# for row in cell_list:
# for cell in row:
# cell.value = ‘新的值’
# workbook.save(‘p1.xlsx’)
for row in sheet.iter_rows(min_row=5, min_col=1, max_col=7, max_row=10):
for cell in row:
cell.value = ‘oo’
workbook.save(‘p1.xlsx’)
r row in sheet.iter_rows(min_row=5, min_col=1, max_col=7, max_row=10):
for cell in row:
cell.value = ‘oo’
workbook.save(‘p1.xlsx’)
Python操作Excel實現自動化報表
Python操作Excel實現自動化報表
安裝
python -m pip install xlrd xlwt xlutils。
基本用法
1.從指定文件路徑讀取excel表格,進行一定操作,然後保存到另一個excel文件:result.xlsx
import xlwt
import xlrd
from xlutils.copy import copy
import pandas as pd
from pandas import DataFrame,Series
import os
os.chdir(‘./’)
# 從指定文件路徑讀取excel表格
df = pd.read_excel(‘D:/mypaper/data/data.xlsx’)
# 查看df內容
# 根據age算出出生年份,增加一列
import datetime
import os
year = datetime.datetime.now().year#獲取當前系統時間對應的年份
df[‘birth’] = year-df[‘age’]
df.to_excel(‘result.xlsx’)#保存到當前工作目錄,可以用os.getcwd()查看
#查看下此時df的內容,可以看到已經生成了birth這一列。
2.單元格操作
# 定義方法:讀取指定目錄下Excel文件某個sheet單元格的值
def excel_read(file_path,table,x,y):
data = xlrd.open_workbook(file_path)
table = data.sheet_by_name(table)
return table.cell(y,x).value
# 定義方法:單元格值及樣式
write_obj_list = []
def concat_obj(cols,rows,value):
write_obj_list.append({‘cols’:cols,’rows’:rows,’value’:value,\
‘style’:xlwt.easyxf(‘font: name 宋體,height 280;alignment: horiz centre’)})
# 定義方法:合併單元格
def merge_unit(srows,erows,scols,ecols,value):
write_obj_list.append({‘id’:’merge’,’srows’:srows,’erows’:erows,’scols’:scols,\
‘ecols’:ecols,’value’:value,’style’:xlwt.easyxf(‘font: name 宋體,height 280;alignment: horiz centre’)})
# 定義方法:更新excel
excel_update(file_path,write_obj_list,new_path):
old_excel = xlrd.open_workbook(file_path, formatting_info=True)
#管道作用
new_excel = copy(old_excel)
”’
通過get_sheet()獲取的sheet有write()方法
”’
sheet1 = new_excel.get_sheet(0)
”’
1代表是修改第幾個工作表裡,從0開始算是第一個。此處修改第一個工作表
”’
for item in write_obj_list:
if ‘id’ not in item.keys():
if ‘style’ in item.keys():
sheet1.write(item[‘rows’], item[‘cols’], item[‘value’],item[‘style’])
else:
sheet1.write(item[‘rows’], item[‘cols’], item[‘value’])
else:
if ‘style’ in item.keys():
sheet1.write_merge(item[‘srows’],item[‘erows’],item[‘scols’], item[‘ecols’], item[‘value’],item[‘style’])
else:
sheet1.write_merge(item[‘srows’],item[‘erows’],item[‘scols’], item[‘ecols’], item[‘value’])
”’
如果報錯 dict_items has no attributes sort
把syle源碼中–alist.sort() 修改為—- sorted(alist)
一共修改2次
”’
new_excel.save(file_path)
#參數詳解
# srows:合併的起始行數
# erows:合併的結束行數
# scols:合併的起始列數
# ecols:合併的結束列數
# value:合併單元格後的填充值
# style:合併後填充風格:
# font: name 宋體
# height 280;
# alignment: horiz centre
# … 與excel操作基本保持一致
(注意:該方法僅僅是將需要直行的動作保存到一個list中,真正的動作還未執行,執行動作是發生在excel_update方法中)
最終調用excel_update方法,傳入每個單元格需要進行的操作和填充值的write_obj_list以及文件保存路徑file_path,就可以在當前工作目錄下生成想要的Excel結果文件。
注意:
1.write_obj_list支持用戶自定義
2.write_obj_list也可以是根據excel_read方法讀取現有待修改的excel文件(可以維持原有表格的格式)而生成
End
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/243486.html