亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python實(shí)現(xiàn)處理Excel表格超詳細(xì)系列

 更新時間:2022年08月19日 14:37:43   作者:lainwith  
這篇文章主要介紹了python實(shí)現(xiàn)處理Excel表格超詳細(xì)系列,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

 前言

  • 一個Excel電子表格文檔稱為一個工作簿
  • 一個工作簿保存在一個擴(kuò)展名為.xlsx的文件中
  • 一個工作簿可以包含多個表
  • 用戶當(dāng)前查看的表(或關(guān)閉Excel前最后查看的表)稱為活動表
  • 在特定行和列的方格稱為單元格、格子

處理Excel表格需要用到openpyxl模塊,該模塊需要手動安裝

?pip install openpyxl

xls和xlsx

簡單來說:
xls是excel2003及以前版本所生成的文件格式
xlsx是excel2007及以后版本所生成的文件格式
(excel 2007之后版本可以打開上述兩種格式,但是excel2013只能打開xls格式)

excel后綴.xls和.xlsx有什么區(qū)別

文件核心結(jié)構(gòu)不同:

xls核心結(jié)構(gòu)是復(fù)合文檔類型的;

xlsx 的核心結(jié)構(gòu)是 XML 類型的結(jié)構(gòu),并且基于XML進(jìn)行壓縮(占用空間更?。?,所以也可以看做zip文件,將一個“.xlsx”文件的后綴改為ZIP后,用解壓軟件解壓,可以看到里面有一個xml文件和文件的主要內(nèi)容。

版本不同:

  • xls是excel2003及以前版本所生成的文件格式
  • xlsx是excel2007及以后版本所生成的文件格式

(excel 2007之后版本可以打開上述兩種格式,但是excel2013只能打開xls格式)

最大行列得數(shù)量不同:

  • xls最大只有65536行、256列
  • xlsx可以有1048576行、16384列

二者轉(zhuǎn)換問題:

任何能夠打開“.xlsx”文件的文字處理軟件都可以將該文檔另存為“.xls”文件

  • 如果要將xlsx格式的文件轉(zhuǎn)換為.xls格式的一定要注意將文件轉(zhuǎn)換為xls格式之后只保存256列,其余的列都會被刪掉

基本操作

用到的test.xlsx表格
在這里插入圖片描述

1:用openpyxl模塊打開Excel文檔,查看所有sheet表

openpyxl.load_workbook()函數(shù)接受文件名,返回一個workbook數(shù)據(jù)類型的值。這個workbook對象代表這個Excel文件,這個有點(diǎn)類似File對象代表一個打開的文本文件。

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')	# 返回一個workbook數(shù)據(jù)類型的值
print(workbook.sheetnames)	# 打印Excel表中的所有表

# 結(jié)果:
# ['Sheet1', 'Sheet2']

1.2:通過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數(shù)據(jù)類型的值
print(workbook.sheetnames)  # 打印Excel表中的所有表

sheet = workbook['Sheet1']  # 獲取指定sheet表
print(sheet)

# 結(jié)果:
# ['Sheet1', 'Sheet2']
# <Worksheet "Sheet1">

1.2:獲取活動表

使用workbook.active獲取活動表

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active     # 獲取活動表
print(sheet)

# 結(jié)果:
# <Worksheet "Sheet1">

2:獲取表格的尺寸

這里所說的尺寸大小,指的是excel表格中的數(shù)據(jù)有幾行幾列,針對的是不同的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數(shù)據(jù)類型的值
sheet = workbook['Sheet1']  # 獲取指定sheet表
print(sheet.dimensions)     # 獲取表格的尺寸大小

# 結(jié)果:
# A1:B7

2.1:獲取單元格中的數(shù)據(jù)

方法1:指定坐標(biāo)的方式
sheet[“A1”]

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active     # 獲取活動表
# print(sheet.dimensions)     # 獲取表格的尺寸大小

cell1 = sheet['A1']         # 獲取A1單元格的數(shù)據(jù)
cell2 = sheet['B7']         # 獲取B7單元格的數(shù)據(jù)
# 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數(shù)據(jù)類型的值
sheet = workbook.active     # 獲取活動表
# print(sheet.dimensions)     # 獲取表格的尺寸大小

cell1 = sheet.cell(row=1,column=1)         # 獲取第1行第1列的數(shù)據(jù)
cell2 = sheet.cell(row=3,column=2)         # 獲取第3行第4的數(shù)據(jù)

# 正確示范
# cell1.value獲取單元格A1中的值
# cell2.value獲取單元格B7中的值
print(cell1.value,cell2.value)  # 姓名 41

2.2:獲取單元格的行、列、坐標(biāo)

  • .row 獲取某個格子的行數(shù);
  • .columns 獲取某個格子的列數(shù);
  • .coordinate 獲取某個格子的坐標(biāo);
import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
# print(sheet.dimensions)     # 獲取表格的尺寸大小

cell = sheet.cell(row=3, column=2)  # 獲取第3行第4的數(shù)據(jù)

print(cell.value, cell.row, cell.column, cell.coordinate)

'''
結(jié)果:
41 3 2 B3
'''

3:獲取區(qū)間內(nèi)的數(shù)據(jù)

獲取單行單列數(shù)據(jù)的時候,使用一層for循環(huán);獲取多行多列、指定區(qū)間的數(shù)據(jù)時,使用兩層for循環(huán)

獲取指定區(qū)間的數(shù)據(jù):

  • 使用sheet['A1:A5']拿到指定區(qū)間
  • 使用兩個for循環(huán)拿到數(shù)據(jù)
import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:')
print(sheet)

cell = sheet['A1:A5']  # 獲取A1到A5的數(shù)據(jù)

print(cell)

# 打印A1到A5的數(shù)據(jù)
for i in cell:
    for j in i:
        print(j.value)

# 結(jié)果:
# 當(dāng)前活動表是:
# <Worksheet "Sheet1">
# ((<Cell 'Sheet1'.A1>,), (<Cell 'Sheet1'.A2>,), (<Cell 'Sheet1'.A3>,), (<Cell 'Sheet1'.A4>,), (<Cell 'Sheet1'.A5>,))
# 姓名
# 張三
# 李四
# 王五
# 趙六

獲取指定行列的數(shù)據(jù):

  • sheet[“A”] — 獲取A列的數(shù)據(jù)
  • sheet[“A:C”] — 獲取A,B,C三列的數(shù)據(jù)
  • sheet[5] — 只獲取第5行的數(shù)據(jù)

下面的代碼,獲取一列數(shù)據(jù)的時候,使用一層for循環(huán)

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + str(sheet))

