移动到阅读Excel文件在C#

我需要阅读.xlsx文件,而不使用第三方库。

我这样做:

private void Upload(string filename) { FileStream stream = File.Open(filename, FileMode.Open, FileAccess.Read); // Reading from a OpenXml Excel file (2007 format; *.xlsx) IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); //DataSet - The result of each spreadsheet will be created in the result.Tables excelReader.IsFirstRowAsColumnNames = false; DataSet result = excelReader.AsDataSet(); //5. Data Reader methods string value = GetValue(0, 0, excelReader); //6. Free resources (IExcelDataReader is IDisposable) excelReader.Close(); } 

我不知道如何阅读正确的单元格。 问题不是列位置(我可以使用,但是行位置。

 public string GetValue(int row, int col, IExcelDataReader excelReader) { string s; // ??? how to positionate on the right row? s = excelReader(column_value); return s; } 

我创build并使用以下类来读取.xlsx.xls文件中的第一个工作表:

 /// <summary> /// Reads a table from a spreadsheet. /// </summary> public sealed class XlsxReader { /// <summary> /// Loads an xlsx file from a filepath into the datatable. /// </summary> /// <param name="filePath"></param> /// <returns>Returns a DataTable with data from the first sheet.</returns> public static DataTable FromXLSX(string filePath) { try { // Create the new datatable. DataTable dtexcel = new DataTable(); // Define the SQL for querying the Excel spreadsheet. bool hasHeaders = true; string HDR = hasHeaders ? "Yes" : "No"; string strConn; // If it is a xlsx file if (filePath.Substring(filePath.LastIndexOf('.')).ToLower() == ".xlsx") strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=1;\""; else strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties=\"Excel 8.0;HDR=" + HDR + ";IMEX=1;\""; // Create connection OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); // Get scheme DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); DataRow schemaRow = schemaTable.Rows[0]; // Get sheet name string sheet = schemaRow["TABLE_NAME"].ToString(); if (!sheet.EndsWith("_")) { // Query data from the sheet string query = "SELECT * FROM [" + sheet + "]"; OleDbDataAdapter daexcel = new OleDbDataAdapter(query, conn); dtexcel.Locale = CultureInfo.CurrentCulture; // Fill the datatable. daexcel.Fill(dtexcel); } // Close connection. conn.Close(); // Set the datatable. return dtexcel; } catch { throw; } } } 

它将DataTable表作为DataTable返回。