目錄
- xls和xlsx
- 基本操作
- 1:用openpyxl模塊打開Excel檔案,查看所有sheet表
- 2.1:通過sheet名稱獲取表格
- 2.2:獲取活動表
- 3.1:獲取表格的尺寸
- 4.1:獲取單元格中的資料
- 4.2:獲取單元格的行、列、坐標
- 5:獲取區間內的資料
- 獲取指定區間的資料
- 獲取指定行列的資料
- 按行、列獲取值
- 獲取活動表的行列數
- 操作
- 創建新的excel
- 修改單元格、excel另存為
- 添加資料
- 插入有效資料
- 插入空行空列
- 洗掉行、列
- 移動指定區間的單元格(move_range)
- 字母列號與數字列號之間的轉換
- 字體樣式
- 查看字體樣式
- 修改字體樣式
- 設定對齊格式
- 設定行高列寬
- 合并、拆分單元格
- sheet表
- 創建新的sheet(create_sheet)
- 修改sheet名字(title)
- 復制sheet表(copy_worksheet)
- 洗掉sheet表(remove)
- 操作多個Excel表
- 背景知識
- numpy與pandas
- xlsxwriter
- 一個Excel電子表格檔案稱為一個作業簿
- 一個作業簿保存在一個擴展名為.xlsx的檔案中
- 一個作業簿可以包含多個表
- 用戶當前查看的表(或關閉Excel前最后查看的表)稱為活動表
- 在特定行和列的方格稱為單元格、格子

處理Excel表格需要用到openpyxl模塊,該模塊需要手動安裝pip install openpyxl
xls和xlsx
簡單來說:
xls是excel2003及以前版本所生成的檔案格式
xlsx是excel2007及以后版本所生成的檔案格式
(excel 2007之后版本可以打開上述兩種格式,但是excel2013只能打開xls格式)
進一步的詳細解釋參見:excel后綴.xls和.xlsx有什么區別
基本操作
用到的test.xlsx表格
在這里插入圖片描述
1:用openpyxl模塊打開Excel檔案,查看所有sheet表
openpyxl.load_workbook()函式接受檔案名,回傳一個workbook資料型別的值,這個workbook物件代表這個Excel檔案,這個有點類似File物件代表一個打開的文本檔案,
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
print(workbook.sheetnames) # 列印Excel表中的所有表
# 結果:
# ['Sheet1', 'Sheet2']
2.1:通過sheet名稱獲取表格
在第10行,使用workbook['Sheet1']獲取指定sheet表
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
print(workbook.sheetnames) # 列印Excel表中的所有表
sheet = workbook['Sheet1'] # 獲取指定sheet表
print(sheet)
# 結果:
# ['Sheet1', 'Sheet2']
# <Worksheet "Sheet1">
2.2:獲取活動表
使用workbook.active獲取活動表
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print(sheet)
# 結果:
# <Worksheet "Sheet1">
3.1:獲取表格的尺寸
這里所說的尺寸大小,指的是excel表格中的資料有幾行幾列,針對的是不同的sheet而言
使用sheet.dimensions獲取表格的尺寸
下面列印的A1:B7是什么意思呢?

