python3操作Excel (一)
##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模塊使用:
創建一個工作簿:
from openpyxl import Workbook
wb = Workbook()
工作簿最少有一個工作表:
openpyxl.workbook.Workbook.active()
ws = wb.active
wb的_active_sheet_index 屬性,默認情況下為0.來獲取第一個工作表。
修改值之後,可以獲取該值對應的工作表。
也可以創建一個新的工作表,需要使用openpyxl.workbook.Workbook.create_sheet() method
// 添加一個新的工作表:
#在默認工作表後面創建一個新的工作表。 ws1 = wb.create_sheet("twosheet") #在默認工作表前面創建一個新的工作表。0 為索引值。 ws2 = wb.create_sheet(‘onesheet‘,0)
在創建工作表時,默認自動命名sheet1,sheet2,...
可使用title屬性更改sheet1,sheet2,....等名稱。
例如:
ws1.title = "2sheet"
默認情況下,title的背景顏色為白色,可更改為:
可以將此提供RRGGBB顏色代碼更改為sheet_properties.tabColor屬性: 該效果我沒有做出來,有待研究。
ws.sheet_properties.tabColor = "1072BA"
你可以把一個創建之後的工作表的名字,作為工作簿的一個鍵。
ws3 = wb[‘onesheet‘]
print(ws3)
輸出值為:
<Worksheet "onesheet">
說明你可以選擇使用哪個工作表來寫入數據。
查看工作簿的所有工作表的名稱:
openpyxl.workbook.Workbook.sheetnames() property
print(wb.sheetnames) #打印出來為list。
可以選擇循環瀏覽工作表名稱:
for sheet in wb:
print(type(sheet.title))
print(sheet.title)
#打印出來為str.
可以在單個工作簿中創建工作表副本:
openpyxl.workbook.Workbook.copy_worksheet() method:
source = wb.active
target = wb.copy_worksheet(source)
#默認將工作表添加到末尾。
- 註意:
只有單元格(包括值,樣式,超鏈接和註釋)和某些工作表屬性(包括尺寸,格式和屬性)被復制。所有其他工作簿/工作表屬性不會被復制 - 例如圖片,圖表。
您不能在工作簿之間復制工作表。如果工作簿以只讀或只寫模式打開,您也無法復制工作表。
####插入數據
訪問單元格並修改單元格內容:
單元格可以作為工作表的鍵直接訪問。
ws = wb[‘Sheet‘]
print(ws)
註意:
訪問之前,必須先讓其工作在Sheet工作表上。
c = ws[‘A4‘]
print(c)
這將返回A4處的單元格或創建一個,如果它尚不存在。值可以直接分配:
ws[‘A4‘] = 4
還有
openpyxl.worksheet.Worksheet.cell() method.
這使用行和列表示法提供對單元格的訪問權限:
d = ws.cell(row=4,column=2,value=10)
print(type(d))
print(d)
註意:
當工作表在內存中創建時,它不包含單元格。它們在第一次訪問時創建。
由於這個特性,即使沒有為它們賦值,通過滾動單元格而不是直接訪問它們也會在內存中創建它們。
for i in range(1,101):
for j in range(1,101):
ws.cell(row=i,column=j)
print(type(j))
print(j)
#將在內存中創建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‘)
註意: 此操作將覆蓋現有文件。
可以指定屬性template = True,將工作簿保存為模板:
wb = load_workbook(‘document.xlsx‘)
wb.template = True
wb.save(‘document_template.xltx‘)
或將此屬性設置為False(默認),以另存為文檔:
wb = load_workbook(‘document_template.xltx‘)
wb.template = False
wb.save(‘document.xlsx‘, as_template=False)
註意: excel表的數據屬性和擴展名。
####加載一個文件
導入
openpyxl.load_workbook() to open an existing workbook:
from openpyxl import load_workbook
wb2 = load_workbook(‘onepyxl.xlsx‘)
print(wb2.sheetnames)
如有不足之處,請指正。
參考:
https://openpyxl.readthedocs.io/en/latest/
https://openpyxl.readthedocs.io/en/2.5/
python3操作Excel (一)