我正在使用python包openpyxl将数据写入excel工作表。我有一个三列的excel文件。我将把数千行数据存入其中。我想要一种风格的特定格式的标题和其他风格的所有数据。我不想迭代所有单元格并专门设置样式,因为每当添加更多数据时,我都必须为它们设置样式。所以我想要创建一个excel模板,通过为标题行应用'style1'和为其余行应用'style2',所以我不必为他们的样式打扰并转储数据。无论如何设置预定义预定义所有样式到表?如何使用openpyxl将excel中的所有单元格格式化为单一样式?
回答
提供一个示例,说明如何使用特定格式格式化一行,然后使用其他格式格式化其余格。
请注意,您将不得不为我以前工作的样式调用保存的工作簿。也就是说,在这个例子中,我创建一个工作簿,保存它,然后加载它并格式化单元格,然后再次保存。
您可以在openpyxl docs section on styles中使用不同格式的一堆示例。
这是一个使用pandas_datareader模块的数据的完全可重复的示例。
import pandas as pd
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import Font
from openpyxl.utils.dataframe import dataframe_to_rows
import pandas_datareader.data as web #optional for example only
#pull in your own dataframe and remove the next two lines if you want to
df = web.DataReader("AMZN", 'google')
df = df.tail(180)
wb = Workbook()
ws = wb.active
for r in dataframe_to_rows(df, index=False, header=True):
ws.append(r)
wb.save("test.xlsx")
wb = load_workbook('test.xlsx')
ws = wb['Sheet']
style_1 = Font(color='0000FF00', bold=True, underline="single", size=15)
style_2 = Font(color='000000FF', italic=True, size=10)
for cell in ws["1:1"]:
cell.font = style_1
for row in ws.iter_rows(min_row=2, max_col=5, max_row=len(df)+2):
for cell in row:
cell.font = style_2
#commented out my original snippet - preferred method recommended by Charlie Clark is ws.iter_rows() - above
'''
for i in range(2, len(df)+2):
current = "%d:%d" % (i, i)
for cell in ws[current]:
cell.font = style_2
'''
wb.save("test.xlsx")
**更新(基于由OP询问格式附加到现有工作表单元评论):
如果要添加更多的这种表以后,你可以做新细胞同时进行格式化。将以下代码片段添加到原始答案中。
wb = load_workbook('test.xlsx')
ws = wb['Sheet']
ws['A182'] = "New String"
for cell in ws["182:182"]:
cell.font = style_1
wb.save("test.xlsx")
我会每天向这张表添加数据,所以每次我转储数据时,都应该再次为这些单元应用样式。很好的解决方法。但是当我创建这个表单并转储数据而不再打扰单元格样式时,我想预先定义所有单元格。可能吗 ? –
我打算在答案中提供更新,希望能够解决此评论。 – patrickjlong1
当设计多个单元格时,我建议使用命名样式。另外,尝试避免使用'ws ['“%d:%d”%(i,i)]',并使用'ws.iter_rows()'或'ws.iter_cols()'代替。 –
- 1. 使用C#格式化Excel工作表。样式适用于所有单元格而不是一个单元格
- 2. Excel格式化单元格
- 3. 复制单元格样式openpyxl
- 4. 格式化Excel中的单元格
- 5. 使用excel将单元格值格式化为“MMMM”
- 6. 如何通过Roo将excel单元格格式化为cell_type [:datetime]?
- 7. Vlookup在Excel中格式化单元格
- 8. 使用openpyxl中新单元格的列样式
- 9. openpyxl中的一个单元格中的多种样式
- 10. 将Excel单元格中的格式化文本转换为HTML
- 11. 使用Microsoft Interop格式化Excel单元
- 12. 在openpyxl中使用Optimized Writer设置单元格格式和样式
- 13. 如何使用jQuery以excel样式复制表格单元格?
- 14. 如何使用.NET将Excel中格式化的单元格复制到Word表格单元格中?
- 15. 如何使用Excel的COM API将单元格格式化为超链接?
- 16. 如何在Excel单元格表达式中格式化货币?
- 17. 如何格式化除选定的单元格外的所有tableview单元格
- 18. VBA将所有单元格格式化为文本
- 19. 样式表格的单元格没有儿童表格的样式单元格
- 20. 如何使用PHPExcel_Reader_HTML格式化Excel单元格
- 21. 如何使用PHP格式化Excel Sheet单元格
- 22. 将现有的Excel单元格式化为不带日期的时间格式
- 23. Excel格式化单元格条件
- 24. 格式化Excel单元格(货币)
- 25. 将openpyxl单元格格式设置为货币
- 26. 如何使用VBA从Excel中的单元格返回所有格式?
- 27. 将'wrap_text'应用到所有使用openpyxl的单元格
- 28. 如何将一个单元格格式复制到该单元格旁边的所有单元格?
- 29. Excel单元格格式
- 30. 如何使用Excel宏模块格式化Excel电子表格单元格?
因为这样的文件格式的作品风格必须始终被应用到单个细胞。命名样式提供了将相同样式应用于多个单元格的最佳方法。 –