import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook['Sheet1'] # 獲取指定sheet表
print(sheet.dimensions) # 獲取表格的尺寸大小
# 結果:
# A1:B7
4.1:獲取單元格中的資料
方法1:指定坐標的方式
sheet[“A1”]
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
# print(sheet.dimensions) # 獲取表格的尺寸大小
cell1 = sheet['A1'] # 獲取A1單元格的資料
cell2 = sheet['B7'] # 獲取B7單元格的資料
# cell2 = sheet['B7'].value # 另一種寫法
# 正確示范
# cell1.value獲取單元格A1中的值
# cell2.value獲取單元格B7中的值
print(cell1.value,cell2.value) # 姓名 18
# 錯誤示范
print(cell1,cell2) # <Cell 'Sheet1'.A1> <Cell 'Sheet1'.B7>
方法2: 指定行列的方式
sheet.cell(row=, column=)方式
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
# print(sheet.dimensions) # 獲取表格的尺寸大小
cell1 = sheet.cell(row=1,column=1) # 獲取第1行第1列的資料
cell2 = sheet.cell(row=3,column=2) # 獲取第3行第4的資料
# 正確示范
# cell1.value獲取單元格A1中的值
# cell2.value獲取單元格B7中的值
print(cell1.value,cell2.value) # 姓名 41
4.2:獲取單元格的行、列、坐標
.row獲取某個格子的行數;.columns獲取某個格子的列數;.corordinate獲取某個格子的坐標;
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
# print(sheet.dimensions) # 獲取表格的尺寸大小
cell = sheet.cell(row=3, column=2) # 獲取第3行第4的資料
print(cell.value, cell.row, cell.column, cell.coordinate)
'''
結果:
41 3 2 B3
'''
5:獲取區間內的資料
獲取單行單列資料的時候,使用一層for回圈;獲取多行多列、指定區間的資料時,使用兩層for回圈
獲取指定區間的資料
- 使用
sheet['A1:A5']拿到指定區間 - 使用兩個for回圈拿到資料
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:')
print(sheet)
cell = sheet['A1:A5'] # 獲取A1到A5的資料
print(cell)
# 列印A1到A5的資料
for i in cell:
for j in i:
print(j.value)
# 結果:
# 當前活動表是:
# <Worksheet "Sheet1">
# ((<Cell 'Sheet1'.A1>,), (<Cell 'Sheet1'.A2>,), (<Cell 'Sheet1'.A3>,), (<Cell 'Sheet1'.A4>,), (<Cell 'Sheet1'.A5>,))
# 姓名
# 張三
# 李四
# 王五
# 趙六
獲取指定行列的資料
- sheet[“A”] — 獲取A列的資料
- sheet[“A:C”] — 獲取A,B,C三列的資料
- sheet[5] — 只獲取第5行的資料
下面的代碼,獲取一列資料的時候,使用一層for回圈
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
cell = sheet['2'] # 獲取第2行的資料
# 列印A1到A5的資料
for i in cell:
print(i.value)
# 結果:
# 當前活動表是:<Worksheet "Sheet1">
# 張三
# 74
下面代碼,獲取兩列資料的時候,使用兩層for回圈,注意到,兩列的結果列印到一起了,可讀性較差
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
cell = sheet['A:B'] # 獲取AB列的資料
# 列印AB列資料
for i in cell:
for j in i:
print(j.value)
# 結果:
# 當前活動表是:<Worksheet "Sheet1">
# 姓名
# 張三
# 李四
# 王五
# 趙六
# alice
# bob
# 年齡
# 74
# 41
# 56
# 12
# 17
# 18
按行、列獲取值
iter_rows():按行讀取
iter_cols():按列讀取
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
# 按行獲取值
print('按行獲取值')
for i in sheet.iter_rows(min_row=2, max_row=5, min_col=1, max_col=2):
for j in i:
print(j.value)
# 按列獲取值
print('按列獲取值')
for i in sheet.iter_cols(min_row=2, max_row=5, min_col=1, max_col=2):
for j in i:
print(j.value)
# 結果:
# 當前活動表是:<Worksheet "Sheet1">
# 按行獲取值
# 張三
# 74
# 李四
# 41
# 王五
# 56
# 趙六
# 12
# 按列獲取值
# 張三
# 李四
# 王五
# 趙六
# 74
# 41
# 56
# 12

