Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用openpyxl枚举Excel工作表中具有(非空)值的所有单元格?_Python_Python 3.x_Excel_Openpyxl - Fatal编程技术网

Python 如何使用openpyxl枚举Excel工作表中具有(非空)值的所有单元格?

Python 如何使用openpyxl枚举Excel工作表中具有(非空)值的所有单元格?,python,python-3.x,excel,openpyxl,Python,Python 3.x,Excel,Openpyxl,我需要使用openpyxl以编程方式分析Excel工作表(.xslx)的内容 我的问题是一些excel表格有大量空行,例如3。下面的访问控制工作表有1048534行和16384列,尽管只有前100行是非空的。这将导致数十亿个单元格,这是不可能枚举的,例如: for i in range(ws.max_row + 1): for j in range(ws.max_column + 1): value = ws.cell(i, j) ... 我希望避免溢出信息,例如

我需要使用
openpyxl
以编程方式分析Excel工作表(.xslx)的内容

我的问题是一些excel表格有大量空行,例如
3。下面的访问控制
工作表有1048534行和16384列,尽管只有前100行是非空的。这将导致数十亿个单元格,这是不可能枚举的,例如:

for i in range(ws.max_row + 1):
   for j in range(ws.max_column + 1):
      value = ws.cell(i, j)
      ...
我希望避免溢出信息,例如跳过索引10000处存在的非空行。因此,仅分析前N行的解决方案根本不适用于我的用例

openpyxl
是否支持过滤所有这些多余的行,并且只返回一组至少包含一个非空单元格的行

>>> for ws in wb.worksheets:
...     print(ws.title, ws.max_row, ws.max_column)
...
0. Intro 16 7
1. Solution Profile 63 8
2. Solution Diagram 6 4
1.BE 18 29
3. Access Control 1048534 16384.    <-- PROBLEM
4. Systems Development 46 21
5. Operational Security 43 14
6. Data Communication 11 14
7. Other 27 16
3-7.BE 6 3
8. Risk Assessment 15 29
8.BE 20 16
9. Conclusions 36 8
EBA Risk Statement 51 13
Vulnerabilities 86 5
Threats 44 4
Sample IT Risks 167 6
9.BE 5 1
Risk matrix 19 11
9. Document change log 28 6
>>> (1048534 * 16384) / 1000000
17179.181056
wb.worksheet中的ws的
>:
...     打印(ws.title、ws.max\u行、ws.max\u列)
...
0简介16 7
1.解决方案简介63 8
2.解决方案图6 4
1.BE 18 29
3.访问控制1048534 16384.>>(1048534 * 16384) / 1000000
17179.181056

这取决于你在做什么。您可以将每个工作表加载到一个数据框架中,该数据框架具有处理此问题的方法。否则,以下内容将有所帮助:

for row in ws.iter_rows(values_only=True):
    if not any(row):
       continue

非常感谢。但为什么你的方法比我的快?无论是熊猫还是你的代码,每个单元格都需要检查一个值,对吗或者他们如何确定,例如“第10000行之后没有更多的值”?Mine在只读模式下工作正常,该模式速度尽可能快,但在某种程度上取决于工作表中的维度元素是否有用。对于完全控制,您可以查看工作表的
\u单元格
字典并检查键。NB单元格即使不存在也可能存在。请提供一个完整的示例,同时设置只读模式(或者您的意思是
values=only
是只读模式)?在我的例子中,如果只有前100行包含值,那么当使用
ws.iter_行时,您的解决方案是否会跳过其余行(整个工作表中
openpyxl
报告的总行数为1048534)?如果没有,那么代码将循环1048534次(这在我的测试中发生),这是非常慢的,因为
pyopenxl
可能必须查看行中的每个单元格,以创建每次迭代返回的对象。是否对Excel工作表报告的行数有任何限制?Excel工作表可以有任意数量的行,比如1000亿行吗?