主要的可以操作excel的模块有:xlutils(仅支持xls文件),xlwings(支持vba),openpyxl,pandas,win32com(仅支持windoc,不太好用),xlsxwriter(不能打开,修改已有文件).
简单来说如果处理xls文件就使用xlrd,xlwt,xlutils(不得不说为什么不打包在一起呢),而如果要处理xlsx就使用openpyxl和xlsxwriter,这个很好用。
- xlutils,xlrd,xlwt的使用:
官方文档 -->
来个例子:
我的数据是这样的:
目的是这样的:
代码是这样的:
import xlrd
import xlwt
class disposeXls(object):
def __init__(self, f_name="成绩表.xls"):
self.data = []
self.courses = []
self.dataD = []
self.f_name = f_name
self.needRC = [(0, 1446), {"姓名": 0, "学号": 1, "课程": 2, "成绩": 8},["姓名", "学号", "课程", "成绩"]]#定义所需要数据的行和列
self.readXls()
self.washDAta()
self.formatting()
self.saveXls()
#print(self.dataD)
#print(self.courses)
def readXls(self):
"读取xls文件的所有内容"
book = xlrd.open_workbook(self.f_name)
#打开一个xls文件
sh = book.sheet_by_index(0)
#获取第一个表单
for i in range(sh.nrows):
tempLIst = []
#sh.nrows返回的是表格的总行数
for j in range(sh.ncols):
#sh.ncols返回的是表格的总列数,这样就可以遍历表格的所有数据了。
tempLIst.append(sh.cell_value(i, j))
#获取i行j列的值。
self.data.append(tempLIst)
def washDAta(self):
"把数据进行加工,去除无用数据"
self.data = self.data[self.needRC[0][0]: self.needRC[0][1]]
for i, dataL in enumerate(self.data):
tempList = []
for j in self.needRC[2]:
if j == "课程" and "(" in dataL[self.needRC[1][j]]:
dataL[self.needRC[1][j]] = dataL[self.needRC[1][j]][:3]
tempList.append(dataL[self.needRC[1][j]])
self.data[i] = tempList
def formatting(self):
"把列表转化为字典"
lastName = ""
for i in self.data:
if lastName != i[0]:
lastName = i[0]
self.dataD.append([])
self.dataD[-1].append(i[:2])
self.dataD[-1].append({})
self.dataD[-1][-1][i[2]] = i[3]
if i[2] not in self.courses:
self.courses.append(i[2])
def saveXls(self):
"把数据写入一个xls文件"
wb = xlwt.Workbook()
#创建一个xls文件对象
sh = wb.add_sheet("mySheet")
#新增一个表单
for i, dateL in enumerate(self.dataD):
for j, c in enumerate(self.courses):
sh.write(i+1, j+2, dateL[1].get(c))
# +1 的原因是,突然发现忘记了表头。
#写入i行j列的数据
sh.write(i+1, 0, dateL[0][0])
sh.write(i+1, 1, dateL[0][1])
#写入姓名和学号
for i, c in enumerate(self.courses):
sh.write(0, i+2, c)
#写入课程名称
wb.save("test.xls")
if __name__ == '__main__':
test = disposeXls()
一共没几行,就是把数据读出来,然后统计一下再输出到Excel,不过用这三个模块真心没有openpyxl好用。
from openpyxl import Workbook
wb = Workbook()
#创建一个工作簿
ws1 = wb.active
#至少建立一个工作表
ws = wb.create_sheet("mySheet",0)
ws1.title = "New Title"
#设置表的名字
ws.sheet_properties.tabColor = "1072BA"
#改变表选项卡的颜色
ws["A4"] = 4
ws.cell(row=1, column=1, value=1)
#两种修改表格内容的方法, cell的方法暂时还弄不懂它第一个参数的意义。
print(ws["A2"].value)
#访问A列2行的值,得到cell直接访问它的value属性,就是目标表格的值。
wb.save("sample.xlsx")
#保存
若要读取一个已经存在工作表,使用load_workbook()函数,其他操作都一样。
不得不说openpyxl的使用真是太清爽了。
复杂的使用方法
有使格式,使用公式,读取现有工作薄,合并单元格,插入图片,插入图表什么的功能太多,很费时间,而且不得不说openxpxl的官方文档做的非常好,所以这部分等以后再说吧
官方参考文档 -->
未完待续,如果有使用openxpxl的问题,可以给我留言。知无不言