这对你们大师来说可能是一件非常简单的事情,但我不熟悉C#4和INTEROP。因此,我很难过。这是我的问题。 我有一个具有重复数据的excel列,我想将其修剪为唯一值。这是数据的样子:
ColA ColB
10 Adam
12 Jane
14 Adam
18 Adam
20 Eve
所以,最后我只想要来自ColB的唯一名字:
Adam
Jane
Eve
我知道我可以通过将所有这些值放入List中然后向其添加Distinct功能来实现此目的。但我认为我做错了什么。无论如何,这是我的计划:
Application XLApp = new Microsoft.Office.Interop.Excel.Application();
var XLBook = XLApp.Workbooks.Open(@"c:\temp\Test.xls", ReadOnly: false);
// Grab the 1st sheet
var XLSheet = (Microsoft.Office.Interop.Excel.Worksheet)XLBook.Worksheets.get_Item(1);
XLApp.Visible = true;
// I think I need help with the following lines
IEnumerable<string> myCol = XLApp.Range["B2", XLApp.Range["B2"].End[XlDirection.xlDown]].Select();
myCol.ToList().Distinct();
XLBook.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
((_Application)XLApp).Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(XLApp);
如何使用C#4对Excel执行此操作?
提前致谢。
答案 0 :(得分:6)
您可以使用LinqToExcel轻松获取列中的不同值
var excel = new ExcelQueryFactory("worksheetFileName");
var distinctNames = (from row in excel.WorkSheet()
select row["ColB"]).Distinct()
编辑:
要在LinqToExcel中使用Distinct
,您必须使用与行数据对应的类。
public class WorksheetRow
{
public string ColA { get; set; }
public string ColB { get; set; }
}
var excel = new ExcelQueryFactory("worksheetFileName");
var distinctNames = (from row in excel.WorkSheet<WorksheetRow>()
select row.ColB).Distinct()
答案 1 :(得分:1)
LinqToExcel内置distinct()支持单个属性。我使用下面的内容来区分多个列:
public struct RowStruct
{
public string C1 {get; set;}
public string C2 {get; set;}
public int C3 {get; set;}
}
public class RowClass // class is NOT distinct friendly
{
public string C1 {get; set;}
public string C2 {get; set;}
public int C3 {get; set;}
}
void Main()
{
var excel = new ExcelQueryFactory(@"C:\Temp\a.xlsx");
var qs = from c in excel.Worksheet<RowStruct>("Sheet1") select c;
Console.WriteLine ("struct distinct is:{0}",
qs.AsEnumerable().Distinct().Count());
var qc = from c in excel.Worksheet<RowClass>("Sheet1") select c;
Console.WriteLine ("class distinct is:{0}",
qc.AsEnumerable().Distinct().Count());
}
我的a.xlsx有重复的数据,这是我的结果:
struct distinct is:235
class distinct is:329
答案 2 :(得分:-2)
在Excel中,选择列,转到.. 数据&gt;删除重复项
这为您留下了独特的价值。