用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();