python脚本——Excel处理
生活随笔
收集整理的這篇文章主要介紹了
python脚本——Excel处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
python腳本第一彈——Excel處理
本文旨在為不熟悉python的開發人員提供excel便捷處理工具,以方便日常工作。
一、python安裝
進入https://www.python.org/downloads/,根據操作系統版本選擇對應安裝包。建議安裝3.x版本。
安裝過程注意勾選 Add to path,將python路徑信息添加到系統環境變量PATH中。
IDE工具建議安裝jetbrains提供的pycharm社區版。
二、Excel介紹
電子表格工具,后綴為 .xlsx。
一個Excel文檔為一個工作簿,工作簿可以包含多個sheet,一個sheet為一個工作表。
三、安裝openpyxl模塊
在DOS命令窗口執行: pip install openpyxl==2.6.2
四、Excel處理
本模塊代碼及實驗文件均已上傳Github。
倉庫地址: github.com/WWindmill/p…
4.1 讀取操作
import openpyxl from openpyxl.utils import get_column_letter, column_index_from_string# 工作簿對象 workbook = openpyxl.load_workbook("C:\projects\Python\9.源代碼文件\automate_online-materials\example.xlsx") print('type of result: ', type(workbook)) print("all sheet names: ", workbook.sheetnames) # 獲取工作表 sheet = workbook['Sheet1'] print("sheet obj: ", sheet, " sheet title:", sheet.title) # 獲取工作簿的活動表 anotherSheet = workbook.active print("active sheet: ", anotherSheet) # 獲取單元格 print("cell A1: ", sheet['A1']) print("cell A1 val: ", sheet['A1'].value) c = sheet['B1'] print('Row %s, Column %s is %s' % (c.row, c.column, c.value)) print('Cell %s is %s' % (c.coordinate, c.value)) print("cell[B1]: ", sheet.cell(row=1, column=2)) # 步長為2 for i in range(1, 8, 2):print('row:%s,column:2, value:%s' % (i, sheet.cell(row=i, column=2).value)) # 獲取工作表大小 print("max row: ", sheet.max_row) print("max column: ", sheet.max_column) # 列字母與數字轉換 print("1 mean letter: ", get_column_letter(1)) print(sheet.max_column, "mean letter: ", get_column_letter(sheet.max_column)) print("column A point at num: ", column_index_from_string('A')) # 按行遍歷 method1 print(tuple(sheet['A1':'C3'])) for rowCell in sheet['A1':'C3']:for eachCell in rowCell:print(eachCell.coordinate, eachCell.value)print('--- END OF ROW ---') # 按行遍歷 method2 print(list(sheet.rows)[0]) for cellObj in list(sheet.rows)[0]:print(cellObj.value) print('--- END OF ROW ---') # 按列遍歷 print(list(sheet.columns)[0]) for cellObj in list(sheet.columns)[0]:print(cellObj.value) print('--- END OF column ---')4.2 寫操作
import openpyxl# 工作簿對象 workbook = openpyxl.load_workbook(".\source\example.xlsx") print('type of result: ', type(workbook)) print("all sheet names: ", workbook.sheetnames) # 獲取工作表 sheet = workbook['Sheet1'] print("sheet obj: ", sheet, " sheet title:", sheet.title) # 修改sheet名稱 并轉儲為另一個文件 sheet.title = 'Spam Spam Spam' workbook.save('.\source\example_copy.xlsx') # 創建和刪除工作表 workbook.create_sheet(index=3, title="the fourth sheet") print('sheet names: ', workbook.sheetnames) del workbook['the fourth sheet'] print('sheet names: ', workbook.sheetnames) workbook.save('.\source\example_copy.xlsx') # 修改單元格屬性值 sheet['B1'] = 'Hello, world!' print('B1 modified value: ', sheet['B1'].value) workbook.save('.\source\example_copy.xlsx')4.3 其他操作
import openpyxl# 公式 workbookCal = openpyxl.Workbook() sheet = workbookCal.active sheet['A1'] = 200 sheet['A2'] = 300 # 設置公式. sheet['A3'] = '=SUM(A1:A2)' workbookCal.save('.\source\writeFormula.xlsx')# 行、列操作 workbookOpt = openpyxl.Workbook() sheetOpt = workbookOpt.active sheetOpt['A1'] = 'Tall row' sheetOpt['B2'] = 'Wide column' # 設置寬高 sheetOpt.row_dimensions[1].height = 70 sheetOpt.column_dimensions['B'].width = 20 # 合并單元格 sheetOpt.merge_cells('A1:D3') sheetOpt['A1'] = 'Twelve cells merged together.' sheetOpt.merge_cells('C5:D5') sheetOpt['C5'] = 'Two merged cells.' workbookOpt.save('.\source\dimensions.xlsx') # 分拆單元格 sheetOpt.unmerge_cells('C5:D5') workbookOpt.save('.\source\dimensions.xlsx') # 凍結窗口 sheetOpt.freeze_panes = 'C5' workbookOpt.save('.\source\dimensions.xlsx')#圖表 workbookDraw = openpyxl.Workbook() sheetDraw = workbookDraw.active for i in range(1, 11):sheetDraw['A' + str(i)] = i refObj = openpyxl.chart.Reference(sheet, min_col=1, min_row=1,max_col=1, max_row=10) seriesObj = openpyxl.chart.Series(refObj, title='First series') chartObj = openpyxl.chart.BarChart() chartObj.title = 'My Chart' chartObj.append(seriesObj) sheetDraw.add_chart(chartObj, 'C5')workbookDraw.save(‘.\source\sampleChart.xlsx’)
五、綜合實踐
根據如下表結構統計各縣人口總數以及普查區數,并輸出為Json文件。
CensusTract State County POP
… … … …
其中:
- CensusTract表示普查區編號
- State表示州簡稱
- County表示縣名稱
- POP表示普查區人口數
實現代碼如下:
import openpyxl, pprintprint('Opening workbook...') workbook = openpyxl.load_workbook('.\source\censuspopdata.xlsx') sheet = workbook['Population by Census Tract'] countyData = {} print('Reading rows...') for row in range(2, sheet.max_row + 1):# Each row in the spreadsheet has data for one census tract.state = sheet['B' + str(row)].valuecounty = sheet['C' + str(row)].valuepop = sheet['D' + str(row)].value# Make sure the key for this state exists.if already exist, execute nothing.countyData.setdefault(state, {})# Make sure the key for this county in this state exists.if already exist, execute nothing.countyData[state].setdefault(county, {'tracts': 0, 'pop': 0})# Each row represents one census tract, so increment by one.countyData[state][county]['tracts'] += 1# Increase the county pop by the pop in this census tract.countyData[state][county]['pop'] += int(pop) # Open a new text file and write the contents of countyData to it. print('Writing results...') resultFile = open('.\source\census.json', 'w') resultFile.write('allData = ' + pprint.pformat(countyData)) resultFile.close() print(pprint.pformat(countyData)) # print Anchorage population # print(countyData['AK']['Anchorage']['pop']) print('Done.') 返回如下:{"AK": {"Aleutians East": {"pop": 3141,"tracts": 1},"Aleutians West": {"pop": 5561,"tracts": 2},"Anchorage": {"pop": 291826,"tracts": 55},"Bethel": {"pop": 17013,"tracts": 3},"Bristol Bay": {"pop": 997,"tracts": 1},"Denali": {"pop": 1826,"tracts": 1},"Dillingham": {"pop": 4847,"tracts": 2},...六、參考資料
《Python編程快速上手 讓繁瑣工作自動化 第2版》
總結
以上是生活随笔為你收集整理的python脚本——Excel处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WordPress 不同分类目录调用不同
- 下一篇: python-上传下载文件