我有一个xslx文件,其中包含两列:ID和创建日期。我不知道文件的长度。如何将文件读取到矩阵中(我也不希望列标题在矩阵中,只是数据)?
答案 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;
}
}
希望这会有所帮助......