<p><code>worksheet.cell</code>的<code>row</code>和<code>column</code>参数需要基于1的索引,但是您同时传递一个元组(<code>worksheet.rows</code>和{<cd5>}每个都返回一个元组的元组)。在</p>
<p>你几乎没有选择:</p>
<ol>
<li><p>利用<code>workbook.rows</code>逐行迭代工作表并为每行返回一个单元格元组这一事实。这也为您节省了对<code>worksheet.cell</code>的调用:</p>
<pre><code>for row in worksheet.rows:
for cell in row:
print(cell.value)
</code></pre>
<p>相同,但按列:</p>
<pre><code>worksheet = workbook.active
for column in worksheet.columns:
for cell in column:
print(cell.value)
</code></pre></li>
<li><p>使用<code>max_row</code>和<code>max_column</code>获取此工作表中使用的最大行和列的索引(基于1),然后使用<code>range</code>对它们进行迭代(同时记住,默认情况下<code>range</code>是从零开始且互斥的:</p>
<pre><code>for row in range(1, worksheet.max_row + 1):
for col in range(1, worksheet.max_column + 1):
cell = worksheet.cell(row = row, column = col)
print(cell.value)
</code></pre></li>
<li><p>使用<code>worksheet.get_cell_collection</code>获得一个包含所有使用单元格的iterable,省去了显式调用<code>worksheet.cell</code>的需要。
<br/><strong>这种方法的问题是返回的iterable的顺序是任意的</strong>:</p>
<pre><code>for cell in worksheet.get_cell_collection():
print(cell.value)
</code></pre></li>
</ol>