I've encountered this problem very recently. Unfortunately, I had to do 2 tables, one for the header and one for the body. It's probably not the best approach ever but here goes:
<html>_x000D_
<head>_x000D_
<title>oh hai</title>_x000D_
</head>_x000D_
<body>_x000D_
<table id="tableHeader">_x000D_
<tr>_x000D_
<th style="width:100px; background-color:#CCCCCC">col header</th>_x000D_
<th style="width:100px; background-color:#CCCCCC">col header</th>_x000D_
</tr>_x000D_
</table>_x000D_
<div style="height:50px; overflow:auto; width:250px">_x000D_
<table>_x000D_
<tr>_x000D_
<td style="height:50px; width:100px; background-color:#DDDDDD">data1</td>_x000D_
<td style="height:50px; width:100px; background-color:#DDDDDD">data1</td>_x000D_
</tr>_x000D_
<tr>_x000D_
<td style="height:50px; width:100px; background-color:#DDDDDD">data2</td>_x000D_
<td style="height:50px; width:100px; background-color:#DDDDDD">data2</td>_x000D_
</tr>_x000D_
</table>_x000D_
</div>_x000D_
</body>_x000D_
</html>
_x000D_
This worked for me, it's probably not the elegant way but it does work. I'll investigate so see if I can do something better, but it allows for multiple tables.
Go read on the overflow propriety to see if it fits your need