gpt4 book ai didi

python-3.x - python xlsxwriter 从单元格中提取值

转载 作者:行者123 更新时间:2023-12-04 16:39:59 25 4
gpt4 key购买 nike

是否可以提取我写入 xlsxwriter.worksheet 的数据?

import xlsxwriter

output = "test.xlsx"
workbook = xlsxwriter.Workbook(output)
worksheet = workbook.add_worksheet()


worksheet.write(0, 0, 'top left')
if conditional:
worksheet.write(1, 1, 'bottom right')

for row in range(2):
for col in range(2):
# Now how can I check if a value was written at this coordinate?
# something like worksheet.get_value_at_row_col(row, col)

workbook.close()

最佳答案

Is it possible to extract data that I've written to a xlsxwriter.worksheet?


是的。尽管 XlsxWriter 是只写的,但它将表值存储在一个内部结构中,并且仅在 workbook.close() 时才将它们写入文件。被执行。
每个工作表都有一个 table属性。它是一个字典,包含所有填充行的条目(从 0 开始的行号是键)。这些条目又是字典,包含行内所有填充单元格的条目(从 0 开始的列号是键)。
因此, table[row][col]将为您提供所需位置的条目(但只有在有条目的情况下,否则它将失败)。
请注意,这些条目仍然不是您要查找的文本、数字或公式,而是命名元组,其中还包含单元格格式。您可以键入检查条目并根据其性质提取内容。以下是 type(entry) 的可能结果以及可访问的命名元组的字段:
  • xlsxwriter.worksheet.cell_string_tuple : 字符串,格式
  • xlsxwriter.worksheet.cell_number_tuple : 数字、格式
  • xlsxwriter.worksheet.cell_blank_tuple : 格式
  • xlsxwriter.worksheet.cell_boolean_tuple : bool 值,格式
  • xlsxwriter.worksheet.cell_formula_tuple : 公式、格式、值
  • xlsxwriter.worksheet.cell_arformula_tuple : 公式、格式、值、范围

  • 对于数字、 bool 值和公式,可以通过读取命名元组的相应字段来访问内容。
    对于数组公式,内容仅出现在输出范围的左上角单元格中,而其余单元格由值为 0 的数字条目表示。
    对于字符串,情况就比较复杂了,因为Excel的存储概念有一个共享的字符串表,而单个单元格的条目只指向这个表的一个索引。共享字符串表可以作为 str_table.string_table 访问。工作表的属性。它是一个字典,其中键是字符串,值是相关联的索引。为了通过索引访问字符串,您可以从字典中生成一个排序列表,如下所示:
    shared_strings = sorted(worksheet.str_table.string_table, key=worksheet.str_table.string_table.get)
    我从上面扩展了您的示例以包含所有解释的功能。现在看起来像这样:
    import xlsxwriter

    output = "test.xlsx"
    workbook = xlsxwriter.Workbook(output)
    worksheet = workbook.add_worksheet()

    worksheet.write(0, 0, 'top left')
    worksheet.write(0, 1, 42)
    worksheet.write(0, 2, None)
    worksheet.write(2, 1, True)
    worksheet.write(2, 2, '=SUM(X5:Y7)')
    worksheet.write_array_formula(2,3,3,4, '{=TREND(X5:X7,Y5:Y7)}')
    worksheet.write(4,0, 'more text')
    worksheet.write(4,1, 'even more text')
    worksheet.write(4,2, 'more text')
    worksheet.write(4,3, 'more text')

    for row in range(5):
    row_dict = worksheet.table.get(row, None)
    for col in range(5):
    if row_dict != None:
    col_entry = row_dict.get(col, None)
    else:
    col_entry = None
    print(row,col,col_entry)

    shared_strings = sorted(worksheet.str_table.string_table, key=worksheet.str_table.string_table.get)

    print()
    if type(worksheet.table[0][0]) == xlsxwriter.worksheet.cell_string_tuple:
    print(shared_strings[worksheet.table[0][0].string])

    # type checking omitted for the rest...
    print(worksheet.table[0][1].number)
    print(bool(worksheet.table[2][1].boolean))
    print('='+worksheet.table[2][2].formula)
    print('{='+worksheet.table[2][3].formula+'}')

    workbook.close()

    关于python-3.x - python xlsxwriter 从单元格中提取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62865195/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com