You are missing out row 0 in the dbf which is the first row. In dbf files the column names are not a row. However row 0 in the Excel file is the header so the index needs to differ in the dbf and the xls so you need to add 1 to the row used in the Excel worksheet.
So
for row in range(len(dbf)):
for col in range(len(dbf.fieldNames)):
sheet1.row(row+1).write(col, dbf[row][col])
Note the snipper referred to does not add the 1 in the range either