cell = sheet['2']  # 獲取第2行的數(shù)據(jù)

# 打印A1到A5的數(shù)據(jù)
for i in cell:
    print(i.value)

# 結(jié)果:
# 當(dāng)前活動表是:<Worksheet "Sheet1">
# 張三
# 74

下面代碼,獲取兩列數(shù)據(jù)的時候,使用兩層for循環(huán)。注意到,兩列的結(jié)果打印到一起了,可讀性較差

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + str(sheet))

cell = sheet['A:B']  # 獲取AB列的數(shù)據(jù)

# 打印AB列數(shù)據(jù)
for i in cell:
    for j in i:
        print(j.value)

# 結(jié)果:
# 當(dāng)前活動表是:<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數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + 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)

# 結(jié)果:
# 當(dāng)前活動表是:<Worksheet "Sheet1">
# 按行獲取值
# 張三
# 74
# 李四
# 41
# 王五
# 56
# 趙六
# 12
# 按列獲取值
# 張三
# 李四
# 王五
# 趙六
# 74
# 41
# 56
# 12

獲取活動表的行列數(shù):

方法1:使用

  • sheet.max_row 獲取行數(shù)
  • sheet.max_column 獲取列數(shù)
import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('2.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + str(sheet))

rows = sheet.max_row        # 獲取行數(shù)
column = sheet.max_column   # 獲取列數(shù)

print(rows)
print(column)

'''
結(jié)果:
當(dāng)前活動表是:<Worksheet "Sheet1">
381
6
'''

方法2:自己寫一個for循環(huán)

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + str(sheet))

row = []
column = []
# 獲取當(dāng)前活動表有多少行
for i in sheet.rows:
    row.append(list(i))         # i是元組類型,轉(zhuǎn)為列表

# 獲取當(dāng)前活動表有多少列
for i in sheet.columns:
    column.append(list(i))    # i是元組類型,轉(zhuǎn)為列表

print('行數(shù):'+str(len(row)))
print('列數(shù):'+str(len(column)))

'''
結(jié)果:
當(dāng)前活動表是:<Worksheet "1號sheet">
行數(shù):12
列數(shù):3
'''

