#encoding=utf-8 ''' excel基本操作整理 ''' #openpyxl 版本2.5.4 from openpyxl import * import datetime as dt from datetime import datetime as dtt #新建create_sheet、copy_worksheet wb=Workbook() wb.create_sheet('新創建sheet') ws=wb.active print(ws.title) ws.title='測試用例' ws1=wb.copy_worksheet(ws) ws1.title='測試步驟' print(ws1.title) ws1.sheet_properties.tabColor='FF3030' #設置sheet標簽顏色 ws2=wb.copy_worksheet(ws1) ws2.title='測試數據' #新建sheet,設置了位置2 wb.create_sheet('第三個位置sheet',2) #sheet寫入數據 ws['A2']='大家好' ws['B4']=dtt.now() ws.append(['nihao','wohao','heihei123',4,5,6]) wb.save('f:\\pylianxi\\test\\test.xlsx') #加載已存在的excel wb=load_workbook('f:\\pylianxi\\test\\test.xlsx') print('load active_sheet:',wb.active.title) print(wb.sheetnames) print('測試數據的標題:',wb['測試數據'].title) for i in wb['測試用例'].rows: for j in i: print(j.value,end=' ') print() print(type(wb)) print(type(wb['測試用例'])) for sheet in wb: print('**',sheet.title) #使用cell讀寫單元格 ws=wb['測試用例'] #寫入 ws.cell(row=2,column=1).value='大家真的好嗎' #行號和列號從1開始 ws.cell(row=5,column=3,value='設么東東') wb.save('f:\\pylianxi\\test\\test.xlsx') #讀 print('ws.cell(row=2,column=1).value:',ws.cell(row=2,column=1).value) print('ws.cell(row=5,column=3).value:',ws.cell(5,3).value) #小練習 for i in range(1,4): for j in range(1,4): ws.cell(i,j).value=i*j wb.save('f:\\pylianxi\\test\\test.xlsx') #可以設置默認打開的sheet頁 #wb.active=1 默認是0 #注意 cell的 行列 是從1,1開始的,不是0,0,rows、columns的迭代器都是從0開始的 print('#'*20) #取某一列 for cell in ws["C"]: print (cell.value) #取多列的值 for i in ws['A':'C']: #for column in ws["A:C"]: for j in i: print(j.value) #按列取 print('*'*20) for i in ws[1:3]: for j in i: print(j.value) print('*'*20) #指定區域范圍取值 for i in ws.iter_rows(min_row=1,max_row=2,min_col=1,max_col=2): for j in i: print(j.value) print('*'*20) print(list(ws.rows)[1:]) #從第2行開始取值 for i in ws.rows: print(i) for j in i: print(j.value) print('*'*20) #按列取值 for i in ws.columns: for j in i: print(j.value,end=' ') print() #獲取最大行列,最小行列 print(ws.max_row,ws.min_row,ws.max_column,ws.min_column) # print(ws.rows) #行生成器 print(list(ws.rows)[0])#第一行 print(list(ws.rows)[0][0])#第一個單元格 print(list(ws.rows)[0][0].value)#第一個單元格的值 print(ws.columns) #列生成器 print(list(ws.columns)[0])#第一列 print(list(ws.columns)[0][0])#列第一個單元格 print(list(ws.columns)[0][0].value)#列第一個單元格的值 #單元格格式 number_format import datetime wb = load_workbook('e:\\sample.xlsx') ws=wb.active wb.guess_types = True ws["A1"]=datetime.datetime(2010, 7, 21) print (ws["A1"].number_format) ws["A2"]="12%" print (ws["A2"].number_format) ws["A3"]= 1.1 print (ws["A3"].number_format) ws["A4"]= "中國" print (ws["A4"].number_format) # Save the file wb.save("e:\\sample.xlsx") #guess_types 猜測單元格的類型 wb=load_workbook('e:\\sample.xlsx') wb.guess_types=True #可以猜測 存儲的某字段值 是什么類型 ws=wb.active ws['D2']='12%' #如果是True 則會按0.12處理,否則會按str處理 print(ws['D2'].value) print(type(ws['D2'].value)) wb.save('e:\\sample.xlsx') #單元格輸入公式,打開excel會自動計算 ws["A4"] = "=SUM(1, 1)" ws["A5"] = "=SUM(A1:A3)" print (ws["A4"].value) #打印的是公式內容,不是公式計算后的值,程序無法取到計算后的值 print (ws["A5"].value) #打印的是公式內容,不是公式計算后的值,程序無法取到計算后的值 #合並單元格(2種方式) #ws.merge_cells('A2:D2') #合並完了之后取值,按A2取值,B2、C2、D2取不到值 #ws.unmerge_cells('A2:D2') print("ws['A2'].value:",ws['A2'].value) #合並單元格區域 ws.merge_cells(start_row=1,start_column=1,end_row=2,end_column=4) ws.unmerge_cells(start_row=1,start_column=1,end_row=2,end_column=4) #單元格插入圖片 from openpyxl.drawing.image import Image img = Image('e:\\Snap1.jpg') #ws.add_image(img, 'A15') wb.save('e:\\sample.xlsx') #設置單元格字體 from openpyxl.styles import colors from openpyxl.styles import Font ft=Font(name="楷體",color=colors.BLUE,size=20,bold=True,underline="single",family=1) ws['A1'].font=ft ws['A1']='你好嗎哈哈' wb.save('e:\\sample.xlsx') #比較全面的設置單元格格式 from openpyxl import Workbook from openpyxl.styles import Font from openpyxl.styles import NamedStyle, Font, Border, Side,PatternFill from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font wb = Workbook() ws = wb.active ft = Font(name=u'微軟雅黑', size=11, bold=False, italic=False, vertAlign=None, underline='none', strike=False, color='FF000000') #ft=Font(bold=True, size=20,color= "ff0100") #fill = PatternFill(fill_type="solid",start_color='FFEEFFFF',end_color='FF001100') fill = PatternFill("solid", fgColor="DDDDDD") #邊框可以選擇的值為:'hair', 'medium', 'dashDot', 'dotted', 'mediumDashDot', 'dashed', 'mediumDashed', 'mediumDashDotDot', 'dashDotDot', 'slantDashDot', 'double', 'thick', 'thin'] #diagonal 表示對角線 bd = Border(left=Side(border_style="thin", color='FF001000'), right=Side(border_style="thin", color='FF110000'), top=Side(border_style="thin", color='FF110000'), bottom=Side(border_style="thin", color='FF110000'), diagonal=Side(border_style=None, color='FF000000'), diagonal_direction=0, outline=Side(border_style=None, color='FF000000'), vertical=Side(border_style=None, color='FF000000'), horizontal=Side(border_style=None, color='FF110000') ) #bdline = Side(style='thick', color="000000") #bd = Border(left=bdline, top=bdline, right=bdline, bottom=bdline) alignment=Alignment(horizontal='general', vertical='bottom', text_rotation=0, wrap_text=False, shrink_to_fit=False, indent=0) number_format = 'General' protection = Protection(locked=True,hidden=False) ws["B5"].font = ft ws["B5"].fill =fill ws["B5"].border = bd ws["B5"].alignment = alignment ws["B5"].number_format = number_format ws["B5"].value ="glory road" # Save the file wb.save("e:\\sample.xlsx")