2015-10-07 142 views
-1

我搜索了官方文档,但它专注于创建Excel文件而不是阅读。任何代码片段作为例子都会帮助我!从Excel文件中读取数据

如何读取Excel数据?

COMPANY  | DOCUMENT | 
COMPANYONE | 123455986 | 
COMPANYTWO | 123455986 | 
COMPANYTHREE| 123455986 | 
+1

你想用你读的数据做什么?你已经尝试了哪些方法?在任何人都可以真正回答你的问题之前,我们需要更好地了解你想要做的事情。 – ScruffMcGruff

+0

只是读取Excel文件的一个简单示例,请参阅这个[question](http://stackoverflow.com/questions/11685204/reading-excel-spreasheet-using-epplus) – peteb

+0

只是读取电子表格数据,其中包含客户将不得不咨询这些客户信息,没有必要在数据库中创建记录。 – stringnome

回答

1

这里是将读取CSV和Excel数据,并通过返回的NuGet作为数据表

注意 - 安装 - 包ExcelDataReader

using Excel; 
using System; 
using System.Collections.Generic; 
using System.Data; 
using System.IO; 
using System.Text; 

public static DataTable LoadDataTable(string filePath) 
     { 
      string fileExtension = Path.GetExtension(filePath); 
      switch (fileExtension.ToLower()) 
      { 
       case ".xlsx": 
        return ConvertExcelToDataTable(filePath, true); 
       case ".xls": 
        return ConvertExcelToDataTable(filePath); 
       case ".csv": 
        return ConvertCsvToDataTable(filePath); 
       default: 
        return new DataTable(); 
      } 

     } 


public static DataTable ConvertExcelToDataTable(string filePath, bool isXlsx = false) 
     { 
      FileStream stream = null; 
      IExcelDataReader excelReader = null; 
      DataTable dataTable = null; 
      stream = File.Open(filePath, FileMode.Open, FileAccess.Read); 
      excelReader = isXlsx ? ExcelReaderFactory.CreateOpenXmlReader(stream) : ExcelReaderFactory.CreateBinaryReader(stream); 
      excelReader.IsFirstRowAsColumnNames = true; 
      DataSet result = excelReader.AsDataSet(); 
      if (result != null && result.Tables.Count > 0) 
       dataTable = result.Tables[0]; 
      return dataTable; 
     } 

public static DataTable ConvertCsvToDataTable(string filePath) 
     { 
      DataTable dt = new DataTable(); 
      using (StreamReader sr = new StreamReader(filePath)) 
      { 
       string[] headers = sr.ReadLine().Split(','); 
       foreach (string header in headers) 
       { 
        dt.Columns.Add(header); 
       } 
       while (!sr.EndOfStream) 
       { 
        string[] rows = sr.ReadLine().Split(','); 
        DataRow dr = dt.NewRow(); 
        for (int i = 0; i < headers.Length; i++) 
        { 
         dr[i] = rows[i]; 
        } 
        dt.Rows.Add(dr); 
       } 

      } 
      return dt; 
     } 
2

或者使用Excel互操作的方法:

using Microsoft.Office.Interop.Excel; 

...

 Microsoft.Office.Interop.Excel.Application xl = new Microsoft.Office.Interop.Excel.Application(); 
     Microsoft.Office.Interop.Excel.Workbook workbook = xl.Workbooks.Open(@"C:\test.xlsx"); 
     Microsoft.Office.Interop.Excel.Worksheet sheet = workbook.Sheets[1]; 


     int numRows = sheet.UsedRange.Rows.Count; 
     int numColumns = 2;  // according to your sample 

     List<string[]> contents = new List<string[]>(); 
     string [] record = new string[2]; 

     for (int rowIndex = 1; rowIndex <= numRows; rowIndex++) // assuming the data starts at 1,1 
     { 
      for (int colIndex = 1; colIndex <= numColumns; colIndex++) 
      { 
       Range cell = (Range)sheet.Cells[rowIndex, colIndex]; 
       if (cell.Value != null) 
       { 
        record[colIndex-1] = Convert.ToString(cell.Value); 
       } 
      } 
      contents.Add(record); 
     } 

     xl.Quit(); 
     Marshal.ReleaseComObject(xl); 
2

前段时间我有同样的问题。

我使用此解决方案从ASP.NET中的Excel文件(.xls)读取数据:http://www.dotnetcurry.com/ShowArticle.aspx?ID=138

只需通过SQL读取范围并将其发布到网页上的GridView中即可。

它让我更容易理解ASP.NET/C#开发者的经验。