如何阅读excel文件?

时间:2015-05-13 17:57:26

标签: c# excel datatable

我有一个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);

我想只得到价值"约翰"和#34; Sara"从文件中做一个比较方法,看看它们是否匹配。有什么帮助吗?

2 个答案:

答案 0 :(得分: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

编辑: 您可以使用以下代码按属性对元素进行排序:

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;

编辑2: 我不确定你的意思......你不知道如何比较物体?您的Excel工作表将映射到对象列表 - 在此示例中,对象列表类型为Person。列表中的元素匹配行,因此ppl [0]是第一行,ppl [1]第二行等(当然在排序之前,排序之后,顺序是不同的)。 要比较对象,您可以使用Equal方法(您可以定义自己的比较对象的方式并在课堂上实现IEquatable - 更多https://msdn.microsoft.com/pl-pl/library/ms131190(v=vs.110).aspx

答案 1 :(得分:0)

我首先建议最快和最简单的答案是第三列中的公式,如=IF(A1=A2,"Match","No-Match"(Psuedo-code)。因此,这将是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;