I've done this before. Here's roughly the code I came up with:
CSS
table th.first-column {
background: url(images/layout/tb_left.png) 0 0 no-repeat;
}
table th {
height: 26px;
background: url(images/layout/tb_bg.png) 0 0 repeat-x;
}
/* Had some issues across browsers just putting the image in the <th>, had to use a span */
table th.last-column span {
display: block;
height: 26px;
background: url(images/layout/tb_right.png) 100% 0 no-repeat;
}
HTML
<table width="100%" cellspacing="0" cellpadding="0">
<thead>
<tr>
<th class="first-column"><span>Column 1</span></th>
<th><span>Column 2</span></th>
<th><span>Column 3</span></th>
<th class="last-column"><span>Column 4</span></th>
</tr>
</thead>
<tbody>
<tr>
...
</tr>
</tbody>
<tfoot>
<tr>
...
</tr>
</tfoot>
</table>
Then just create your images accordingly and everything should be fine. My first and last column images are a few hundred pixels wide with a rounded edge on the left of the first and a rounded edge on the right of the last. The middle background image is just 1x26 pixels and repeats along the x-axis.