Write and Format in Excel Sheet by Pandas and openpyxl libraries
In this tutorial, we will show examples of creating a new Excel file by using Python Pandas library.
Along with file creation, we will also format rows/columns in an Excel file by openpyxl library.
- The formatting includes coloring the header row
- Setting the font of rows and columns
- The interior color of rows and columns
- Border color etc.
Step by Step – Creating and formatting
Let us first create an Excel file by Pandas to_excel method based on a data frame that uses a list in Python.
For that, we have a list of Products that we will use for the newly created Excel file.
The program creates an Excel file with data from the list as follows:
import pandas as pd #Creating a list containing Products Information product_list = [ ["p-001", "Wheat", "$3.50", "In Stock"], ["p-003", "Rice", "$5.5", "In Stock"], ["p-004", "Sugar", "$2.0", "In Stock"], ["p-005", "Maze", "$1.5", "Out of Stock"], ["p-006", "Tea Set", "$5.55", "In Stock"], ["p-007", "Dinner Set", "$25.99", "In Stock"], ["p-008", "Rice", "$1.2", "Out of Stock"] ] df_prods = pd.DataFrame (product_list, columns = ['Product ID', 'Product Name', 'Price', 'Status']) #Creating Excel File with Product Information df_prods.to_excel("products.xlsx", index=False, sheet_name = "Products Data")
Output:
Setting the Interior color of the heading row
In this example, we will create the product.xlsx file by using the Pandas to_excel method.
This is followed by applying interior color (background) to the top row by openpyxl library:
import pandas as pd from openpyxl import load_workbook from openpyxl.styles import PatternFill #Creating a list containing Products Information product_list = [ ["p-001", "Wheat", "$3.50", "In Stock"], ["p-003", "Rice", "$5.5", "In Stock"], ["p-004", "Sugar", "$2.0", "In Stock"], ["p-005", "Maze", "$1.5", "Out of Stock"], ["p-006", "Tea Set", "$5.55", "In Stock"], ["p-007", "Dinner Set", "$25.99", "In Stock"], ["p-008", "Rice", "$1.2", "Out of Stock"] ] df_prods = pd.DataFrame (product_list, columns = ['Product ID', 'Product Name', 'Price', 'Status']) #Creating Excel File with Product Information df_prods.to_excel("products.xlsx", index=False, sheet_name = "Products Data") ####### #Appling formatting to header row by openpyxl ####### #Loading the Workbook wb_style_prod = load_workbook('products.xlsx') #Accessing Product Informaiton Sheet sheet = wb_style_prod.active #Setting background heading row only for rows in sheet.iter_rows(min_row=1, max_row=1, min_col=None): for cell in rows: cell.fill = PatternFill(start_color="80FF00", end_color="80FF00",fill_type = "solid") wb_style_prod.save("products.xlsx")
Result:
Applying border colors to odd rows example
Again, we will create the Excel file by Pandas – based on list data and then apply the borders to odd rows.
The code:
import pandas as pd from openpyxl import load_workbook from openpyxl.styles import Border, Side #Creating a list containing Products Information product_list = [ ["p-001", "Wheat", "$3.50", "In Stock"], ["p-003", "Rice", "$5.5", "In Stock"], ["p-004", "Sugar", "$2.0", "In Stock"], ["p-005", "Maze", "$1.5", "Out of Stock"], ["p-006", "Tea Set", "$5.55", "In Stock"], ["p-007", "Dinner Set", "$25.99", "In Stock"], ["p-008", "Rice", "$1.2", "Out of Stock"] ] df_prods = pd.DataFrame (product_list, columns = ['Product ID', 'Product Name', 'Price', 'Status']) #Creating Excel File with Product Information df_prods.to_excel("products.xlsx", index=False, sheet_name = "Products Data") ####### #Appling formatting to header row by openpyxl ####### #Loading the Workbook wb_style_prod = load_workbook('products.xlsx') #Accessing Product Informaiton Sheet sheet = wb_style_prod.active #Specifying border style and color thick = Side(border_style="thick", color="008000") double = Side(border_style="double", color="800000") #Change background color of even rows for rows in sheet.iter_rows(min_row=2, max_row=8, min_col=None): for cell in rows: if cell.row % 2: cell.border = Border(top=thick, left=double, right=double, bottom=thick) wb_style_prod.save("products.xlsx")
Result: