2017-01-27 23 views
0

我正在做一個asp.net網站,它顯示了從Excel文件的DataTable上傳如何讀取select語句到C#的DataTable

我想從Excel中columnns「城」 comparise的名稱和「ClienteProveedr」與同名的表(這些表來自sql服務器數據庫),所以我想顯示數據表區中的兩個數據表中的id。

這是一個示例代碼,我正在做的。

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack && Upload.HasFile) 
     { 
      if (Path.GetExtension(Upload.FileName).Equals(".xlsx")) 
      { 
       var excel = new ExcelPackage(Upload.FileContent); 
       var Facturas = excel.ToDataTable(); 

       //fix ClienteProveedor 
       Facturas.Columns.Add("Proveedor", typeof(Int32)); 
       Facturas.Columns.Add("MasivoFacturacion_Solicitantes", typeof(Int32)); 
       Facturas.Columns.Add("MasivoFacturacion_Empresa", typeof(Int32)); 
       Facturas.Columns.Add("MasivoFacturacion_EmpresaMensajeria", typeof(Int32)); 
       Facturas.Columns.Add("idCiudad", typeof(Int32)); 
       Facturas.Columns.Add("MasivoFacturacion_ClienteProveedor", typeof(Int32)); 
       foreach (DataRow rw in Facturas.Rows) 
       { 
        rw["Proveedor"] = Responsable.SelectedIndex; 
        rw["MasivoFacturacion_Solicitantes"] = DropDownListSolicitantes.SelectedIndex + 1; 
        rw["MasivoFacturacion_Empresa"] = DropDownListEmpresa.SelectedIndex + 1; 
        rw["MasivoFacturacion_EmpresaMensajeria"] = DropDownListEmpresaMensajeria.SelectedIndex + 1; 
        rw["MasivoFacturacion_ClienteProveedor"] = /*row for IdClienteProveedor*/; 
        rw["MasivoFacturacion_ClienteProveedor"] = /*row for IdCIudad*/; 
       } 
       gvData.DataSource = Facturas; 
       gvData.DataBind(); 
       ViewState["dtFacturas"] = Facturas; 

      } 
     } 
    } 
+0

excel.ToDataTable返回什麼?它實際上是一個DataTable嗎?如果是這樣,您不需要手動添加列並循環遍歷行。只需設置數據源並將其綁定即可。 –

+0

是的,excel.ToDataTable方法從exce文件導入數據到數據表 –

回答

0
private DataTable ReadExcelFile(string sheetName, string path) 
{ 

using (OleDbConnection conn = new OleDbConnection()) 
{ 
DataTable dt = new DataTable(); 
string Import_FileName = path; 
string fileExtension = Path.GetExtension(Import_FileName); 
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Import_FileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;'"; 
using (OleDbCommand comm = new OleDbCommand()) 
{ 
    comm.CommandText = "Select * from [" + sheetName + "$]"; 

    comm.Connection = conn; 

    using (OleDbDataAdapter da = new OleDbDataAdapter()) 
    { 
     da.SelectCommand = comm; 
     da.Fill(dt); 
     return dt; 
    } 

} 
} 

您可以使用上面的代碼讀取EXCEL導入數據表,從數據表中就可以得到所需的列。

0

由於你的方法返回一個DataTable,所以你可以使這個簡單得多。像這樣的東西應該非常接近你需要的東西。

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack && Upload.HasFile) 
     { 
      if (Path.GetExtension(Upload.FileName).Equals(".xlsx")) 
      { 
       DataTable Facturas = new ExcelPackage(Upload.FileContent).ToDataTable(); 
       gvData.DataSource = Facturas; 
       gvData.DataBind(); 
       ViewState["dtFacturas"] = Facturas; 
      } 
     } 
    }