獲取活動表的行列數
方法1:使用
sheet.max_row 獲取行數
sheet.max_column 獲取列數
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('2.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
rows = sheet.max_row # 獲取行數
column = sheet.max_column # 獲取列數
print(rows)
print(column)
'''
結果:
當前活動表是:<Worksheet "Sheet1">
381
6
'''
方法2:自己寫一個for回圈
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
row = []
column = []
# 獲取當前活動表有多少行
for i in sheet.rows:
row.append(list(i)) # i是元組型別,轉為串列
# 獲取當前活動表有多少列
for i in sheet.columns:
column.append(list(i)) # i是元組型別,轉為串列
print('行數:'+str(len(row)))
print('列數:'+str(len(column)))
'''
結果:
當前活動表是:<Worksheet "1號sheet">
行數:12
列數:3
'''
操作
創建新的excel
第9行代碼用來指定創建的excel的活動表的名字:
- 不寫第9行,默認創建sheet
- 寫了第9行,創建指定名字的sheet表
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.Workbook()
sheet = workbook.active
sheet.title = '1號sheet'
workbook.save('1.xlsx')
修改單元格、excel另存為
第9行代碼,通過給單元格重新賦值,來修改單元格的值
第9行代碼的另一種寫法sheet['B1'].value = 'age'
第10行代碼,保存時如果使用原來的(第7行)名字,就直接保存;如果使用了別的名字,就會另存為一個新檔案
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
sheet['A1'] = 'name'
workbook.save('test.xlsx')

添加資料
插入有效資料
使用append()方法,在原來資料的后面,按行插入資料
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
data = [
['素子',23],
['巴特',24],
['塔奇克馬',2]
]
for row in data:
sheet.append(row) # 使用append插入資料
workbook.save('test.xlsx')

插入空行空列
- insert_rows(idx=數字編號, amount=要插入的行數),插入的行數是在idx行數的下方插入
- insert_cols(idx=數字編號, amount=要插入的列數),插入的位置是在idx列數的左側插入
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
sheet.insert_rows(idx=3, amount=2)
sheet.insert_cols(idx=2, amount=1)
workbook.save('test.xlsx')

洗掉行、列
- delete_rows(idx=數字編號, amount=要洗掉的行數)
- delete_cols(idx=數字編號, amount=要洗掉的列數)
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
sheet.delete_rows(idx=10) # 洗掉第10行
sheet.delete_cols(idx=1, amount=2) # 洗掉第1列,及往右共2列
workbook.save('test.xlsx')

移動指定區間的單元格(move_range)
move_range(“資料區域”,rows=,cols=):正整數為向下或向右、負整數為向左或向上
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
sheet.move_range('D11:F12',rows=0,cols=-3) # 移動D11到F12構成的矩形格子
workbook.save('test.xlsx')

字母列號與數字列號之間的轉換
核心代碼
from openpyxl.utils import get_column_letter, column_index_from_string
# 根據列的數字回傳字母
print(get_column_letter(2)) # B
# 根據字母回傳列的數字
print(column_index_from_string('D')) # 4
舉個例子:
import os
import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('2.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
# 根據列的數字回傳字母
print(get_column_letter(2)) # B
# 根據字母回傳列的數字
print(column_index_from_string('D')) # 4
字體樣式
查看字體樣式
import os
import openpyxl
import openpyxl.styles
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:'+str(sheet))
cell = sheet['A1']
font = cell.font
print('當前單元格的字體樣式是')
print(font.name, font.size, font.bold, font.italic, font.color)
'''
當前活動表是:<Worksheet "1號sheet">
當前單元格的字體樣式是
等線 11.0 False False <openpyxl.styles.colors.Color object>
Parameters:
rgb=None, indexed=None, auto=None, theme=1, tint=0.0, type='theme'
'''
修改字體樣式
openpyxl.styles.Font(name=字體名稱,size=字體大小,bold=是否加粗,italic=是否斜體,color=字體顏色)
其中,字體顏色中的color是RGB的16進制表示
import os
import openpyxl
import openpyxl.styles
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print(sheet)
cell = sheet['A1']
cell.font = openpyxl.styles.Font(name="微軟雅黑", size=20, bold=True, italic=True, color="FF0000")
workbook.save('test.xlsx')

再者,可以使用for回圈,修改多行多列的資料,在這里介紹了獲取的方法
import os
import openpyxl
import openpyxl.styles
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print(sheet)
cell = sheet['A']
for i in cell:
i.font = openpyxl.styles.Font(name="微軟雅黑", size=20, bold=True, italic=True, color="FF0000")
workbook.save('test.xlsx')

設定對齊格式
Alignment(horizontal=水平對齊模式,vertical=垂直對齊模式,text_rotation=旋轉角度,wrap_text=是否自動換行)
水平對齊:‘distributed’,‘justify’,‘center’,‘left’, ‘centerContinuous’,'right,‘general’
垂直對齊:‘bottom’,‘distributed’,‘justify’,‘center’,‘top’
import os
import openpyxl.styles
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
cell = sheet['A1']
alignment = openpyxl.styles.Alignment(horizontal="center", vertical="center", text_rotation=0, wrap_text=True)
cell.alignment = alignment
workbook.save('test.xlsx')

當然,你仍舊可以呼叫for回圈來實作對多行多列的操作
import os
import openpyxl.styles
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
cell = sheet['A']
alignment = openpyxl.styles.Alignment(horizontal="center", vertical="center", text_rotation=0, wrap_text=True)
for i in cell:
i.alignment = alignment
workbook.save('test.xlsx')

設定行高列寬
設定行列的寬高:
- row_dimensions[行編號].height = 行高
- column_dimensions[列編號].width = 列寬
import os
import openpyxl
import openpyxl.styles
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
# 設定第1行的高度
sheet.row_dimensions[1].height = 50
# 設定B列的卷度
sheet.column_dimensions['B'].width = 20
workbook.save('test.xlsx')

設定所有單元格
(顯示的結果是設定所有,有資料的單元格的)
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
import os
os.chdir(r'C:\Users\asuka\Desktop')
workbook = load_workbook('1.xlsx')
print(workbook.sheetnames) # 列印所有的sheet表
ws = workbook[workbook.sheetnames[0]] # 選中最左側的sheet表
width = 2.0 # 設定寬度
height = width * (2.2862 / 0.3612) # 設定高度
print("row:", ws.max_row, "column:", ws.max_column) # 列印行數,列數
for i in range(1, ws.max_row + 1):
ws.row_dimensions[i].height = height
for i in range(1, ws.max_column + 1):
ws.column_dimensions[get_column_letter(i)].width = width
workbook.save('test.xlsx')

合并、拆分單元格
合并單元格有下面兩種方法,需要注意的是,如果要合并的格子中有資料,即便python沒有報錯,Excel打開的時候也會報錯,
- merge_cells(待合并的格子編號)
- merge_cells(start_row=起始行號,start_column=起始列號,end_row=結束行號,end_column=結束列號)
import os
import openpyxl
import openpyxl.styles
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
# 方法1:
sheet.merge_cells('A12:B13')
# 方法2:
sheet.merge_cells(start_row=12, start_column=3, end_row=13, end_column=4)
# 加一個居中對齊
cell = sheet['A12']
alignment = openpyxl.styles.Alignment(horizontal="center", vertical="center", text_rotation=0, wrap_text=True)
cell.alignment = alignment
cell = sheet['C12']
alignment = openpyxl.styles.Alignment(horizontal="center", vertical="center", text_rotation=0, wrap_text=True)
cell.alignment = alignment
workbook.save('test.xlsx')

拆分單元格的方法同上
- unmerge_cells(待合并的格子編號)
- unmerge_cells(start_row=起始行號,start_column=起始列號,end_row=結束行號,end_column=結束列號)
sheet表
創建新的sheet(create_sheet)
create_sheet(“新的sheet名”):創建一個新的sheet表
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
workbook.create_sheet('3號sheet') # 創建新的sheet表
print(workbook.sheetnames) # 查看所有的sheet表
workbook.save('test.xlsx')
'''
當前活動表是:<Worksheet "Sheet1">
['Sheet1', 'Sheet2', '3號sheet']
'''

修改sheet名字(title)
第11行,使用title修改sheet表的名字
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
sheet.title = '1號sheet' # 修改sheet表
workbook.save('test.xlsx')

復制sheet表(copy_worksheet)
在“操作”>“修改單元格、excel另存為”中提到了另存為,其實復制sheet表就是一個另存為的程序,你要是在12行代碼保存的時候使用第7行的檔案名,那么復制的sheet表就保存到自己身上,內容跟copy.xlsx一樣,
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
workbook.copy_worksheet(sheet) # 復制sheet表
workbook.save('copy.xlsx')

洗掉sheet表(remove)
remove(“sheet名”):洗掉某個sheet表
要洗掉某sheet表,需要激活這個sheet表,即:將其作為活動表(關于活動表的定義請看前面文章開頭寫的有)下面8~11行代碼展示了原始活動表與手動更換活動表,第13行代碼刪掉活動表
import os
import openpyxl
path = r"C:\Users\asuka\Desktop"
os.chdir(path) # 修改作業路徑
workbook = openpyxl.load_workbook('test.xlsx') # 回傳一個workbook資料型別的值
sheet = workbook.active # 獲取活動表
print('當前活動表是:' + str(sheet))
sheet = workbook['3號sheet'] # 手動切換到要洗掉的sheet表,一旦切換,這張表就是活動表
print('當前活動表是:' + str(sheet))
workbook.remove(sheet) # 洗掉當前活動表
print(workbook.sheetnames)
workbook.save('test.xlsx')
'''
當前活動表是:<Worksheet "Sheet1">
當前活動表是:<Worksheet "3號sheet">
['Sheet1', 'Sheet2']
'''

操作多個Excel表
其實想用openpyxl玩這個,但是網上用的是別的庫,就有點無語,以后熟練的話在自己寫一個函式實作吧
背景知識
numpy與pandas
NumPy是 Python 語言的一個擴展程式庫,支持大量的維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式庫;pandas 是基于NumPy 的一種工具,該工具是為解決資料分析任務而創建的,我們需要利用Pandas進行Excel的合并
- 下面的代碼生成了一個5行3列的包含15個字符的嵌套串列
(注意,第4行代碼:15是等于35的,如果是15對應43,或者16對應5*3都會報錯)
(注意,第5行代碼,雖然5行3列是15個資料,但是可以指定資料從1開頭,到16結束)
import numpy as np
import pandas as pd
xx = np.arange(15).reshape(5, 3)
yy = np.arange(1, 16).reshape(5, 3)
print(xx)
print(yy)
'''
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]
[12 13 14]]
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]
[13 14 15]]
'''
- 添加表頭
使用pandas庫的DataFrame來添加表頭,關于列印的結果,把最左側的一列去掉之后會發現結果很和諧,這是因為最左側的一列代表行號,此時xx變數的型別是<class ‘pandas.core.frame.DataFrame’>
import numpy as np
import pandas as pd
xx = np.arange(15).reshape(5, 3)
yy = np.arange(1, 16).reshape(5, 3)
xx = pd.DataFrame(xx, columns=["語文", "數學", "外語"])
yy = pd.DataFrame(yy, columns=["語文", "數學", "外語"])
print(xx)
print(yy)
'''
結果:
語文 數學 外語
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
4 12 13 14
語文 數學 外語
0 1 2 3
1 4 5 6
2 7 8 9
3 10 11 12
4 13 14 15
'''
- 合并兩個矩陣
pd.concat(list)括號中傳入的是一個串列;
ignore_list=True表示忽略原有索引,重新生成一組新的索引;
或者直接可以寫成z = pd.concat([xx,yy],ignore_list=True);
不知道為什么失敗,暫時擱淺
xlsxwriter
xlsxwriter模塊一般是和xlrd模塊搭配使用的,
xlsxwriter:負責寫入資料,
xlrd:負責讀取資料,
- 創建一個作業簿
import xlsxwriter
import os
path = r"C:\Users\asuka\Desktop"
os.chdir(path)
# 這一步相當于創建了一個新的"作業簿";
# "demo.xlsx"檔案不存在,表示新建"作業簿";
# "demo.xlsx"檔案存在,表示新建"作業簿"覆寫原有的"作業簿";
workbook = xlsxwriter.Workbook("demo.xlsx")
# close是將"作業簿"保存關閉,這一步必須有,否則創建的檔案無法顯示出來,
workbook.close()
- 創建sheet表
import xlsxwriter
import os
path = r"C:\Users\asuka\Desktop"
os.chdir(path)
workbook = xlsxwriter.Workbook("cc.xlsx") # 創建一個名為cc.xlsx的檔案
worksheet = workbook.add_worksheet("2018年銷售量") # 創建一個名為“2018年銷售量”的sheet表
workbook.close()
- 寫入資料
import xlsxwriter
import os
path = r"C:\Users\asuka\Desktop"
os.chdir(path)
# 創建一個名為【demo.xlsx】作業簿;
workbook = xlsxwriter.Workbook("demo.xlsx")
# 創建一個名為【2018年銷售量】作業表;
worksheet = workbook.add_worksheet("2018年銷售量")
# 使用write_row方法,為【2018年銷售量】作業表,添加一個表頭;
headings = ['產品', '銷量', "單價"]
worksheet.write_row('A1', headings)
# 使用write方法,在【2018年銷售量】作業表中插入一條資料;
# write語法格式:worksheet.write(行,列,資料)
data = ["蘋果", 500, 8.9]
for i in range(len(headings)):
worksheet.write(1, i, data[i])
workbook.close()

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/312133.html
標籤:python
