首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有一种方法可以使合并的单元格在excel中使用Openpyxl进行过滤?

是否有一种方法可以使合并的单元格在excel中使用Openpyxl进行过滤?
EN

Stack Overflow用户
提问于 2020-11-23 00:32:39
回答 1查看 440关注 0票数 0

我在寻找一种使用openpyxl使合并的单元格可过滤的方法。

例如,在下面的工作簿中对名字"John“进行过滤:

应该返回前三行:

而不是只返回顶部行(默认的excel行为):

问题是,默认情况下,合并范围仅包含范围的左上角单元格中的值:默认合并单元格值

使用openpyxl是否可以覆盖合并单元格中的None值,从而使它们有效地进行过滤?所需合并单元格值

作为参考,您可以使用宏或手动格式化创建可过滤的合并单元格,如下所示:https://stackoverflow.com/a/49817670/14251756

我已经尝试过用下面的脚本覆盖none值,但是得到了错误AttributeError:'MergedCell‘对象属性'value’是只读的

代码语言:javascript
运行
复制
import openpyxl
wb = openpyxl.load_workbook("Workbook")
ws = wb['Worksheet']

#Get list of ranges of merged cells
merged_cell_ranges = ws.merged_cells.ranges
merged_cell_ranges = list(map(str,merged_cell_ranges))

#Iterate through ranges and write top merged cell value to empty cells
for merged_range in merged_cell_ranges:
    for row in ws[merged_range]:
        for cell in row:
            cell.value = ws[merged_range.split(':')[0]].value
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-01 07:13:15

远非理想,但我通过修改openpyxl源代码实现了预期的结果。

要修改的函数位于以下位置:https://foss.heptapod.net/openpyxl/openpyxl/-/blob/branch/3.0/openpyxl/worksheet/worksheet.py#L586

您可以简单地添加一个参数来选择这些单元格是否成为合并的单元格,并为此“清除”。

修改后的函数现在如下所示:

代码语言:javascript
运行
复制
    def merge_cells(self, range_string=None, start_row=None, start_column=None, end_row=None, end_column=None, clean=True):
        """ Set merge on a cell range.  Range is a cell range (e.g. A1:E1) """
        if range_string is None:
            cr = CellRange(range_string=range_string, min_col=start_column, min_row=start_row,
                      max_col=end_column, max_row=end_row)
            range_string = cr.coord
        mcr = MergedCellRange(self, range_string)
        self.merged_cells.add(mcr)
        if clean:
            self._clean_merge_range(mcr)
        else:
            mcr.format()

只需添加clean=False来保留这些值。

代码语言:javascript
运行
复制
ws.merge_cells('A2:A9', clean=False)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64961153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档