title: Import xlsx file into Python using xlrd
body: <p>Trying to import a .xlsx file into Python. I've google and google. I had this code written and working for .csv but it needs to be for .xlsx files. So I basically pieced together and did a hail mary in hopes that it would work. Any and all help is greatly appreciated!</p>
  
  <p>** Added my whole code and a snippet of the data file. I need it to import .xlsx and execute the data.</p>
  
  <pre><code>import xlrd
  
  workbook = xlrd.open_workbook('GAT_US_PartReview_2017-06-23.xlsx')
  
  worksheet = workbook.get_sheet(0, update_pos=True)
  
  header = []
  report_card = []
  
  # Count Stmnts for Required Data
  valid_count = 0
  app_req_count = 0
  intr_req_count = 0
  oe_intr_req_count = 0
  part_img_req_count = 0
  upc_req_count = 0
  unspsc_req_count = 0
  msds_req_count = 0
  
  # Count Stmts for Missing Data
  missing_app_count = 0
  missing_intr_count = 0
  missing_oe_intr_count = 0
  missing_mpcc_count = 0
  missing_attr_values_count = 0
  missing_part_img_count = 0
  missing_upc_count = 0
  missing_warr_text_count = 0
  missing_warr_pdf_count = 0
  missing_unspsc_count = 0
  missing_msds_count = 0
  
  
  for row_num, row in enumerate(worksheet):
      if row_num &lt;= 4:
          #  print(row)  # Print out the header
          header.append([row[0], row[2]])
      else:
          hq_line, part_no, part_class, appl_req, appl_count, intr_req, 
          intr_count, oe_intr_req, has_oe_intr, has_attr_editor, 
          has_attr_values, part_img_req, has_part_img, has_mpcc, warr_req, 
          has_warr_txt, has_warr_pdf, msds_req, has_msds, upc_req, has_upc, 
          has_unspsc, attr_count, attrval_count, valid_part = row
  
      if valid_part == 'YES':
          valid_count += 1
  
          # Required Parts Count
          if appl_req == 'YES':
              app_req_count += 1
          if intr_req == 'YES':
              intr_req_count += 1
          if oe_intr_req == 'YES':
              oe_intr_req_count += 1
          if part_img_req == 'YES':
              part_img_req_count += 1
          if upc_req == 'YES':
              upc_req_count += 1
          if msds_req == 'YES':
              msds_req_count += 1
  
          # Missing Data Counts
          if appl_req == 'YES' and appl_count == '0':
              missing_app_count += 1
          if intr_req == 'YES' and intr_count == '0':
              missing_intr_count += 1
          if oe_intr_req == 'YES' and has_oe_intr == '0':
               missing_oe_intr_count += 1
          if has_mpcc == 'NO':
               missing_mpcc_count += 1
          if has_attr_values == 'NO':
              missing_attr_values_count += 1
          if has_part_img == 'NO':
              missing_part_img_count += 1
          if upc_req == 'YES' and has_upc == '0':
              missing_upc_count += 1
          if warr_req == 'YES' and has_warr_txt == 'NO':
              missing_warr_text_count += 1
          if warr_req == 'YES' and has_warr_pdf == 'NO':
              missing_warr_pdf_count += 1
          if has_unspsc == 'NO':
              missing_unspsc_count += 1
          if msds_req == 'YES' and has_msds == 'NO':
              missing_msds_count += 1
  
  # Statements for Required Counts
  valid_parts = ('Number of Valid Parts: ', '{:,}'.format(valid_count))
  application_required = ('Application Records Required: ', 
  '{:,}'.format(app_req_count))
  interchange_required = ('Interchange Records Required: ', 
  '{:,}'.format(intr_req_count))
  oe_interchange_required = ('OE Interchange Records Required: ', 
  '{:,}'.format(oe_intr_req_count))
  mpcc = ('MPCC Required: ', '{:,}'.format(valid_count))  # Every valid part 
  requires a MPCC
  attributes = ('Attributes Required: ', '{:,}'.format(valid_count))  # Every 
  valid part requires attributes
  image_required = ('Image Required: ', '{:,}'.format(part_img_req_count))
  upc = ('UPC Requited: ', '{:,}'.format(upc_req_count))
  warranties = ('Warranty Text/PDF Required: ', '{:,}'.format(valid_count))  # 
  Require warranty text/pdf on all parts
  unspsc = ('UNSPSC Code Required: ', '{:,}'.format(valid_count))  # Require 
  UNSPSC Codes for all parts
  msds = ('MSDS Required: ', '{:,}'.format(msds_req_count))
  
  # Statements for Missing Counts
  missing_applications = ('Missing Applications: ', 
  '{:,}'.format(missing_app_count))
  missing_interchange = ('Missing Interchange: ', 
  '{:,}'.format(missing_intr_count))
  missing_oe_interchange = ('Missing OE Interchange: ', 
  '{:,}'.format(missing_oe_intr_count))
  missing_mpcc = ('Missing MPCC: ', '{:,}'.format(missing_mpcc_count))
  missing_attributes = ('Missing Attributes: ', 
  '{:,}'.format(missing_attr_values_count))
  missing_image = ('Missing Image: ', '{:,}'.format(missing_part_img_count))
  missing_UPC = ('Missing UPC: ', '{:,}'.format(missing_upc_count))
  missing_warranty_text = ('Missing Warranty Text: ', 
  '{:,}'.format(missing_warr_text_count))
  missing_warranty_pdf = ('Missing Warranty PDF: ', 
  '{:,}'.format(missing_warr_pdf_count))
  missing_unspsc = ('Missing UNSPSC Code: ', 
  '{:,}'.format(missing_unspsc_count))
  missing_msds = ('Missing MSDS: ', '{:,}'.format(missing_msds_count))
  
  # CSV Output
  report_card.append(valid_parts)
  report_card.append(application_required)
  report_card.append(interchange_required)
  report_card.append(oe_interchange_required)
  report_card.append(mpcc)
  report_card.append(attributes)
  report_card.append(image_required)
  report_card.append(upc)
  report_card.append(warranties)
  report_card.append(unspsc)
  report_card.append(msds)
  report_card.append(missing_applications)
  report_card.append(missing_interchange)
  report_card.append(missing_oe_interchange)
  report_card.append(missing_mpcc)
  report_card.append(missing_attributes)
  report_card.append(missing_image)
  report_card.append(missing_UPC)
  report_card.append(missing_warranty_text)
  report_card.append(missing_warranty_pdf)
  report_card.append(missing_unspsc)
  report_card.append(missing_msds)
  
  for row in header:
      print(row)
  
  for x in report_card:
      print(x)
  
  
  
  with open('Report_Card.csv', 'w', newline='') as f:
      writer = csv.writer(f)
      writer.writerows(header)
      writer.writerows(report_card)
  </code></pre>
  
  <p>CSV file:</p>
  
  <pre><code>Supplier Line:,,Gates Rubber - Denver (GAT),,,,,,,,,,,,,,,,,,,,,,
  Summary:,,Parts HQ Abbr,,,,,,,,,,,,,,,,,,,,,,
  ACCT No:,,40013586,,,,,,,,,,,,,,,,,,,,,,
  RecCount:,,10221,,,,,,,,,,,,,,,,,,,,,,
  Applicable Date:,,"June 14, 2017 (Wednesday)",,,,,,,,,,,,,,,,,,,,,,
  ,,,,,,,,,,,,,,,,,,,,,,,,
  HQ Line,Part No,Part Class,Appl Req,Appl Count ,Intr Req,Intr Count ,OE Intr Req,Has OE Intr,Has Attr Editor, Has Attr Values,Part IMG Req,Has Part IMG,Has MPCC,Warr Req,Has Warr TXT,Has Warr PDF,MSDS Req,Has MSDS,UPC Req,Has UPC,Has UNSPSC,Attr Count ,AttrVal Count ,Valid Part
  GAT,'27210',S,NO,0,YES,1,YES,NO,YES,YES,YES,YES,YES,YES,YES,YES,NO,NO,YES,YES,YES,30,13,YES
  GAT,'27211',O,NO,0,YES,1,YES,NO,YES,YES,YES,YES,YES,YES,YES,YES,NO,NO,YES,YES,YES,30,14,YES
  GAT,'27212',S,NO,0,YES,1,YES,NO,YES,YES,YES,YES,YES,YES,YES,YES,NO,NO,YES,YES,YES,30,13,YES
  GAT,'27213',S,NO,0,YES,1,YES,NO,YES,YES,YES,YES,YES,YES,YES,YES,NO,NO,YES,YES,YES,30,13,YES
  GAT,'27220',S,NO,0,YES,2,YES,NO,YES,YES,YES,YES,YES,YES,YES,YES,NO,NO,YES,YES,YES,35,20,YES
  GAT,'27221',S,NO,0,YES,2,YES,NO,YES,YES,YES,YES,YES,YES,YES,YES,NO,NO,YES,YES,YES,35,20,YES
  </code></pre>