Hi pdepirro,
I have modified your code please check.
HTML
<div>
<asp:GridView ID="gvwTestMaint" runat="server" CssClass="table table-condensed table-bordered"
AllowSorting="False" CellPadding="4" ForeColor="#333333" GridLines="None" AutoGenerateColumns="False"
DataKeyNames="TDES_ID" HeaderStyle-HorizontalAlign="Center" AllowPaging="False">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="lnkBtn" runat="server" CommandArgument='<%# gvwTestMaint.Rows.Count.ToString() %>'
Text="Edit">Edit</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="TDES_ID" HeaderText="ID" SortExpression="TDES_ID" ItemStyle-Width="5%" />
<asp:BoundField DataField="TDES_SYSTEM" HeaderText="System" ReadOnly="True" SortExpression="TDES_DESC"
ItemStyle-Width="8%"></asp:BoundField>
<asp:BoundField DataField="TDES_DESC" HeaderText="Description" ReadOnly="True" SortExpression="TDES_DESC"
ItemStyle-Width="30%"></asp:BoundField>
<asp:BoundField DataField="TDES_DETAIL" HeaderText="Detail" ReadOnly="True" SortExpression="TDES_DETAIL"
ItemStyle-Width="40%"></asp:BoundField>
<asp:BoundField DataField="TDES_CREATED_BY" HeaderText="Created By" ReadOnly="True"
SortExpression="TDES_CREATED_BY"></asp:BoundField>
</Columns>
<EditRowStyle BackColor="#2461BF" />
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#EFF3FB" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F5F7FB" />
<SortedAscendingHeaderStyle BackColor="#6D95E1" />
<SortedDescendingCellStyle BackColor="#E9EBEF" />
<SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>
</div>
<asp:Button ID="btnExport" Text="ExportExcel" runat="server" OnClick="btnExport_Click" />
</form>
VB.NET
Protected Sub Page_Load(sender As Object, e As EventArgs)
If Not IsPostBack Then
Me.GetDataItem()
End If
End Sub
Private Sub GetDataItem()
Dim dt As New DataTable()
dt.Columns.Add("TDES_ID", GetType(Integer))
dt.Columns.Add("TDES_SYSTEM", GetType(String))
dt.Columns.Add("TDES_DESC", GetType(String))
dt.Columns.Add("TDES_DETAIL", GetType(String))
dt.Columns.Add("TDES_CREATED_BY", GetType(DateTime))
dt.Rows.Add(1, "TEST", "TEST", "TEST", DateTime.Now)
dt.Rows.Add(2, "TEST", "TEST", "TEST", DateTime.Now)
dt.Rows.Add(3, "TEST", "TEST", "TEST", DateTime.Now)
dt.Rows.Add(4, "TEST", "TEST", "TEST", DateTime.Now)
dt.Rows.Add(5, "TEST", "TEST", "TEST", DateTime.Now)
gvwTestMaint.DataSource = dt
gvwTestMaint.DataBind()
End Sub
Protected Sub btnExport_Click(sender As Object, e As EventArgs)
Response.Clear()
Response.Buffer = True
Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.xls")
Response.Charset = ""
Response.ContentType = "application/vnd.ms-excel"
Using sw As New StringWriter()
Dim hw As New HtmlTextWriter(sw)
gvwTestMaint.AllowPaging = False
Me.GetDataItem()
gvwTestMaint.HeaderRow.BackColor = Color.White
For Each cell As TableCell In gvwTestMaint.HeaderRow.Cells
cell.BackColor = gvwTestMaint.HeaderStyle.BackColor
Next
For Each row As GridViewRow In gvwTestMaint.Rows
row.BackColor = Color.White
For Each cell As TableCell In row.Cells
If row.RowIndex Mod 2 = 0 Then
cell.BackColor = gvwTestMaint.AlternatingRowStyle.BackColor
Else
cell.BackColor = gvwTestMaint.RowStyle.BackColor
End If
cell.CssClass = "textmode"
Next
Next
gvwTestMaint.RenderControl(hw)
'style to format numbers to string
Dim style As String = "<style> .textmode { } </style>"
Response.Write(style)
Response.Output.Write(sw.ToString())
Response.Flush()
Response.[End]()
End Using
End Sub
Public Overrides Sub VerifyRenderingInServerForm(control As Control)
' Verifies that the control is rendered
End Sub
Screenshot

I hope works for you.