从列中获取不同的值

必须获取每列不同的数据,并使用Excel.interop存储到Dictionary(或数组)。 我已经尝试了下面的代码,但它不与Excel.interopalignment。

var excel = new ExcelQueryFactory("worksheetFileName"); var distinctNames = (from row in excel.WorkSheet() select row["ColB"]).Distinct(); 

请提供Excel.Interop片段/代码以逐列获取不同的值并将其存储在数组中。

对于这个操作,使用Excel自动化没有任何意义,相反,审慎的做法是使用OleDb,除非使用Excel自动化有合理的理由。

例如,图1是一个函数,用于创build一个可以在任何项目中使用的连接string,而图2用于读取数据。

为了使用Excel自动化,我们打开自己,如果出现崩溃或没有正确编码的对象(这称为双点规则),则不会因为创build和使用对象而释放对象自动化对象不会与OleDb发生。 现在,如果你想格式化,而不是我们转向自动化。

 public string ConnectionString(string FileName, string Header) { OleDbConnectionStringBuilder Builder = new OleDbConnectionStringBuilder(); if (System.IO.Path.GetExtension(FileName).ToUpper() == ".XLS") { Builder.Provider = "Microsoft.Jet.OLEDB.4.0"; Builder.Add("Extended Properties", string.Format("Excel 8.0;IMEX=1;HDR={0};", Header)); } else { Builder.Provider = "Microsoft.ACE.OLEDB.12.0"; Builder.Add("Extended Properties", string.Format("Excel 12.0;IMEX=1;HDR={0};", Header)); } Builder.DataSource = FileName; return Builder.ConnectionString; } 

代码读取Sheet2中的第一列,并获得不同的值,在这种情况下,我正在与date为string的列进入列表文件驻留在应用程序可执行文件相同的文件夹

 private List<string> DemoDistinct() { List<string> dateList = new List<string>(); DataTable dt = new DataTable(); using (OleDbConnection cn = new OleDbConnection { ConnectionString = ConnectionString(System.IO.Path.Combine(Application.StartupPath, "WS1.xlsx"), "Yes") }) { cn.Open(); using (OleDbCommand cmd = new OleDbCommand { CommandText = "SELECT DISTINCT [Dates] FROM [Sheet2$]", Connection = cn } ) { OleDbDataReader dr = cmd.ExecuteReader(); dt.Load(dr); dateList = dt .AsEnumerable() .Select(row => row.Field<DateTime>("Dates").ToShortDateString()).ToList(); } } return dateList; }