使用C#从Excel中检索数据

请看下面我的代码,我试图用C#获得excel工作表单元格值。 但是,当我检查立即窗口中的值,他们根本不符合实际值。 有些是空的。 为什么? 谢谢你的build议。

string fname; int nRows; int nCols; private void button1_Click(object sender, EventArgs e) { Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWookSheet1; Excel.Range xlRange; openFileDialog1.Filter = "(*.xls)|*.xls|(*.xlsx)|*.xlsx"; openFileDialog1.Title = "Select an excel file"; if (openFileDialog1.ShowDialog() == DialogResult.OK) fname = openFileDialog1.FileName; System.IO.FileInfo fi = new System.IO.FileInfo(fname); string ext = fi.Extension.ToString(); xlApp = new Excel.ApplicationClass(); string parameter; if (ext == ".xls") parameter = "5"; else parameter = "51"; xlWorkBook = xlApp.Workbooks.Open(fname, 0, true, parameter, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); xlWookSheet1 = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); object misValue = System.Reflection.Missing.Value; xlRange = xlWookSheet1.UsedRange; if (xlRange != null) { nRows = xlRange.Rows.Count; nCols = xlRange.Columns.Count; xlRange = (Microsoft.Office.Interop.Excel.Range)xlWookSheet1.Cells[nRows, nCols]; } Dictionary<int, List<int>> dict = new Dictionary<int, List<int>>(); List<string> list1 = new List<string>(); for (int i = 1; i < nCols; i++) { string temp = (string)(xlRange.Cells[1, i] as Excel.Range).Value2; // wrong values from temp list1.Add(temp); } 

 using System.Data.OleDb; using System.Data; public DataTable GetDataTableFromExcel(string FilePath, string strTableName) { string XLSConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FilePath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'"; //string XLSConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FilePath + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1'"; OleDbConnection XLSCon = new OleDbConnection(XLSConnectionString); OleDbDataAdapter XLSDataAdp = new OleDbDataAdapter(); XLSDataAdp.SelectCommand = new OleDbCommand(); XLSDataAdp.SelectCommand.Connection = XLSCon; try { DataTable dtXLSData = new DataTable(); XLSCon.Open(); XLSDataAdp.SelectCommand.CommandText = "SELECT * FROM [" + strTableName + "$]"; XLSDataAdp.Fill(dtXLSData); return dtXLSData; } catch (Exception ex) { throw ex; } finally { XLSCon.Close(); } } 

试试这个…通过文件path和工作表名称,然后parsing数据表,只要你喜欢简单的方式或LINQ的方式

我相信罪魁祸首会在下面:

 xlRange = (Microsoft.Office.Interop.Excel.Range)xlWookSheet1.Cells[nRows, nCols]; 

这会将你的范围压缩到一个单元格 – 你可以通过检查xlRange.Rows.Count来快速testing。 我会build议你删除这行和代码应该工作。 你可能会发现有用的另一个技巧是Range.Value属性将返回值的数组,如果范围有多个单元格。