Pyexcel更改单元格值
所以我在所有的Excel项目中都使用了openpyxl
,但现在我必须使用.xls
文件,所以我不得不改变库。 我select了pyexcel
cuz,它似乎相当简单,并有很好的文档。 所以我经历了创build数百个variables,因为没有.index
属性,或者什么东西。
我现在想要做的是读正确的文件中的列,在“数量”列中,并从中获得fe值12
,然后检查其他文件中的同一列,如果不是12,则将其设置为12 。 简单。 但是我找不到有关在文档中更改单个单元格值的任何字词。 你可以帮我吗?
我没有明白,难道不是最简单的事吗?
column_name = 'Quantity' value_to_find = 12 sheets1 = pe.get_book(file_name='Sheet1.xls') sheets1[0].name_columns_by_row(0) row = sheets1[0].column[column_name].index(value_to_find) sheets2 = pe.get_book(file_name='Sheet2.xls') sheets2[0].name_columns_by_row(0) if sheets2[0][row, column_name] != value_to_find: sheets2[0][row, column_name] = value_to_find
编辑
奇怪的是,如果你使用cell_address索引,你只能分配值,必须是一些错误。 添加这个function:
def index_to_letter(n): alphabet = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ') result = [] while (n > 26): result.insert(0, alphabet[(n % 26)]) n = n // 26 result.insert(0, alphabet[n]) return ''.join(result)
并修改最后一部分:
sheets2[0].name_columns_by_row(0) col_letter = index_to_letter(sheets2[0].colnames.index(column_name)) cel_address = col_letter+str(row+1) if sheets2[0][cel_address] != value_to_find: sheets2[0][cel_address] = value_to_find
编辑2
看起来像只有当你直接使用列名时才能分配,所以左右的是findcolumn_name的索引:
sheets2[0].name_columns_by_row(0) col_index = sheets2[0].colnames.index(column_name) if sheets2[0][row, col_index] != value_to_find: sheets2[0][row, col_index] = value_to_find
Excel使用2组引用到单元格。 单元格名称(“A1”)和单元格vector(行,列)。
PyExcel文档教程指出它支持这两种方法。 caiohamamura的方法试图build立单元格名称 – 你不需要如果单元格在每个文件中的相同位置,您可以使用该向量。
一旦你有了这个单元格,为一个单元格赋值是简单的 – 你赋值。 例:
import pyexcel sheet = pyexcel.get_sheet(file_name="Units.xls") print(sheet[3,2]) # this gives me "cloud, underwater" sheet[3,2] = "cloud, underwater, special" sheet.save_as("Units1.xls")
请注意,我所要做的只是“sheet [3,2] =”。
这并没有明确说明,但在pyexcel文档中暗示说要更新整列:
sheet.column [“Column 2”] = [11,12,13]
即通过分配新列表来replace列表。 同样的逻辑适用于单个单元格 – 只需分配一个新的值。
奖金 – [行,列]方法获取大于26列的单元格位置(即“AA”及以上)。
警惕 – 确保在比较中,你正在比较like-for-like,即int被理解为int而不是str。 Python应该隐式转换,但在某些情况下,它可能不会 – 特别是如果您使用的是Python 2并涉及Unicode。