Processing and creating Excel documents using Python

Excel sheets may be a boon to store and access data but can become a burden, especially when the amount of data to manage goes beyond human limits and the job is mundane. Why not automate our tasks? Let’s look at a way using python. Other applications are processing a job for a lot of entries without any manual intervention

The libraries to look at are xlrd and xlwt-
xlrd helps to read data from spreadsheets
xlwt helps to write/format data

First, we will start with the glossary- An excel document is a Workbook, a sheet inside an excel document is called a Worksheet. Rows and columns are numbered from 0, ie the row and column number in these libraries will be 1 less than the actual number in the spreadsheet software e.g. Microsoft Word

Let’s first start with xlrd

  import xlrd

Now let’s open a workbook and a worksheet

  Book = xlrd.open_workbook( 'foobar.xls' )    
  WorkSheet = Book.sheet_by_name( 'Sheet 1' )

We can get the total number of filled rows using

  num_row = WorkSheet.nrows-1

Note that I am using a -1 from the number of rows since the first row starts from 0

Now, we can iterate over the rows and get the desired data:

  row = 0
  while row < num_row:
      value = WorkSheet.cell_value( row, 2 )  //Get the 3rd column 
      row += 1    
      // Do something here    

Now, let’s go to editing or processing documents.

  import xlwt

Open a new workbook and add a new sheet to it

  outbook = xlwt.Workbook() 
  sheet = outbook.add_sheet( "test" )

Now, we can write to the sheet using

  sheet.write( row, col, value )

We can also add some style to the cell. This is how to add a foreground color to the cell:

  style = xlwt.easyxf( 'pattern: pattern solid, fore_colour red;' )
  sheet.write( row, col, value ,style )

I faced this error while applying styles

   ValueError: More than 4094 XFs (styles)
   

Here is a quick fix. Initialize the workbook using

  outbook = xlwt.Workbook( style_compression = 2 )

Finally save this sheet using

  outbook.save( "foo_out.xls" )

Have a great day 🙂

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s