用OleDbConnection获取第一个Excel工作表名称

我有一个问题。 我需要在工作簿中findexcel工作表的名称,该工作簿从左侧的工作表标签中查看 – 从我的angular度来看,这是第一个。

我正在使用这个代码:

public static string GetFirstExcelSheetName(OleDbConnection connToExcel) { DataTable dtSheetName = connToExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); List<String> lstExcelSheet = new List<string>(dtSheetName.Rows.Count); foreach (DataRow row in dtSheetName.Rows) lstExcelSheet.Add(row["TABLE_NAME"].ToString()); return lstExcelSheet[0]; } 

这里的问题是它返回的行不是在视觉标签顺序,但在一个非常不同的顺序 – 最有可能的行创builddate。

怎样才能得到sheetnames表根据他们的标签顺序sorting,以便我可以轻松获得第一个excel表名称?

谢谢,kalem keki

它应该是工作簿(?)集合中的第零个项目。 我认为你有正确的索引,错误的收集。

对不起,没有注意到你正在使用数据表的行集合。 这是一个不同的问题。 你如何创build数据表? 您可能必须更改数据视图的sorting属性。

 Dim dtSheetnames As DataTable = oleDBExcelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"}) Dim FirstSheetName As String = dtSheetnames.Rows(0)!TABLE_NAME.ToString 

行0不是Excel文件中的第一个表,行在这个集合中按字母顺序sorting:

我build议使用NPOI库( http://npoi.codeplex.com/ )而不是OleDB从Excel中检索数据(包括元数据)。

IIRC,OleDB也将失败的工作表名称,包括空格或美元符号。

  OleDbConnection oconn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Session["path"].ToString() + "; Extended Properties=Excel 12.0;Persist Security Info=False;"); oconn.Open(); myCommand.Connection = oconn; DataTable dbSchema = oconn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); if (dbSchema == null || dbSchema.Rows.Count < 1) { throw new Exception("Error: Could not determine the name of the first worksheet."); } string firstSheetName = dbSchema.Rows[0]["TABLE_NAME"].ToString();