我有一个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"从文件中做一个比较方法,看看它们是否匹配。有什么帮助吗?
答案 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;