Python-处理Excel电子表格总结

openpyxl模块:

安装:

import openpyxl

用openpyxl模块读取Excel文档:

import openpyxl
# 生成一个workbook对象代表要操作的Excel文档
wb = openpyxl.load_workbook('文档名.xlsx')
# 从Excel文档中获取当前工作表
sheet = wb.get_sheet_by_name('工作表sheet名')  # 同理sheet = wb.active

从工作表中取得单元格

取得工作表(Workbook对象)后,即可按照名字访问对应单元格(Cell对象);例如:
获取单元格的内容:

A1 = sheet['A1'] 
#等同 A1 = sheet.cell(row = 1,column = 1)

获取单元格的行号:

A1.row

获取单元格的列号:

A1.column

获取单元格的坐标:

A1.coordinate

获取某一行的所有单元格:

sheet.rows[行号]

获取某一列的所有单元格:

sheet.columns[列号]

获取工作表中的最大行号:

sheet.max_row

获取工作表中的最大列号:

sheet.max_column

公式:

# 如果调用load_workbook()是带有data_only = True,A1单元格将显示公式的结果,否则显示公式:
sheet['A1'] = '=SUM(B1:B8)'

设置行高和列宽:

# 设置B1单元格的行高和列宽
sheet.row_dimensions[1].height = 70
sheet.column_dimensions['B'].width = 20

合并单元格:

# 表示要合并的区域的左上角和右下角的单元格
sheet.merge_cells('A1:B2')
# 设置值只需要设置左上角单元格的值
sheet['A1'] = 'four cells merged together.'

拆分单元格:

# 表示要拆分的区域的左上角和右下角的单元格
sheet.unmerge_cells('A1:B2')

项目练习一:

从2010年美国人口普查表中计算每个县的总人口以及每个县的普查区的数目:
人口普查表下载
首先构建一个字结构:

#构建一个字典结构:
'''
state 表示每个州的简称
county 表示每个县
pop 表示每个县的总人口
tracts 表示每个县的普查区数目
countyData = {state:{
					county:{
						'pop':0,'tracts':0
						}
					}
			}
'''

代码如下:

import openpyxl
import pprint

print('Opening workbook...')
localExcel = '/工作目录/censuspopdata.xlsx'
wb = openpyxl.load_workbook(localExcel)
sheet = wb.get_sheet_by_name('Population by Census Tract')

countyData = {
     }
print('Reading rows...')

for row in range(2,sheet.max_row+1):
	state = sheet['B' + str(row)].value
	county = sheet['C' +str(row)].value
	pop = sheet['D' + str(row)].value

	#设置countData默认值
	countyData.setdefault(state,{
     })
	countyData[state].setdefault(county,{
     'pop' : 0,'tracts' : 0})

	# 'pop'表示每个县的总人数
	countyData[state][county]['pop'] += int(pop)
	#'tracts'表示每个县的普查区的数目
	countyData[state][county]['tracts'] += 1

print('Writing results...')

fileName = '/工作目录/renkoupuchashuju.py'
resultFile = open(fileName,'w')
# 将字典内容漂亮打印成字符串并写入.py文件
resultFile.write('countyData = ' + pprint.pformat(countyData))
resultFile.close()
print('Done....')

写入到renkoupuchashuju.py相当于通过Python程序生成了另一个Python程序,可以通过OS模块导入并查看内容或者进行操作:

>>> import os
>>> os.chdir('工作目录')
>>> import renkoupuchashuju
>>> renkoupuchashuju.countyData['AK']['Bethel']
{
     'pop': 17013, 'tracts': 3}
# 计算总人口
>>> for i in renkoupuchashuju.countyData.values():
...     for j in i.values():
...             num += j['pop']
... 
>>> print(num)
308745538

项目练习二:

将simple.xlsx文档中内容写入到simple_copy.xlsx文档中:

import openpyxl
from openpyxl.utils import get_column_letter,column_index_from_string

print('open simple.xlsx...')
wb = openpyxl.load_workbook('/目录/simple.xlsx')
sheet_wb = wb.active
#创建新的工作簿
wbCy = openpyxl.Workbook()
sheet_wbcy = wbCy.active
#工作表名称
sheet_wbcy.title = 'copy simple'
print('write simple_copy.xlsx...')
for rowSimple in sheet_wb:
	for valueSimple in rowSimple:
		wbrow = str(valueSimple.column)
		wbcolumn = get_column_letter(valueSimple.row)
		sheet_wbcy[wbcolumn+wbrow] = valueSimple.value
print('Done...')
#保存在simple_copy.xlsx文档中
wbCy.save('/目录/simple_copy.xlsx')

项目练习三:

更新产品销售电子表格中的单元格,程序将遍历这个电子表格,找到特定类型的产品,并更新他们的价格

import openpyxl
from openpyxl.utils import get_column_letter,column_index_from_string

excelPath = '/工作路径/'
wb = openpyxl.load_workbook(excelPath + 'produceSales.xlsx')
ws = wb.active
#正确的价格信息
PRICE_UPDATES = {
     'Celery' : 1.19,
				 'Garlic' : 3.07,
				 'Lemon'  : 1.27}
#遍历每行
for rowNum in range(2,ws.max_row+1):
	#每行第一列为产品名称
	produceName	= ws.cell(row = rowNum,column = 1).value
	if produceName in PRICE_UPDATES:
		ws.cell(row = rowNum,column = 2).value = PRICE_UPDATES[produceName]

wb.save('/保存路径/produceSales_copy.xlsx')

你可能感兴趣的:(Python学习,python)