移动到右边一行,读取c#中的Excel文件



我需要在不使用第三部分库的情况下读取.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;
}

我创建并使用以下类从.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返回。

最新更新