我导入了一个excel电子表格,并试图用电子表格中所有行的默认值清除空值。我不需要更新电子表格,我只需要设置默认值,因为我正在使用这些信息插入本地数据库。每当我尝试这样做时,它永远不会得到正确的处理。这是我最初的代码迭代:
for root,dirs,files in os.walk(path):
xlsfiles=['1128CNLOAD.xlsx']
#xlsfiles=[ _ for _ in files if _.endswith('CNLOAD.xlsx') ]
print (xlsfiles)
for xlsfile in xlsfiles:
book=xlrd.open_workbook(os.path.join(root,xlsfile))
sheet=book.sheet_by_index(0)
cell=sheet.cell(1,1)
print (sheet)
sheet0 = book.sheet_by_index(0)
#sheet1 = book.sheet_by_index(1)
for rownum in range(sheet0.nrows):
print sheet0.row_values(rownum)
values=()
print sheet0.nrows
for row_index in range(1, sheet.nrows):
if sheet.cell(row_index,4).value == '':
sheet.cell(row_index,4).value = 0.0
print sheet.row(row_index)
代码spits没有返回任何错误,但没有更新任何内容,我试图更新的单元格仍然是空的。
我还试图改变循环,只为列表做一个值替换,如下所示:
for row_index in range(1, sheet.nrows):
if sheet.row(1)[4] == "empty:''":
sheet.row(1)[4] = "number:0.0"
运行此更新后打印时,列表没有更改。
print(sheet.row(1))
[text:u'FRFHF',text:u'',数字:0.15,数字:0.15',空:'',空:''',数字:2.5,数字:2.5%,空:'.',空
谢谢你的帮助,如果你有任何问题,请告诉我。
xlrd并没有真正设置为在内存中存储电子表格后进行编辑。您可以这样做,但必须使用未记录的内部实现。
在我的版本(0.7.1)中,单元格以两个不同的二维数组存储在表格内部——sheet._cell_types
和sheet._cell_values
是主要的两个数组。类型由biffh.py
中的一组常量定义,xlrd
模块导入这些常量。当您调用cell
时,它会使用为给定行/列对查找的值和类型构造一个新的Cell
实例。您可以直接更新这些,也可以使用put_cell
方法。
所以看起来这是可行的:
if sheet.cell_type(1, 4) == xlrd.XL_CELL_EMPTY:
sheet._cell_types[1][4] = xlrd.XL_CELL_NUMBER
sheet._cell_values[1][4] = 0.0
或者:
if sheet.cell_type(1, 4) == xlrd.XL_CELL_EMPTY:
sheet.put_cell(1, 4, xlrd.XL_CELL_NUMBER, 0.0, sheet.cell_xf_index(1, 4))
如果你使用的是不同的版本,你可能需要查看代码以确保这一点没有改变。