Excel To DataTable - 添加一个附加列F1

时间:2013-11-19 10:21:04

标签: c# asp.net excel

我正在将excel记录加载到数据表中。当此表绑定到gridview时,我会看到另一列“F1”以及另一个包含空数据的行。我该如何防止这种情况。

例如,Excel工作表包含以下记录:

Name L1 L2    
abc   2 4
def   3 3

当绑定到网格视图时,我将其视为附加列(F1)和行(3)

S.No Name L1 L2 F1    
1     abc  2  4
2     def  3  3
3 

ASPX:

<asp:GridView ID="gv" runat="server" AutoGenerateColumns="true">    
 <columns>    
   <asp:TemplateField HeaderText="S.No">    
    <ItemTemplate>    
      <%#Container.DataItemIndex+1%>    
    </ItemTemplate>    
   </asp:TemplateField>    
 </columns>    
</asp:GridView>

C#

DataTable dtExcel = new DataTable();    
DataTable dt = new DataTable();    
OleDbConnection conn = new OleDbConnection(connString);    
conn.Open();     
 dtExcel = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);    
 string qry = "select * from [Sheet1$]";    
 OleDbDataAdapter da = new OleDbDataAdapter(qry,conn);    
 da.Fill(dt);    
 conn.Close();    
 gv.DataSource=dt;    
 gv.DataBind();

只是删除最后一栏是一个好方法。为什么它首先出现。 另一种选择是删除DataTable中名为“F1”的列,但如果它也可能是L1,L2等原始列之一的名称,那该怎么办。

1 个答案:

答案 0 :(得分:1)

只需使用您需要的列更新select语句,并确保它们在Excel文件中可用:

 string qry = "select [L1], [L2] from [Sheet1$]"; 

动态查询更新

  //if you have muliple condition then use StringBuilder class 
   //for making column list

        string strColumns=string.Empty;
        if(CoditionForL1)
        {
            strColumns =strColumns+ "[L1] ,";
        }

        if (ConditionForL2)
        {
            strColumns = strColumns + "[L2],";
        }

   string qry = "select "+(strColumns= strColumns.TrimEnd(','))+" from [Sheet1$]";