Python需要读取Excel(.xls、.xlsx)时通常使用xlrd模块;如果要对其内容进行编辑的话稍稍有些麻烦,通常的做法是使用xlutils的copy模块对原文件进行复制,然后保存成新的文件。
前提摘要:1.安装好xlrd,cmd命令:pip install xlrd
2.引用xlrd模块 :import xlrd
1.使用xlrd模块读取Excel文件
Workbook = xlrd.open_workbook('excelFile.xls')
2.获取表单名
booknames=workbook.sheet_names() # 以列表的形式返回
3.打开表单
mySheet= Workbook.sheet_by_index(index) #通过索引打开
mySheet=Workbook.sheet_by_name(bookname) #通过表单名打开
4.或者表单行数和列数
nrows = mySheet.nrows #获取总行数
ncols = mySheet.ncols #获取总列数
5.获取一行和一列的数据
myRowValues = mySheet.row_values(i) #i是行数,从0开始计数,返回list对象。
myColValues = mySheet.col_values(i) #i是列数,从0开始计数,返回list对象。
6.读取单元格数据
myCell = mySheet.cell(i, j) #获取单元格,i是行数,j是列数,行数和列数都是从0开始计数。
myCellValue = myCell.value #通过单元格获取单元格数据。
myCellValue = mySheet.cell_value(i, j) #直接获取单元格数据,i是行数,j是列数,行数和列数都是从0开始计数。
7.用xlrd写入数据
copy_workbook= copy(Workbook) #简历写入的副本
wb=get_sheet(bookindex) #打开写入的表单
wb.write(row,col,value) #在单元格里写入对应的值
copy_workbook.save(self.filepath) #保存文件
当然这种方法少量数据简单,数据多的话就要用xlwt了。
假如xlsx较复杂,夹杂着各种格式、规则、宏,可能就会遇到问题---普通读取会丢掉所有这些附带的信息。其实xlrd早就已经适配了这个功能,它提供的formatting_info参数取值为True时(为了节省内存,该参数默认为False),就会读取各种格式的信息。
xlrd.open_workbook('A.xls',formatting_info=True)
但是我们会发现在读取xlsx格式的Excel时,传入formatting_info会直接抛出异常,而读取xls类型的文件时不存在此问题。
raise NotImplementedError("formatting_info=True not yet implemented")
formatting_info=True时必须为xls类型,且必须为另存为,不可直接更改后缀,xlrd目前版本不支持xlsx。
classification = [
{
"id": "1",
"name": "学生个人基础信息",
"value": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"]},
{
"id": "2",
"name": "学生个人辅助信息",
"value": ["16", "17", "18"]},
{
"id": "3",
"name": "学生学籍基本信息",
"value": ["22", "23", "24", "25", "26", "27A"]},
{"id": "4",
"name": "学生个人联系信息",
"value": ["28", "29", "30", "31", "32"]},
]
import xlrd,xlwt
import xlutils.copy
style = xlwt.XFStyle()
workbook = xlrd.open_workbook('A.xls',formatting_info=True)#添加formatting_info=True时必须为xls类型,且必须为另存为,不可直接更改后缀
wsr=workbook.sheet_by_name("Sheet1")
wb = xlutils.copy.copy(workbook)# 完成xlrd对象向xlwt对象转换
ws= wb.get_sheet(0)
for item in classification:
for nmb in item['value']:
for row in range(4, 53):
for col in [0, 3]:
try:
if str(int(wsr.cell(row,col).value)) == nmb:
ws.write(row,col+2,'中国',style)
# print(row,col)
except:
if wsr.cell(row,col).value == nmb:
ws.write(row, col + 2, nmb)
wb.save('A2.xls')
# import shutil
# shutil.copyfile("A.xls", "005.xls")
# wb = xlrd.open_workbook('005.xlsx')
参考博客: