如题,在项目中导入excel文件时,往往只对其中的某个sheet表进行读取,或指定的某几个sheet表进行处理。
我的要求:导入excel文档,寻找有无名为5L的表,没有则找有无Sheet1的表,没有,则提示不存在正确命名的表或表不存在的提示框。代码如下:
目标函数中的主要代码如下:
OpenFileDialog file = new OpenFileDialog();
file.Filter ="Excel(*.xlsx)|*.xlsx|Excel(*.xlsm)|*.xlsm|Excel(*.*)|*.*";
string sheetname = "";
file.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //获得桌面路径
if (file.ShowDialog() == DialogResult.Cancel) return;
var path = file.FileName;
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + path + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
DataTable tablename = GetExcelTableName(path,connString);
int i;
for (i = 0; i != tablename.Rows.Count; i++)
{
if (tablename.Rows[i]["Table_Name"].ToString().Equals("Sheet1$")) sheetname = "Sheet1";
else if (tablename.Rows[i]["Table_Name"].ToString().Equals("'5L$'")) sheetname = "5L";
}
if(i== tablename.Rows.Count+1) MessageBox.Show("未找到符合条件的表明,请确认是否命名正确");
其中,GetExcelTableName(path,connString)返回的内容如图所示:
此外,GetExcelTableName(path,connString)函数如下所示:
//jin 获取EXCEL的表 表名字列
public static DataTable GetExcelTableName(string p_ExcelFile,string connString)
{
try
{
if (System.IO.File.Exists(p_ExcelFile))
{
OleDbConnection _ExcelConn = new OleDbConnection(connString);
_ExcelConn.Open();
DataTable _Table = _ExcelConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
_ExcelConn.Close();
return _Table;
}
return null;
}
catch
{
return null;
}
}