操作

創(chuàng)建新的excel

第9行代碼用來指定創(chuàng)建的excel的活動表的名字:

  • 不寫第9行,默認(rèn)創(chuàng)建sheet
  • 寫了第9行,創(chuàng)建指定名字的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數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
sheet['A1'] = 'name'
workbook.save('test.xlsx')

添加數(shù)據(jù)

插入有效數(shù)據(jù)

使用append()方法,在原來數(shù)據(jù)的后面,按行插入數(shù)據(jù)

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + str(sheet))

data = [
    ['素子',23],
    ['巴特',24],
    ['塔奇克馬',2]
]
for row in data:
    sheet.append(row)   # 使用append插入數(shù)據(jù)
workbook.save('test.xlsx')

插入空行空列

  • insert_rows(idx=數(shù)字編號, amount=要插入的行數(shù)),插入的行數(shù)是在idx行數(shù)的下方插入
  • insert_cols(idx=數(shù)字編號, amount=要插入的列數(shù)),插入的位置是在idx列數(shù)的左側(cè)插入
import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + str(sheet))

sheet.insert_rows(idx=3, amount=2)
sheet.insert_cols(idx=2, amount=1)
workbook.save('test.xlsx')

刪除行、列

  • delete_rows(idx=數(shù)字編號, amount=要刪除的行數(shù))
  • delete_cols(idx=數(shù)字編號, amount=要刪除的列數(shù))
import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + str(sheet))

sheet.delete_rows(idx=10)           # 刪除第10行
sheet.delete_cols(idx=1, amount=2)  # 刪除第1列,及往右共2列
workbook.save('test.xlsx')

移動指定區(qū)間的單元格(move_range)

move_range(“數(shù)據(jù)區(qū)域”,rows=,cols=):正整數(shù)為向下或向右、負(fù)整數(shù)為向左或向上

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + str(sheet))

sheet.move_range('D11:F12',rows=0,cols=-3)  # 移動D11到F12構(gòu)成的矩形格子
workbook.save('test.xlsx')

字母列號與數(shù)字列號之間的轉(zhuǎn)換

核心代碼:

from openpyxl.utils import get_column_letter, column_index_from_string

# 根據(jù)列的數(shù)字返回字母
print(get_column_letter(2))  # B
# 根據(jù)字母返回列的數(shù)字
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數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + str(sheet))

# 根據(jù)列的數(shù)字返回字母
print(get_column_letter(2))  # B
# 根據(jù)字母返回列的數(shù)字
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數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:'+str(sheet))

cell = sheet['A1']
font = cell.font
print('當(dāng)前單元格的字體樣式是')
print(font.name, font.size, font.bold, font.italic, font.color)

'''
當(dāng)前活動表是:<Worksheet "1號sheet">
當(dāng)前單元格的字體樣式是
等線 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進(jìn)制表示

import os
import openpyxl
import openpyxl.styles

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
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循環(huán),修改多行多列的數(shù)據(jù),

import os
import openpyxl
import openpyxl.styles

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
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')

設(shè)置對齊格式

Alignment(horizontal=水平對齊模式,vertical=垂直對齊模式,text_rotation=旋轉(zhuǎn)角度,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數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + 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')

當(dāng)然,你仍舊可以調(diào)用for循環(huán)來實(shí)現(xiàn)對多行多列的操作

import os
import openpyxl.styles

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + 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')

設(shè)置行高列寬

設(shè)置行列的寬高:

  • 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數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + str(sheet))

# 設(shè)置第1行的高度
sheet.row_dimensions[1].height = 50
# 設(shè)置B列的卷度
sheet.column_dimensions['B'].width = 20

workbook.save('test.xlsx')

設(shè)置所有單元格(顯示的結(jié)果是設(shè)置所有,有數(shù)據(jù)的單元格的)

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]]  # 選中最左側(cè)的sheet表

width = 2.0  # 設(shè)置寬度
height = width * (2.2862 / 0.3612)  # 設(shè)置高度

print("row:", ws.max_row, "column:", ws.max_column)  # 打印行數(shù),列數(shù)
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')

合并、拆分單元格

合并單元格有下面兩種方法,需要注意的是,如果要合并的格子中有數(shù)據(jù),即便python沒有報錯,Excel打開的時候也會報錯。

  • merge_cells(待合并的格子編號)
  • merge_cells(start_row=起始行號,start_column=起始列號,end_row=結(jié)束行號,end_column=結(jié)束列號)
import os
import openpyxl
import openpyxl.styles

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + 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=結(jié)束行號,end_column=結(jié)束列號)

sheet表

創(chuàng)建新的sheet(create_sheet)

create_sheet(“新的sheet名”):創(chuàng)建一個新的sheet表

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + str(sheet))

workbook.create_sheet('3號sheet')    # 創(chuàng)建新的sheet表
print(workbook.sheetnames)			 # 查看所有的sheet表
workbook.save('test.xlsx')

'''
當(dāng)前活動表是:<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數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + str(sheet))

