Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Applying borders to a cell in OpenPyxl

I am trying to use Openpyxl to apply a border to a cell, but I have failed on the most basic "apply any kind of border to any cell anywhere" task. I tried copying from the Openpyxl documentation (http://pythonhosted.org/openpyxl/styles.html#introduction) default style and modifying, but that gives me

TypeError:__init__() got an unexpected keyword argument 'superscript' 

I tried copying straight out of another example here (Apply borders to all cells in a range with openpyxl), but that gives me

AttributeError: type object 'Border' has no attribute 'BORDER_THIN' 

(even after I fix the typos and insufficient imports errors).

Does anyone know how to apply borders using Python 3.3 and OpenPyxl 2.0.4? All I'm looking for is a snippet of code that, if I copy-paste it into a blank script, will put a border around any cell in a workbook.

like image 426
user2961794 Avatar asked Jul 23 '14 17:07

user2961794


People also ask

How do I write to a cell in Openpyxl?

Openpyxl write to a cell There are two basic ways to write to a cell: using a key of a worksheet such as A1 or D3, or using a row and column notation with the cell method. In the example, we write two values to two cells. Here, we assing a numerical value to the A1 cell.


2 Answers

With openpyxl version 2.2.5, this snippet works for me:

from openpyxl.styles.borders import Border, Side from openpyxl import Workbook  thin_border = Border(left=Side(style='thin'),                       right=Side(style='thin'),                       top=Side(style='thin'),                       bottom=Side(style='thin'))  wb = Workbook() ws = wb.get_active_sheet() # property cell.border should be used instead of cell.style.border ws.cell(row=3, column=2).border = thin_border wb.save('border_test.xlsx') 

The documentation mentions other values for the style attribute :

Value must be one of {‘double’, ‘dashed’, ‘thin’, ‘medium’, ‘mediumDashDot’, ‘dashDot’, ‘thick’, ‘mediumDashed’, ‘hair’, ‘dotted’, ‘slantDashDot’, ‘mediumDashDotDot’, ‘dashDotDot’}

like image 146
takasu Avatar answered Sep 27 '22 00:09

takasu


With openpyxl version 2.0.4, this snippet works for me:

from openpyxl.styles.borders import Border, Side from openpyxl.styles import Style from openpyxl import Workbook  thin_border = Border(left=Side(style='thin'),                       right=Side(style='thin'),                       top=Side(style='thin'),                       bottom=Side(style='thin')) my_style = Style(border=thin_border)  wb = Workbook() ws = wb.get_active_sheet() ws.cell(row=3, column=2).style = my_style wb.save('border_test.xlsx') 
like image 25
FriendFX Avatar answered Sep 23 '22 00:09

FriendFX