使用openpyxl格式化xlsx(数字格式,适合文本并缩小文本)

时间:2019-02-28 16:04:39

标签: python openpyxl xlsx

我想使用INSERT INTO [dbo].[TestTable] ([Column_A], [Column_B], [Column_C], [Column_D]) SELECT A.[Int. Q1 (A)], A.[Int. Q2 (B)], A.[Int. Q3 (C)], A.[Int. Q4 (D)] FROM OPENROWSET ('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Directory\Quantities\TestFile.xlsx;HDR=YES', 'select * from [Sheet$]') AS A; (不要使用其他库)通过以下代码编辑xlsx:

openpyxl

这是结果:

enter image description here

我想要的是

  1. 用逗号样式(千位分隔符)格式化第2、3列中的数字,并减少为无小数。我在代码中使用了from openpyxl import Workbook book = Workbook() sheet = book.active rows = [['name', 'This is number1', 'This is number2', 'longstr'], ['a', 312318.231, -2312.2, 'aaaaaaaaaaaa\naaaaaaaaaaaa\naaaaaaaaaaaa'], ['a', 312318.231, -2312.2, 'aaaaaaaaaaaa\naaaaaaaaaaaa\naaaaaaaaaaaa'] ] for row in rows: sheet.append(row) book.save('text.xlsx') ,但是xlsx中的输出变成了一个字符串。

  2. 让单元格适合第1、2、3列的文本

  3. 缩小文本以适合第4列的单元格(不适用于标题)。在excel中,操作是 "{:,.0f}".format()

enter image description here

上面是简化的示例,在实际情况下,我们有数千行和已知的列数(例如4列)。

我是Format Cells -> Alignment -> Shrink to fit的新手,您可以帮助我实现目标吗?

2 个答案:

答案 0 :(得分:0)

列格式

要在Excel中控制数字显示格式,请按以下方式设置单元格属性:

cell.number_format = "0.0000" # 4 decimal places

列宽

设置宽度类似,但是作为列属性:

sheet.column_dimensions['A'].width = 12.5

不幸的是,您需要手动计算宽度,没有很好的方法来做到这一点。我发现an example on the web列出了Calibri 11字体的所有宽度指标(Excel中的默认值)。您可以看看那里的列宽是如何计算的。

答案 1 :(得分:0)

适合收缩...

from openpyxl.styles import Alignment

ws['A1'].alignment = Alignment(shrinkToFit=True, horizontal='center')

...应该这样做。