Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LinqToExcel:excel列中的不同值_Linq_C# 4.0_Interop_Excel Interop_Linq To Excel - Fatal编程技术网

LinqToExcel:excel列中的不同值

LinqToExcel:excel列中的不同值,linq,c#-4.0,interop,excel-interop,linq-to-excel,Linq,C# 4.0,Interop,Excel Interop,Linq To Excel,对于你们这些大师来说,这可能是一件非常简单的事情,但我不熟悉C4和互操作。因此,我被难住了。这是我的问题。 我有一个excel列,其中包含重复的数据,我想将其精简为唯一的值。以下是数据的样子: ColA ColB 10 Adam 12 Jane 14 Adam 18 Adam 20 Eve 因此,最后我只想从ColB获得唯一的名称: Adam Jane Eve 我知道我可以通过将所有这些值放入一个列表,然后向其中添加不同的功能来实现这一

对于你们这些大师来说,这可能是一件非常简单的事情,但我不熟悉C4和互操作。因此,我被难住了。这是我的问题。 我有一个excel列,其中包含重复的数据,我想将其精简为唯一的值。以下是数据的样子:

ColA    ColB
10      Adam
12      Jane
14      Adam
18      Adam
20      Eve
因此,最后我只想从ColB获得唯一的名称:

Adam
Jane
Eve
我知道我可以通过将所有这些值放入一个列表,然后向其中添加不同的功能来实现这一点。但我觉得我做错了什么。无论如何,我的计划是:

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);
如何使用C4与Excel进行比较

提前感谢。

您可以使用轻松获取列中的不同值

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()
您可以使用轻松获取列中的不同值

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()

在Excel中,选择列,转到。。 数据>删除重复项


这将为您留下唯一的值。

在Excel中,选择列,转到。。 数据>删除重复项


这就给您留下了唯一的值。

LinqToExcel内置的distinct支持单个属性。我使用以下命令在多个列上进行区分:

将其移动到内存,.AsEnumerable。 使用结构c,而不是类。结构是值类型,类不是。
LinqToExcel内置的distinct支持单个属性。我使用以下命令在多个列上进行区分:

将其移动到内存,.AsEnumerable。 使用结构c,而不是类。结构是值类型,类不是。
我收到以下错误消息:LinqToExcel仅在选择单个属性时提供对Distinct方法的支持@Paul,有什么想法吗?我得到以下错误消息:LinqToExcel仅在选择单个属性时提供对Distinct方法的支持@保罗,有什么想法吗?
struct distinct is:235
class distinct is:329