需求:
因为需要处理一份excel,有样式,手机,身份证显示为科学计数法,400多行,修改身份证单元格数据
遇到的问题:
- 用xlwt,但是报
ValueError: column index (256) not an int in range(256)
无法处理255行以上的数据
2. xlrd 的 formatting_info=True 不支持xlsx格式文件,所以无法保留原有样式
3. 身份证的科学计数法不知道怎么转成字符串再拼接别的字符串
解决方式
使用openpyxl
import openpyxl
# 保留原有样式
wb = openpyxl.load_workbook(u'test222.xlsx')
# 获取所有sheet
sheetnames = wb.sheetnames
# 选择目标sheet
sheet = wb[sheetnames[0]]
# 获取最大行数
rownum = sheet.max_row
for i in range(rownum):
if i <= 4:
continue
# 获取单元格数据
xx = sheet['G'+str(i)].value
# 这个是因为单元格中有科学计数数据,科学计数类型为float
if not isinstance(sheet['G'+str(i)].value, str):
# 将其格式化字符串,因为是身份证所有不需要小数,.0f就是不需要小数
xx = format(sheet['G'+str(i)].value, '.0f')
# 字符串拼接
xx = "'"+xx
# 修改单元格数据
sheet['G'+str(i)] = xx
# 另存为新文件
wb.save(u'newtest222.xlsx')