C#读取Excel中的内容,并将内容存放在二维数组中
- 读取Excel中的内容,存放在DataTable中
string path= @“E:\C# 读取Excel存放在二维数组中\11.xls”;
(1)不区分后缀名
具体代码如下:
public static DataTable ImportExcelToDataTable2(string path)
{
//注意:把一个excel文件看做一个数据库,一个sheet看做一张表。语法 “SELECT * FROM [sheet1 ] " , 表 单 要 使 用 " [ ] " 和 " ]",表单要使用"[]"和" ]",表单要使用"[]"和"”
//以下2种方式都可以实现 Access数据库
//string conStr = string.Format(“Provider=Microsoft.ACE.OLEDB.12.0; Data source={0}; Extended Properties=Excel 12.0;”, path);
try
{
string conStr = “Provider=Microsoft.Ace.OLEDB.12.0;Data Source=” + path + “;Extended Properties=‘Excel 12.0;HDR=Yes;IMEX=2’”;
using (OleDbConnection conn = new OleDbConnection(conStr))
{
conn.Open();
//获取所有Sheet的相关信息(以下2种方式都可以实现)
//DataTable dtSheet = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
DataTable dtSheet = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, “TABLE” });
if (dtSheet.Rows.Count > 0)
{
//获取第一个 Sheet的名称
string sheetName = dtSheet.Rows[0][“TABLE_NAME”].ToString().Trim();
string sql = string.Format(“select * from [{0}]”, sheetName);
using (OleDbDataAdapter oda = new OleDbDataAdapter(sql, conn))
{
DataTable dt = new DataTable();
oda.Fill(dt);
return dt;
}
}
return null;
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
return null;
}
}
(2)区分后缀名
具体代码如下:
public DataTable GetDataFromExcel(string filePath)
{
string connStr = “”;
string fileType = System.IO.Path.GetExtension(filePath);
if (string.IsNullOrEmpty(fileType)) return null;
// 1、HDR表示要把第一行作为数据还是作为列名,作为数据用HDR=no,作为列名用HDR=yes;
// 2、通过IMEX=1来把混合型作为文本型读取,避免null值。
if (fileType == “.xls”||fileType == “.csv”)
connStr = “Provider=Microsoft.Jet.OLEDB.4.0;” + “Data Source=” + filePath + “;” + ";Extended Properties=“Excel 8.0;HDR=NO;IMEX=1"”;//此连接只能操作Excel2007之前(.xls)文件
else//.xlsx .csv
connStr = @“Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” + filePath + “;Extended Properties=“Excel 12.0 Xml;HDR=No””; //此连接可以操作.xls与.xlsx文件 (支持Excel2003 和 Excel2007 的连接字符串)
string sql_F = "Select * FROM [{0}] ";
OleDbConnection conn = null;
OleDbDataAdapter da = null;
DataTable dataTable = new DataTable();
try
{
// 初始化连接,并打开
conn = new OleDbConnection(connStr);
conn.Open();
da = new OleDbDataAdapter();
da.SelectCommand = new OleDbCommand(String.Format(sql_F, “Sheet1$”), conn);
da.Fill(dataTable);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{ // 关闭连接
if (conn.State == ConnectionState.Open)
{
conn.Close();
da.Dispose();
conn.Dispose();
}
}
return dataTable;
}
2.将DataTable中的数据存放在二维数组中
具体代码如下:
string[,] array = new string[dt.Rows.Count, dt.Columns.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
array[i, j] = dt.Rows[i][j].ToString().ToUpper().Trim();//把小写的字符转换成相应的大写字母。反之ToLower()
}
}