2015-10-16 75 views
0

我想根据我在工作表中指定的标题从Excel工作表中抽取数据。 我使用ClosedXML并使用单元格Number.Below获取数据是我的代码。如何使用字段名称获取excel工作表单元格的值

    FileInfo fi = new FileInfo(path1);  
        //Open uploaded workbook 
        var workBook = new XLWorkbook(fi.FullName); 
        //Get the first sheet of workbook 
        var worksheet = workBook.Worksheet(1); 

        var firstRowUsed = worksheet.FirstRowUsed(); 
        var categoryRow = firstRowUsed.RowUsed(); 

       /Get the column names from first row of excel 
       Dictionary<int, string> keyValues = new Dictionary<int,string>(); 
       for (int cell = 1; cell <= categoryRow.CellCount(); cell++) 
       { 
        keyValues.Add(cell, categoryRow.Cell(cell).GetString()); 
       } 

       //Get the next row 
       categoryRow = categoryRow.RowBelow(); 
       while (!categoryRow.Cell(coCategoryId).IsEmpty()) 
       { 
        int count = 1; 
        var pc = new ExpandoObject(); 
        while (count <= categoryRow.CellCount()) 
        { 
         // let this go through-if the data is bad, it will be rejected by SQL 
         var data = categoryRow.Cell(count).Value; 
         ((IDictionary<string, object>)pc).Add(keyValues[count], data); 
         //((IDictionary<string, object>)pc).Add(keyValues[count], data); 
         fName = categoryRow.Cell(1).Value.ToString(); 
         lName = categoryRow.Cell(2).Value.ToString(); 
         userGender = categoryRow.Cell(3).Value.ToString(); 
         roleTitle = categoryRow.Cell(4).Value.ToString(); 
         mobileNumber = categoryRow.Cell(5).Value.ToString(); 
         CurrentCity = categoryRow.Cell(6).Value.ToString(); 
         country = categoryRow.Cell(7).Value.ToString(); 
         birthDate = DateTime.UtcNow.ToLocalTime();  

这是现在的代码我想提取数据根据Excel工作表的名称,姓氏,城市.... etc.How做字段名。

回答

-1

你可以做到这与OLEDB提取从Excel文件中的数据并将其存储在一个DataTable,并做你想做的,

这里是一个将在数据表格式返回您的Excel文件中的函数

private System.Data.DataTable call() 
    { 
     System.Data.DataTable dt = new System.Data.DataTable(); 
     string FilePath = Server.MapPath("~/Reports/") + Path.GetFileName(FileUpload1.PostedFile.FileName); 
     FileUpload1.SaveAs(FilePath); 
     string extension = Path.GetExtension(FileUpload1.PostedFile.FileName); 

     string conStr = ""; 
     switch (extension) 
     { 
      case ".xls": //Excel 97-03 
       conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'"; 
       break; 

      case ".xlsx": //Excel 07 
       conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'"; 
       break; 
     } 
     conStr = String.Format(conStr, FilePath, "YES"); 
     OleDbConnection connExcel = new OleDbConnection(conStr); 

     OleDbCommand cmdExcel = new OleDbCommand(); 
     OleDbDataAdapter oda = new OleDbDataAdapter(); 

     cmdExcel.Connection = connExcel; 

     connExcel.Open(); 
     System.Data.DataTable dtExcelSchema; 
     dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 
     string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); 
     connExcel.Close(); 

     connExcel.Open(); 


     cmdExcel.CommandText = "SELECT [ColumnName1] , [ColumnName2] From [report$A10:U16384] where [ColumnName1] is not null";//any Condition 
     oda.SelectCommand = cmdExcel; 
     oda.Fill(dt); 
     connExcel.Close(); 


     return dt; 
    } 
+0

oledb的问题是它不能在azure中工作... –

相关问题