I want to change the format of the contents in an Excel workbook.
Environment: Win 7; Python 2.76
I want to change the columns A, B and C to the desired format. What I have is:
from openpyxl import Workbook
from openpyxl import load_workbook
wb = load_workbook('c:\\oldfile.xls')
ws = wb.active
d = ws.cell(column = 0) # or 1, 2, 3
d.style = Style(font=Font(bold=False),
borders=Borders(left=Border(border_style='none'),
right=Border(border_style='none'),
top=Border(border_style='none'),
bottom=Border(border_style='none')),
color=Color(Color.RED))
wb.save('c:\\oldfile.xls')
Obviously the way indicating the columns is wrong. so my questions are:
- How to change the formats of the contents in a whole column?
- As “openpyxl” only deals with formats of .xlsx and .xlsm, how can I have the formats changed if the original files are .xls (with converting the files into .xlsx)?
Thanks.
this is using 'easyxf' however it formats all the contents
import xlwt
from xlrd import open_workbook
from xlutils.copy import copy
from xlwt import easyxf
old_file = open_workbook('c:\\oldfile.xls',formatting_info=True)
old_sheet = old_file.sheet_by_index(0)
new_file = copy(old_file)
new_sheet = new_file.get_sheet(0)
style = easyxf('font: bold false;'
'borders: left no_line, right no_line, top no_line, bottom no_line;'
'font: color red')
row_data = []
for row_index in range(old_sheet.nrows):
rows = old_sheet.row_values(row_index)
row_data.append(rows)
for row_index, row in enumerate(row_data):
for col_index, cell_value in enumerate(row):
new_sheet.write(row_index, col_index, cell_value, style)
new_file.save('c:\\newfile.xls')
#and to use os.rename and remove to make it looked like only worked on 1 file
well, found actually just indicated the columns need to be formatted in the writing, it can be done.
putting them together for it may be useful:
I don't know of any Python utility that will convert
.xls
files to.xlsx
. You could simply combine the two libraries: read withxlrd
and write withopenpyxl
orxlsxwriter
.openpyxl
does support formatting entire columns and rows with theColumnDimension
andRowDimension
objects.