溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python3操作Excel (一)

發(fā)布時(shí)間:2020-06-23 19:31:11 來源:網(wǎng)絡(luò) 閱讀:5004 作者:IdealReality 欄目:編程語言

#第一篇:
##openpyxl 模塊使用:

安裝:
pip install openpyxl

excel表中有圖像,需要安裝pillow庫。
pip install Pillow

代碼:

   from openpyxl import Workbook
    wb = Workbook()

    # grab the active worksheet
    ws = wb.active

    # Data can be assigned directly to cells
    ws['A1'] = 42

    # Rows can also be appended
    ws.append([1, 2, 3])

    # Python types will automatically be converted
    import datetime
    ws['A2'] = datetime.datetime.now()

    # Save the file
    wb.save("sample.xlsx")

openpyxl模塊使用:

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

from openpyxl import Workbook
wb = Workbook() 

工作簿最少有一個(gè)工作表:
openpyxl.workbook.Workbook.active()

ws = wb.active

wb的_active_sheet_index 屬性,默認(rèn)情況下為0.來獲取第一個(gè)工作表。
修改值之后,可以獲取該值對(duì)應(yīng)的工作表。

也可以創(chuàng)建一個(gè)新的工作表,需要使用openpyxl.workbook.Workbook.create_sheet() method

// 添加一個(gè)新的工作表:

#在默認(rèn)工作表后面創(chuàng)建一個(gè)新的工作表。
ws1 = wb.create_sheet("twosheet")

#在默認(rèn)工作表前面創(chuàng)建一個(gè)新的工作表。0 為索引值。
ws2 = wb.create_sheet('onesheet',0)

在創(chuàng)建工作表時(shí),默認(rèn)自動(dòng)命名sheet1,sheet2,...

可使用title屬性更改sheet1,sheet2,....等名稱。
例如:

ws1.title = "2sheet"

默認(rèn)情況下,title的背景顏色為白色,可更改為:
可以將此提供RRGGBB顏色代碼更改為sheet_properties.tabColor屬性: 該效果我沒有做出來,有待研究。

ws.sheet_properties.tabColor = "1072BA"

你可以把一個(gè)創(chuàng)建之后的工作表的名字,作為工作簿的一個(gè)鍵。

ws3 = wb['onesheet']
print(ws3)

輸出值為:
<Worksheet "onesheet">

說明你可以選擇使用哪個(gè)工作表來寫入數(shù)據(jù)。

查看工作簿的所有工作表的名稱:
openpyxl.workbook.Workbook.sheetnames() property

print(wb.sheetnames)  #打印出來為list。

可以選擇循環(huán)瀏覽工作表名稱:
for sheet in wb:
print(type(sheet.title))
print(sheet.title)
#打印出來為str.

可以在單個(gè)工作簿中創(chuàng)建工作表副本:
openpyxl.workbook.Workbook.copy_worksheet() method:
source = wb.active
target = wb.copy_worksheet(source)
#默認(rèn)將工作表添加到末尾。

  • 注意:

只有單元格(包括值,樣式,超鏈接和注釋)和某些工作表屬性(包括尺寸,格式和屬性)被復(fù)制。所有其他工作簿/工作表屬性不會(huì)被復(fù)制 - 例如圖片,圖表。
您不能在工作簿之間復(fù)制工作表。如果工作簿以只讀或只寫模式打開,您也無法復(fù)制工作表。

####插入數(shù)據(jù)
訪問單元格并修改單元格內(nèi)容:

單元格可以作為工作表的鍵直接訪問。

ws = wb['Sheet']
print(ws)

注意:
訪問之前,必須先讓其工作在Sheet工作表上。
c = ws['A4']
print(c)

這將返回A4處的單元格或創(chuàng)建一個(gè),如果它尚不存在。值可以直接分配:

ws['A4'] = 4

還有
openpyxl.worksheet.Worksheet.cell() method.

這使用行和列表示法提供對(duì)單元格的訪問權(quán)限:

d = ws.cell(row=4,column=2,value=10)
print(type(d))
print(d)

注意:
當(dāng)工作表在內(nèi)存中創(chuàng)建時(shí),它不包含單元格。它們?cè)诘谝淮卧L問時(shí)創(chuàng)建。

由于這個(gè)特性,即使沒有為它們賦值,通過滾動(dòng)單元格而不是直接訪問它們也會(huì)在內(nèi)存中創(chuàng)建它們。

for i in range(1,101):
for j in range(1,101):
    ws.cell(row=i,column=j)
    print(type(j))
    print(j)
#將在內(nèi)存中創(chuàng)建100x100的單元格,無需任何操作。

可以使用切片訪問單元格的范圍:

cell_range = ws['A1':'C2']
print(type(cell_range))
print(cell_range)
#type is tuple.

行或列的范圍可以類似地獲得:

colC = ws['C']
col_range = ws['C:D']
row10 = ws[10]
row_range = ws[5:10]

也可以用:
openpyxl.worksheet.Worksheet.iter_rows() method:

for row in ws.iter_rows(min_row=1,max_col=3,max_row=2):
for cell in row:
    print(cell)

openpyxl.worksheet.Worksheet.iter_cols()
method will return columns:

for col in ws.iter_rows(min_row=1,max_col=3,max_row=2):
for cell in col:
    print(cell)

需要遍歷文件的所有行或列,使用
openpyxl.worksheet.Worksheet.rows() property:

#遍歷文件的所有行
ws = wb.active
ws['C9'] = 'li yuan jie'
print(tuple(ws.rows))

or use
openpyxl.worksheet.Worksheet.columns() property:

#遍歷文件的所有列:
ws = wb.active
ws['C9'] = 'li yuan jie'
print(tuple(ws.columns))

#####Data storage
openpyxl.cell.Cell, we can assign it a value:

c = ws['A1']    #指定A1單元格
c.value = 'li yuan jie'
print(c.value)

d = ws['B1']
d.value = 3.14
print(d.value)

也可以啟用類型和格式推斷:

c = ws['A2']
c.value = '12%'
print(type(c.value))  #type is str
print(c.value)

import datetime
d = ws['B2']
d.value = datetime.datetime.now()  
print(type(d.value))  #type is 'datetime.datetime'
print(d.value)

c.value = '31.50'
print(type(c.value))   #type is str
print(c.value)

Saving to a file
The simplest and safest way to save a workbook is by using the:
openpyxl.workbook.Workbook.save() method of the openpyxl.workbook.Workbook object:

wb = Workbook()
wb.save('onepyxl.xlsx')

注意: 此操作將覆蓋現(xiàn)有文件。

可以指定屬性template = True,將工作簿保存為模板:

wb = load_workbook('document.xlsx')
wb.template = True
wb.save('document_template.xltx')

或?qū)⒋藢傩栽O(shè)置為False(默認(rèn)),以另存為文檔:
wb = load_workbook('document_template.xltx')
wb.template = False
wb.save('document.xlsx', as_template=False)

注意: excel表的數(shù)據(jù)屬性和擴(kuò)展名。

####加載一個(gè)文件
導(dǎo)入
openpyxl.load_workbook() to open an existing workbook:

from openpyxl import load_workbook
wb2 = load_workbook('onepyxl.xlsx')
print(wb2.sheetnames)

如有不足之處,請(qǐng)指正。

參考:
https://openpyxl.readthedocs.io/en/latest/
https://openpyxl.readthedocs.io/en/2.5/

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI