首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在excel工作表中使用openpyxl查找隐藏列时缺少的列

在excel工作表中使用openpyxl查找隐藏列时缺少的列
EN

Stack Overflow用户
提问于 2022-01-20 22:12:26
回答 1查看 174关注 0票数 2

我试图只读取excel工作表中的非隐藏列,并使用相同的方法创建数据格式。和熊猫和开百叶草一起工作。

使用column_dimension时,Openpyxl不会找到连续的隐藏列。如果在创建隐藏状态时存在分组,则只返回第一个隐藏列。例如,如果列E和F作为一个组隐藏,则E已隐藏为true,而F从列列表中丢失。所以,我所做的就是把所有可能的列和工作表中的所有cols之间的差额,从而得到缺失的隐藏列。然后将其与那些具有隐藏状态的人连接起来,以获得“所有”隐藏列。

但是正在发生的事情是,一些不在column_dimensions中的列没有显示为隐藏在实际excel表中。不知道如何获得真正的“隐藏”列的列表。

这是我写的代码

代码语言:javascript
复制
# reading the file and worksheet
wb = load_workbook(path, read_only = False) 
ws = wb['Overview']

mx_col = ws.max_column
col_indx =[]
for i in range(1,mx_col+1):
    num = get_column_letter(i)
    col_indx.append(num)

hid_cols = []
col_vals = []
for col, dimension in ws.column_dimensions.items():
    col_vals.append(col)
    if dimension.hidden:
        hid_cols.append(col)
        
diff = list(set(col_indx) - set(col_vals))
hidden_columns = diff+hid_cols
EN

Stack Overflow用户

回答已采纳

发布于 2022-01-21 02:20:33

ws.column_dimensions.items()似乎没有返回工作表中所有列的完整列表。通过迭代工作表中的所有列并测试列是否隐藏,我能够找到所有隐藏的列。正如在this answer中解释的那样,Excel合并了分组列的单元格定义,但是您可以使用max属性查找组中的最后一列。因此,一旦找到了隐藏列,就可以使用max属性轻松地找到该组的其余部分。

代码语言:javascript
复制
import openpyxl as op
from openpyxl.utils import get_column_letter

wb = op.load_workbook("Date_format.xlsx")
ws = wb["Sheet1"]

max_col = ws.max_column
cols = [get_column_letter(i) for i in range(1, max_col+1)]

# Find hidden columns
hidden_cols = []
last_hidden = 0
for i, col in enumerate(cols):
    # Column is hidden
    if ws.column_dimensions[col].hidden:
        hidden_cols.append(col)
        # Last column in the hidden group
        last_hidden = ws.column_dimensions[col].max
    # Appending column if more columns in the group
    elif i+1 <= last_hidden:
        hidden_cols.append(col)
visible_cols = [col for col in cols if col not in hidden_cols]
print("Columns:\t\t", cols)
print("Hidden columns:\t", hidden_cols)
print("Visible columns:", visible_cols)

>>>
Columns:         ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
Hidden columns:  ['B', 'D', 'E', 'G', 'H', 'I']
Visible columns: ['A', 'C', 'F', 'J']

或者更多嵌套版本的for循环(它较少Pythonic):

代码语言:javascript
复制
for i, col in enumerate(cols):
    if ws.column_dimensions[col].hidden:
        for col_num in range(ws.column_dimensions[col].min, ws.column_dimensions[col].max + 1):
            hidden_cols.append(get_column_letter(col_num))
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70794050

复制
相关文章

相似问题

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