sheet.title = '1號sheet'  # 修改sheet表
workbook.save('test.xlsx')

復(fù)制sheet表(copy_worksheet)

在“操作”>“修改單元格、excel另存為”中提到了另存為,其實(shí)復(fù)制sheet表就是一個另存為的過程,你要是在12行代碼保存的時候使用第7行的文件名,那么復(fù)制的sheet表就保存到自己身上,內(nèi)容跟copy.xlsx一樣。

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + str(sheet))

workbook.copy_worksheet(sheet)	# 復(fù)制sheet表
workbook.save('copy.xlsx')

刪除sheet表(remove)

remove(“sheet名”):刪除某個sheet表
要刪除某sheet表,需要激活這個sheet表,即:將其作為活動表(關(guān)于活動表的定義請看前面文章開頭寫的有)下面8~11行代碼展示了原始活動表與手動更換活動表,第13行代碼刪掉活動表

import os
import openpyxl

path = r"C:\Users\asuka\Desktop"
os.chdir(path)  # 修改工作路徑

workbook = openpyxl.load_workbook('test.xlsx')  # 返回一個workbook數(shù)據(jù)類型的值
sheet = workbook.active  # 獲取活動表
print('當(dāng)前活動表是:' + str(sheet))
sheet = workbook['3號sheet']     # 手動切換到要刪除的sheet表,一旦切換,這張表就是活動表
print('當(dāng)前活動表是:' + str(sheet))

workbook.remove(sheet)  # 刪除當(dāng)前活動表
print(workbook.sheetnames)
workbook.save('test.xlsx')

'''
當(dāng)前活動表是:<Worksheet "Sheet1">
當(dāng)前活動表是:<Worksheet "3號sheet">
['Sheet1', 'Sheet2']
'''

操作多個Excel表

其實(shí)想用openpyxl玩這個,但是網(wǎng)上用的是別的庫,就有點(diǎn)無語,以后熟練的話在自己寫一個函數(shù)實(shí)現(xiàn)吧

背景知識

numpy與pandas:

NumPy是 Python 語言的一個擴(kuò)展程序庫,支持大量的維度數(shù)組與矩陣運(yùn)算,此外也針對數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫;pandas 是基于NumPy 的一種工具,該工具是為解決數(shù)據(jù)分析任務(wù)而創(chuàng)建的,我們需要利用Pandas進(jìn)行Excel的合并

下面的代碼生成了一個5行3列的包含15個字符的嵌套列表

(注意,第4行代碼:15是等于35的,如果是15對應(yīng)43,或者16對應(yīng)5*3都會報錯)
(注意,第5行代碼,雖然5行3列是15個數(shù)據(jù),但是可以指定數(shù)據(jù)從1開頭,到16結(jié)束)

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來添加表頭。關(guān)于打印的結(jié)果,把最左側(cè)的一列去掉之后會發(fā)現(xiàn)結(jié)果很和諧,這是因?yàn)樽钭髠?cè)的一列代表行號。此時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=["語文", "數(shù)學(xué)", "外語"])
yy = pd.DataFrame(yy, columns=["語文", "數(shù)學(xué)", "外語"])
print(xx)
print(yy)

