阅读Excel 2010文件 – C#中的单元格

更新2

string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", EXCELFILENAME); string testCaseName = "test_case_2"; string query = String.Format("SELECT * from [{0}$] WHERE columns={1}", workbookName, testCaseName); OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString); DataSet dataSet = new DataSet(); dataAdapter.Fill(dataSet); //<<ERROR DataTable myTable = dataSet.Tables[0]; 

错误:没有给出一个或多个所需参数的值。

更新结束

更新:

 string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", EXCELFILENAME); string query = String.Format("select * from [{0}$]", workbookName); OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString); DataSet dataSet = new DataSet(); dataAdapter.Fill(dataSet); DataTable myTable = dataSet.Tables[0]; 

如何从单元中读取数据并将其存储在数组/string中。 我已经完成了阅读工作表,但找不到更好的做法

所以这里是我的Excel表单看起来像:

在这里输入图像说明

我应该能够通过在我的情况test_case_1或test_case_2等列…并阅读特定行的列…

关于过滤。

由于您正在使用OleDb进行数据检索,因此不会阻止您使用更高级的SQL:

 string testCaseName = "Test_case_1 string query = String.Format("SELECT * from [{0}$] WHERE columns=\"{1}\"", workbookName, testCaseName); 

您可以使用列的名称进行过滤。 在你的情况下,filter是在字段。 (顺便说一句,这是一个令人困惑的名字)

据我记得,表头必须在第一行,你可能需要移动你的表一排。

我build议你看看LinqToExcel 。 它使得在.NET中查询Excel非常容易。

 var book = new LinqToExcel.ExcelQueryFactory(@"E:\Temporary\Workbook.xlsx"); var current_test_case = "Test_case_1"; var query = from row in book.Worksheet("Sheet1") let columns = row["columns"].Cast<string>() where columns == current_test_case select new { id = row["id"].Cast<int>(), name = row["name"].Cast<string>(), caption = row["caption"].Cast<string>(), date = row["date"].Cast<DateTime>(), success = row["success"].Cast<bool>(), }; 

您好Abu Hamzah作为您的要求只读只需要列代码是在这里是一个Consol应用程序的Excel数据阅读

 class Program { internal static ILog logger = LogManager.GetLogger(typeof(Program)); static void Main(string[] args) { log4net.Config.XmlConfigurator.Configure(); string firstName, lastName, dob, lexisNexisID; string filePath = @"yor directory path\your file name"; ExcelProvider provider = ExcelProvider.Create(filePath, "Sheet1"); foreach (ExcelRow row in (from x in provider select x)) { Console.WriteLine("{0}", row.GetString(1)); /* the row.Getstring(index) the index is for your column you mey select morcolume as Console.WriteLine("{0}/t{1}", row.GetString(0),row.Getstring(1)); */ } } } public class ExcelRow { List<object> columns; public ExcelRow() { columns = new List<object>(); } internal void AddColumn(object value) { columns.Add(value); } public object this[int index] { get { return columns[index]; } } public string GetString(int index) { if (columns[index] is DBNull) { return null; } return columns[index].ToString(); } public int Count { get { return this.columns.Count; } } } public class ExcelProvider : IEnumerable<ExcelRow> { private string sheet; private string filePath; private List<ExcelRow> rows; public ExcelProvider() { rows = new List<ExcelRow>(); } public static ExcelProvider Create(string filePath, string sheet) { ExcelProvider provider = new ExcelProvider(); provider.sheet = sheet; provider.filePath = filePath; return provider; } private void Load() { string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties= ""Excel 12.0;HDR=YES;"""; connectionString = string.Format(connectionString, filePath); rows.Clear(); using (OleDbConnection conn = new OleDbConnection(connectionString)) { try { conn.Open(); } catch (Exception ex) { } using (OleDbCommand cmd = conn.CreateCommand()) { cmd.CommandText = "select * from [" + sheet + "$]"; using (OleDbDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { ExcelRow newRow = new ExcelRow(); for (int count = 0; count < reader.FieldCount; count++) { newRow.AddColumn(reader[count]); } rows.Add(newRow); } } } } } public IEnumerator<ExcelRow> GetEnumerator() { Load(); return rows.GetEnumerator(); } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { Load(); return rows.GetEnumerator(); } }