【问题标题】:openpyxl highlighting multiple cells when one of them is selected upon closing the fileopenpyxl在关闭文件时选择其中一个单元格时突出显示多个单元格
【发布时间】:2013-08-25 03:00:41
【问题描述】:

在我的this post 中以编程方式突出显示 openpyxl 中的单元格时,我遇到了奇怪的行为。我花了一些(更多)时间对此进行调查并设法跟踪此错误的来源。我不知道这是否是重现它的唯一方法,也许某些步骤是不必要的,但以下示例代码最接近我实际所做的:

import openpyxl

def doStuff(iterations=1, fName='test'):
    for i in range(iterations):
        wb = openpyxl.reader.excel.load_workbook(fName+'.xlsx')
        ws=wb.get_active_sheet()
    
        a1=ws.cell('A1')
        a1.style.fill.fill_type=openpyxl.style.Fill.FILL_SOLID
        a1.style.fill.start_color.index='0000CC'
            
        namedRanges=wb.get_named_ranges()
        for namedRange in namedRanges:
             if namedRange.name in 'myName':
                 desiredNamedRange=namedRange
    
        dest=desiredNamedRange.destinations
        namedCell=ws.cell(dest[0][2].split('$')[1]+dest[0][3].split('$')[2])
        namedCell.style.fill.fill_type=openpyxl.style.Fill.FILL_SOLID
        namedCell.style.fill.start_color.index='FF33CC'
    
        wb.save(fName+'.xlsx')

发生的情况是我打开了一个已经存在的工作簿,其中包含一些值(数字和文本)。数字位于我稍后将突出显示的单元格中(A1 和名为“myName”的单元格,在我的测试用例中为 E7),而文本位于相邻列中.然后我用一些颜色填充 A1 和命名单元格并保存工作簿。如果需要,这可以重复多次(以模拟我的原始代码的长时间使用)。

第一次运行后,一切正常,如您所料。首次运行后,当您在 Excel 中打开工作簿,将“无填充”应用到其中包含 A1 的单元格范围并关闭工作簿同时时,就会出现问题保持这些单元格被选中。当您再次以 10 或 20 次迭代运行我的代码时,您会注意到,当您在 Excel 中打开测试工作簿时,您最初选择的单元格区域现在突出显示为与 A1 相同的颜色.

我的问题是:

  • 我在这里做错了吗?该计划的性质要求 它要多次执行此过程,我不能禁止 用户在选择单元格的情况下关闭他们的工作簿。

  • 有什么办法可以防止这种情况发生吗?并且,如果是,如何 这样做?

额外信息 我查看了构成工作簿的 XML 文件,我在其中观察到了这种行为(有关标准,请参阅 this website)。我注意到,由于某些原因,当您在使用openpyxl 更改格式时选择它们时,单元格样式参考会发生变化。例如,单元格B1(字母s)的样式应为0(或不存在,因为默认情况下假定为0)而openpyxl在工作簿上运行上述代码时将其更改为1

<c r="A1" s="1">
    <v>1</v>
</c>
<c r="B1" s="1" t="s">
    <v>0</v>
</c>

这会导致单元格样式发生变化。我非常怀疑我在这里做错了什么,所以:

我的新问题是: openpyxl 模块的哪个部分最有可能对此负责?因为有些东西告诉我它需要修改。

【问题讨论】:

  • 你不可能通过查看 openpyxl 的来源很难确定问题:单元格共享样式。当您提交此问题时,此问题已在库中得到解决。

标签: python xml python-2.7 openpyxl


【解决方案1】:

不是我解决了这个问题(因为这需要修改我没有时间的库),但我确实找到了解决这个问题的方法:win32com Python 中的模块并通过@从 Python 脚本驱动 Excel 987654323@。像梦一样工作,比openpyxl 有更多的功能。唯一的缺点是您需要 Excel 许可证才能使用此解决方案。对于有兴趣做同样事情的人,我推荐this page

【讨论】:

    猜你喜欢
    • 2018-11-25
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 2018-02-01
    • 2016-09-14
    • 1970-01-01
    • 2021-02-17
    • 2011-07-17
    相关资源
    最近更新 更多