'''
結(jié)果:
   語文  數(shù)學(xué)  外語
0   0   1   2
1   3   4   5
2   6   7   8
3   9  10  11
4  12  13  14
   語文  數(shù)學(xué)  外語
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:負(fù)責(zé)寫入數(shù)據(jù),
xlrd:負(fù)責(zé)讀取數(shù)據(jù)。

創(chuàng)建一個工作簿

import xlsxwriter
import os

path = r"C:\Users\asuka\Desktop"
os.chdir(path)

# 這一步相當(dāng)于創(chuàng)建了一個新的"工作簿";
# "demo.xlsx"文件不存在,表示新建"工作簿";
# "demo.xlsx"文件存在,表示新建"工作簿"覆蓋原有的"工作簿";
workbook = xlsxwriter.Workbook("demo.xlsx")

# close是將"工作簿"保存關(guān)閉,這一步必須有,否則創(chuàng)建的文件無法顯示出來。
workbook.close()

創(chuàng)建sheet表

import xlsxwriter
import os

path = r"C:\Users\asuka\Desktop"
os.chdir(path)

workbook = xlsxwriter.Workbook("cc.xlsx")   # 創(chuàng)建一個名為cc.xlsx的文件
worksheet = workbook.add_worksheet("2018年銷售量")  # 創(chuàng)建一個名為“2018年銷售量”的sheet表

workbook.close()

寫入數(shù)據(jù)

import xlsxwriter
import os

path = r"C:\Users\asuka\Desktop"
os.chdir(path)

# 創(chuàng)建一個名為【demo.xlsx】工作簿;
workbook = xlsxwriter.Workbook("demo.xlsx")

# 創(chuàng)建一個名為【2018年銷售量】工作表;
worksheet = workbook.add_worksheet("2018年銷售量")

# 使用write_row方法,為【2018年銷售量】工作表,添加一個表頭;
headings = ['產(chǎn)品', '銷量', "單價"]
worksheet.write_row('A1', headings)
# 使用write方法,在【2018年銷售量】工作表中插入一條數(shù)據(jù);
# write語法格式:worksheet.write(行,列,數(shù)據(jù))

data = ["蘋果", 500, 8.9]
for i in range(len(headings)):
    worksheet.write(1, i, data[i])

workbook.close()

到此這篇關(guān)于python實(shí)現(xiàn)處理Excel表格超詳細(xì)系列的文章就介紹到這了,更多相關(guān)python處理Excel表格內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python10行代碼實(shí)現(xiàn)模擬百度搜索的示例

    Python10行代碼實(shí)現(xiàn)模擬百度搜索的示例

    本文主要介紹了Python10行代碼實(shí)現(xiàn)模擬百度搜索的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • python函數(shù)不定長參數(shù)使用方法解析

    python函數(shù)不定長參數(shù)使用方法解析

    這篇文章主要介紹了python函數(shù)不定長參數(shù)使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • 詳解Pytorch 使用Pytorch擬合多項式(多項式回歸)

    詳解Pytorch 使用Pytorch擬合多項式(多項式回歸)

    這篇文章主要介紹了詳解Pytorch 使用Pytorch擬合多項式(多項式回歸),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 如何教少兒學(xué)習(xí)Python編程

    如何教少兒學(xué)習(xí)Python編程

    在本篇文章里小編給大家整理了關(guān)于教少兒學(xué)習(xí)Python編程的相關(guān)文章及知識點(diǎn),需要的朋友們可以參考下。
    2020-07-07
  • 查找python項目依賴并生成requirements.txt的方法

    查找python項目依賴并生成requirements.txt的方法

    今天小編就為大家分享一篇查找python項目依賴并生成requirements.txt的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • pyinstaller的介紹與使用超詳細(xì)講解

    pyinstaller的介紹與使用超詳細(xì)講解

    PyInstaller是一個Python庫,可以將Python應(yīng)用程序轉(zhuǎn)換為獨(dú)立的可執(zhí)行文件,下面這篇文章主要給大家介紹了關(guān)于pyinstaller的介紹與使用的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • python語言開發(fā)垃圾回收機(jī)制原理教程

    python語言開發(fā)垃圾回收機(jī)制原理教程

    這篇文章主要為大家介紹了python語言開發(fā)垃圾回收機(jī)制原理的教程有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • python numpy元素的區(qū)間查找方法

    python numpy元素的區(qū)間查找方法

    今天小編就為大家分享一篇python numpy元素的區(qū)間查找方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python opencv實(shí)現(xiàn)任意角度的透視變換實(shí)例代碼

    python opencv實(shí)現(xiàn)任意角度的透視變換實(shí)例代碼

    這篇文章主要介紹了python opencv實(shí)現(xiàn)任意角度的透視變換實(shí)例代碼,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • python中重啟for循環(huán),使其重新開始遍歷

    python中重啟for循環(huán),使其重新開始遍歷

    這篇文章主要介紹了python中重啟for循環(huán),使其重新開始遍歷方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評論