擅长:python、mysql、java
<p>我最近遇到了同样的问题,这就是我的想法:</p>
<pre><code>r = 0
c = 0
for x in list:
worksheet.set_column('{0}:{0}'.format(chr(c + ord('A'))), len(str(x)) + 2)
worksheet.write(r, c, x)
c += 1
</code></pre>
<p>在我的示例中,<code>r</code>将是您要输出到的行号,<code>c</code>将是您要输出到的列号(均为0索引),而<code>x</code>将是您要在单元格中的<code>list</code>中的值。</p>
<p><code>'{0}:{0}'.format(chr(c + ord('A')))</code>片段获取提供的列号并将其转换为xlsxwriter接受的列字母,因此如果<code>c = 0</code>{<cd7>}将看到<code>'A:A'</code>,如果<code>c = 1</code>,则它将看到<code>'B:B'</code>,依此类推。</p>
<p><code>len(str(x)) + 2</code>部分确定要输出的字符串的长度,然后向其中添加2,以确保excel单元格足够宽,因为字符串的长度与单元格的宽度不完全相关。您可能想玩,而不是添加<code>2</code>或更多取决于您的数据。</p>
<p>xlsxwriter接受的单位有点难以解释。当您在excel中并将鼠标悬停在可以更改列宽的位置时,您将看到<code>Width: 8.43 (64 pixels)</code>。在这个例子中,它接受的单位是<code>8.43</code>,我认为是厘米?但excel甚至没有提供一个单元,至少没有显式地提供。</p>
<p><strong>注意:</strong>我只在包含一行数据的excel文件上尝试过这个答案。如果您将有多行,则需要有一种方法来确定哪一行将具有“最长”信息,并仅将其应用于该行。但是,如果每一列的大小大致相同,而不考虑行数,那么这对您来说应该很好。</p>
<p>祝你好运,我希望这会有帮助!</p>