See the question and my original answer on StackOverflow

One of the main visible problem is your Excel spreadsheet has sub tables (for example, Cargo Qty). In 'pure' html, this can be done using COLSPAN or ROWSPAN, but with the GridView, it's not that easy, unless you create sub gridviews, like this:

<asp:GridView runat="server" ...>
  <Columns>
    <asp:BoundField HeaderText="MyHeader" DataField="MyField1"... />
    ...
    <asp:TemplateField HeaderText="MySubGridHeader">
      <asp:GridView runat="server" ...> // need to databind this
        <Columns>
          <asp:BoundField HeaderText="MySubHeader1" DataField="MyField2"... />
          <asp:BoundField HeaderText="MySubHeader2" DataField="MyField3"... />
        </Columns>
      </asp:GridView>
    </asp:TemplateField>
  </Columns>
</asp:GridView>

Otherwise I suggest you go for commercial packages which can display advanced grids, such as this one for example: SPREAD (note: I'm not affiliated and I have not tested it).