把xls里面的字段写入到新的Excel里面,这里会有两个问题,如果给的字段是不存在的,会出现报错,需要解决报错问题,如果不存在字段就pass,把存在的字段进行写入,第二个问题是,字段内容包含非法字符,怎么内容处理然后写入
时间: 2024-03-14 18:42:48 浏览: 104
针对第一个问题,你可以使用 try...except... 语句块来处理不存在字段的情况,如下所示:
```python
import xlrd
import openpyxl
wb1 = xlrd.open_workbook('old.xlsx')
sheet1 = wb1.sheet_by_index(0)
wb2 = openpyxl.Workbook()
sheet2 = wb2.active
# 定义需要写入的字段名称列表
fields = ['field1', 'field2', 'field3', 'field4']
# 写入表头
for i in range(len(fields)):
sheet2.cell(row=1, column=i+1, value=fields[i])
# 写入数据
for row in range(1, sheet1.nrows):
data = {}
for col in range(sheet1.ncols):
field_name = sheet1.cell_value(0, col)
if field_name in fields:
data[field_name] = sheet1.cell_value(row, col)
else:
# 如果字段不存在,直接跳过
continue
try:
# 写入数据
for i in range(len(fields)):
sheet2.cell(row=row, column=i+1, value=data[fields[i]])
except KeyError:
pass
wb2.save('new.xlsx')
```
对于第二个问题,你可以使用 openpyxl 提供的 `clean()` 函数来清除非法字符,然后再将处理后的内容写入到新的 Excel 文件中,如下所示:
```python
from openpyxl.utils import clean
# ...
for row in range(1, sheet1.nrows):
data = {}
for col in range(sheet1.ncols):
field_name = sheet1.cell_value(0, col)
if field_name in fields:
cell_value = sheet1.cell_value(row, col)
cleaned_value = clean(str(cell_value))
data[field_name] = cleaned_value
else:
# 如果字段不存在,直接跳过
continue
try:
# 写入数据
for i in range(len(fields)):
sheet2.cell(row=row, column=i+1, value=data[fields[i]])
except KeyError:
pass
# ...
```
这样就可以在写入 Excel 文件之前,先将单元格中的非法字符清除掉,然后再将处理后的内容写入到新的 Excel 文件中。
阅读全文