我这样连接Excel表:
try
{
string filepath = Server.MapPath("test.xls");
String strConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;IMEX=1'", filepath); OleDbConnection Excel_conn = new OleDbConnection(strConnectionString); string query = "SELECT * FROM [Sheet1$]";
OleDbDataAdapter oleAdapter = new OleDbDataAdapter(query, Excel_conn);
DataSet myDataSet = new DataSet();
Excel_conn.Open();
oleAdapter.Fill(myDataSet, "Excel_Sheet1");
Excel_conn.Close();
}
catch (Exception ex)
{
Label1.Text = ex.Message;
}如果test.xls的第一个工作表名称是Sheet1时,运行正常。
如果test.xls的第一个工作表名称是asdfg时,出现错误:'Sheet1$' 不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长。且不能释放系统资源:文件“test.xls”正由另一进程使用,因此该进程无法访问该文件。
这时不能修改删除test.xls表,要重启系统后才能修改或删除。
请问:
1、如何在连接Excel表是首选取得工作表名,使不同的工作表名也能正常运行不会出错?
2、如果出错应如何完全释放系统资源,可以使用另一个工作表?
try
{
string filepath = Server.MapPath("test.xls");
String strConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;IMEX=1'", filepath); OleDbConnection Excel_conn = new OleDbConnection(strConnectionString); string query = "SELECT * FROM [Sheet1$]";
OleDbDataAdapter oleAdapter = new OleDbDataAdapter(query, Excel_conn);
DataSet myDataSet = new DataSet();
Excel_conn.Open();
oleAdapter.Fill(myDataSet, "Excel_Sheet1");
Excel_conn.Close();
}
catch (Exception ex)
{
Label1.Text = ex.Message;
}如果test.xls的第一个工作表名称是Sheet1时,运行正常。
如果test.xls的第一个工作表名称是asdfg时,出现错误:'Sheet1$' 不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长。且不能释放系统资源:文件“test.xls”正由另一进程使用,因此该进程无法访问该文件。
这时不能修改删除test.xls表,要重启系统后才能修改或删除。
请问:
1、如何在连接Excel表是首选取得工作表名,使不同的工作表名也能正常运行不会出错?
2、如果出错应如何完全释放系统资源,可以使用另一个工作表?
try
{
}
catch
{
}
finally
{
Excel_conn.Close();
}
由于Excel工作是上传的,可能会出现某人上传的他的工作表名已改为另一名称,这样使整个系统不能用也即另外一个人也不能用此系统。
OleDbConnection objConn = new OleDbConnection(strConn);
List<string> SheetNameList = new List<string>();
objConn.Open();
DataTable dtExcelSchema = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
string SheetName = "";
for (int i = 0; i < dtExcelSchema.Rows.Count; i++)
{
SheetName = dtExcelSchema.Rows[i]["TABLE_NAME"].ToString();
SheetNameList.Add(SheetName);
}
GridView1.DataSource =SheetNameList;
GridView1.DataBind();
表名,一般是三个