using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.OleDb; namespace SyncCardService { public class ExcelReader { private string filePath; private string fileName; private OleDbConnection conn; private DataTable readDataTable; private string connString; private FileType fileType = FileType.noset; public ExcelReader() { } private void SetFileInfo(string path) { filePath = path; fileName = this.filePath.Remove(0, this.filePath.LastIndexOf("\\") + 1); switch (fileName.Split('.')[1]) { case "xls": connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; fileType = FileType.xls; break; case "xlsx": connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'"; fileType = FileType.xlsx; break; case "csv": connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath.Remove(filePath.LastIndexOf("\\") + 1) + ";Extended Properties='Text;FMT=Delimited;HDR=YES;'"; fileType = FileType.csv; break; } } public DataTable ReadFile(string path) { if (System.IO.File.Exists(path)) { SetFileInfo(path); OleDbDataAdapter myCommand = null; DataSet ds = null; using (conn = new OleDbConnection(connString)) { conn.Open(); DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); string tableName = fileType == FileType.csv ? fileName : schemaTable.Rows[0][2].ToString().Trim(); string strExcel = string.Empty; strExcel = "Select * From [" + tableName + "]"; myCommand = new OleDbDataAdapter(strExcel, conn); ds = new DataSet(); myCommand.Fill(ds, tableName); readDataTable = ds.Tables[0]; } } return readDataTable; } private enum FileType { noset, xls, xlsx, csv } } }