2015-05-13 2 views
-1

У меня есть файл первенствовать, который выглядит следующим образом:Как читать файл Excel?

first Name  last Name 
John    Doe 
Sara    Boo 

      string PATH = Directory.GetFiles(@"C:\file.xls); 
     string connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + PATH + ";Extended Properties=Excel 12.0"; 



     OleDbConnection objConn = new OleDbConnection(connection); 
     OleDbCommand objCmd = new OleDbCommand(string.Format(@"Select * From [Sheet1$A1:A43]"), objConn); 
     OleDbDataAdapter objDatAdap = new OleDbDataAdapter(); 
     objDatAdap.SelectCommand = objCmd; 
     DataSet ds = new DataSet(); 
     objDatAdap.Fill(ds); 

Я хочу, чтобы получить только значение «Джон» и «Сара» из файла и сделать метод сравнения на нем, чтобы видеть, что они совпадают или нет. любая помощь?

+0

Если вы читаете данные в виде данных, вы, вероятно, можете посмотреть на первую ячейку каждой строки ценность, которую я подозреваю. –

+1

Существует буквально сотни существующих вопросов (и ответов) здесь о чтении файлов Excel из C#. Вы искали какой-либо из них и приложили все усилия, чтобы понять это? Найдите '[C#], чтобы прочитать файлы excel'. –

+0

Когда-либо слышал о Linq к Excel. см [Сформировать список объектов, которые непосредственно представляет собой лист Excel] [1] [1]: http://stackoverflow.com/questions/29482949/create-a-list-of -objects-that-direct-presents-a-excel-sheet –

ответ

1

Вы можете использовать, например, библиотеки LinqToExcel (https://github.com/paulyoder/LinqToExcel - или NuGet) И используйте linq для сравнения.

Класс для отображения

public class Person 
{ 
    public string Name { get; set; } 
    public string Surname { get; set; } 
} 

И пример использования библиотеки

var excel = new ExcelQueryFactory("e.xlsx");//file name 
excel.AddMapping<Person>(p => p.Name, "First Name");//mapping property to column 
excel.AddMapping<Person>(p => p.Surname, "Last Name");//mapping property to column 
var ppl = excel.Worksheet<Person>("Arkusz1").ToList();//Workspace name as parameter 
var areTheSame = ppl.All(p => p.Name == ppl.First().Name);// Are all equal to first element 

Edit: Вы можете отсортировать элементы по недвижимости с помощью этого кода:

var ppl = excel.Worksheet<Person>("Arkusz1").OrderBy(p => p.Name).ToList();//Workspace name as parameter, sort by Name and return as list 

И в сравнить первый и второй элемент, вы можете просто использовать это:

var areTheSame = ppl[0].Name == ppl[1].Name; 

EDIT 2: Я не уверен, что вы имеете в виду ... вы не знаете, как сравнивать объекты? Ваша таблица excel отображается в список объектов - в этом примере список объектов типа Person. Элементы в списке соответствуют строкам, поэтому ppl [0] - первая строка, ppl [1] вторая строка и т. Д. (Конечно, перед сортировкой после сортировки порядок отличается). Для сравнения объектов вы можете использовать метод Equal (вы можете определить свой собственный способ сравнения объектов и реализовать IEquatable в классе - здесь здесь https://msdn.microsoft.com/pl-pl/library/ms131190(v=vs.110).aspx)

+0

Я хочу отсортировать столбец Имя и сравнить имя со вторым именем в этой COLUMN. как это сделать? – NewKidOnTheBlock

+0

Как я могу сравнить целую строку с другой строкой? – NewKidOnTheBlock

+0

Я получаю эту ошибку после загрузки excel. System.Data.OleDb.OleDbException (0x80040E57): Это поле слишком мало, чтобы принять сумму данных, которые вы пытались добавить. Попробуйте вставить или вставить меньше данных. – NewKidOnTheBlock

0

Вначале я предлагаю самый быстрый и простой ответ, который будет формулой в третьем столбце, например, =IF(A1=A2,"Match","No-Match" (Псевдо-код). Таким образом, это было бы решением в Excel без необходимости использования C#.

В противном случае лучший способ, который я нашел для этого, - сохранить файл как .csv, а затем использовать стандартный код C# для этого.

На самом деле ответить на ваш вопрос непосредственно вы можете запросить файлы Excel в качестве источника данных, пример кода взят из предыдущего ответа (Query excel sheet in c#):

OleDbConnection con = new OleDbConnection(
       "provider=Microsoft.Jet.OLEDB.4.0;data source=" 
       + XLS_FILE_NAME_AND_PATH_HERE 
       + ";Extended Properties=Excel 8.0;"); 

      StringBuilder stbQuery = new StringBuilder(); 
      stbQuery.Append("SELECT * FROM [" + SHEETNAME_HERE + "$A1:D1]"); 
      OleDbDataAdapter adp = new OleDbDataAdapter(stbQuery.ToString(), con); 

      DataSet dsXLS = new DataSet(); 
      adp.Fill(dsXLS); 

      DataView dvEmp = new DataView(dsXLS.Tables[0]); 

      dataGridView1.DataSource = dvEmp; 
Смежные вопросы