python读取excel文件,把指定行表红

最近公司有个新的需求:上传一个excel文件,需要对文件进行检测,把错误的记录标红并且记录错误原因!

1.首先上传文件此时没有对文件内容进行检查。
2.保存,此时对文件内容进行检查,用pandas库读取excel文件,进行遍历把有问题的字段记录到数据库中。
3.下载excel,下载的文件中需要标红字段有问题的记录并且记录错误原因!(需要使用到xlrd、xlwt、xlutils库)
3.1:首先我们拿到上传的excel的二进制数据,然后使用xlrd库对二进制数据进行读取,(因为涉及到excel内容的修改所以需要用到xlwt和xlutils库,因为xlrd只能读取excel不能进行修改),然后使用xlutils对xlrd读取的数据进行copy,后面再就对copy之后的对象进行标红操作即可!
3.2:对excel错误记录字体标红需要用到xlwt库,(xlwt.Font()方法生成一个font对象,然后对font对象进行操作)。
3.3:一切操作完成后需要把修改后数据输出成二进制数据,使用到io.BytesIO()方法。

修改excel标红错误记录伪代码如下:

			err_rows = access.get_upload(None, uploadid, channel).sErrorData
			f = BytesIO()  # create a file-like object
			f1 = BytesIO()  # 接受更改格式后的数据流
			book = xlrd.open_workbook(file_contents=data)
			err_dic = {}
			err_rows = eval(err_rows) if err_rows else []
			# styleBlueBkg = xlwt.easyxf('pattern: pattern solid, fore_colour red;')  # 红色
			ro = book.sheets()[0]  # 读取表单0
			wb = copy(book)  # 利用xlutils.copy下的copy函数复制
			ws = wb.get_sheet(0)  # 获取表单0

			for i in range(ro.nrows):
				if i == 0 or i == 1:
					continue
				if ro.cell(i, 1).value and ro.cell(i,1).ctype == 3:
					value = xlrd.xldate.xldate_as_datetime(ro.cell(i, 1).value, 0).__format__("%Y-%m-%d")
					ws.write(i, 1, value)
			wb.save(f)
			ff = f.getvalue()

			for err_row in err_rows:
				err_dic.update(err_row)

			if len(err_dic) == 0:
				return ff

			book = xlrd.open_workbook(file_contents=ff)  # 读取修改格式后的数据
			ro = book.sheets()[0]  # 读取表单0
			wb = copy(book)  # 利用xlutils.copy下的copy函数复制
			ws = wb.get_sheet(0)  # 获取表单0

			font = xlwt.Font()
			font.colour_index = 10  # 指定红色字体
			style = xlwt.XFStyle()
			style.font = font

			for key, value in err_dic.items():
				for i in range(4):
					values = ro.cell(key + 1, i).value
					ws.write(key+1, i, values, style)
				ws.write(key+1, 4, value, style)
			wb.save(f1)
			return f1.getvalue()

参考链接:读取excel单元格中返回内容的类型
在excel中输出多种颜色字体

如有不对的地方希望大家多多指教!

你可能感兴趣的:(excel,python,python,excel)