Before you loop through all the rows in your DataGridView, loop through all the Columns and add the headertext to the ExcelSheet.
With ExcelSheet
For Each column As DataGridViewColumn In DataGridView1.Columns
.cells( 1, column.Index + 1 ) = column.HeaderText
Next
For i = 1 To Me.DataGridView1.RowCount
.cells(i + 1, 1) = Me.DataGridView1.Rows(i - 1).Cells("id").Value
For j = 1 To DataGridView1.Columns.Count - 1
.cells(i + 1, j + 1) = DataGridView1.Rows(i - 1).Cells(j).Value
Next
Next
End With