如何将Excel文件读入矩阵?

时间:2011-07-19 08:05:56

标签: c# excel-2007

我有一个xslx文件,其中包含两列:ID和创建日期。我不知道文件的长度。如何将文件读取到矩阵中(我也不希望列标题在矩阵中,只是数据)?

2 个答案:

答案 0 :(得分:0)

    /// <summary>
    /// Import Function For Xlsx  File
    /// </summary>
    /// <param name="s">File Name</param>
    /// <returns> Datatable </returns>
    private DataTable Import4Xlsx(string s)
    {
        string conn = "Provider=Microsoft.ACE.OLEDB.12.0;" +
                      "Data Source=" + s + ";" +
                      "Extended Properties='Excel 12.0 Xml;Allow Zero DateTime=True;" +
                      "HDR=YES;IMEX=1\"'";

        string[] sheetname = GetExcelSheetNames(conn);
        try
        {
            var objConn = new OleDbConnection(conn);
            objConn.Open();
            var ds = new DataSet();
            var da = new OleDbDataAdapter("SELECT * FROM [" + sheetname[0] + "]", conn);
            da.Fill(ds);
            objConn.Close();
            return ds.Tables[0];//resultant data
        }
        catch (Exception ex)
        {
            Trace.WriteLine(ex.Message + ex.Source);
            return null;
        }
    }

    /// <summary>
    /// Get Excel Files Sheet Name
    /// </summary>
    /// <param name="con">Connection String</param>
    private String[] GetExcelSheetNames(string con)
    {
        OleDbConnection objConn = null;
        DataTable dt = null;
        try
        {
            objConn = new OleDbConnection(con);
            objConn.Open();
            dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            if (dt == null) return null;
            var excelSheets = new String[dt.Rows.Count];
            int i = 0;
            foreach (DataRow row in dt.Rows)
            {
                excelSheets[i] = row["TABLE_NAME"].ToString();
                i++;
            }
            return excelSheets;
        }
        catch (Exception ex)
        {
            Trace.WriteLine(ex.Message + ex.Source);
            return null;
        }
        finally
        {
            if (objConn != null)
            {
                objConn.Close();
                objConn.Dispose();
            }
            if (dt != null)
            {
                dt.Dispose();
            }
        }
    }

试一试正常

答案 1 :(得分:0)

以下链接中的代码可以为您提供帮助:

How to read an Excel file in c sharp

您可以根据需要提供xlsx文件的路径。 您也可以在代码中的range = xlWorkSheet.UsedRange;行之后使用以下行:

string[,] requiredData = new string[range.Rows.Count - 1,range.Columns.Count];

创建矩阵。

您也可以将数据写入上面创建的矩阵而不是显示MessageBox(您可以按如下方式修改循环):

for (rCnt = 2; rCnt <= range.Rows.Count; rCnt++)
            {
                for (cCnt = 1; cCnt <= range.Columns.Count; cCnt++)
                {
                    str = (range.Cells[rCnt, cCnt] as Microsoft.Office.Interop.Excel.Range).Value2.ToString();
                    requiredData[rCnt - 2][cCnt - 1] = str;
                }
            }

希望这会有所帮助......