如何通过OleDb按Excel工作表顺序获取工作表名称?
按Excel实际顺序获取工作表名称的解决方案
OLEDB驱动的GetSchema或GetOleDbSchemaTable方法返回的工作表名称默认是按字母排序的,无法直接通过OLEDB获取工作表的实际显示顺序。以下是两种可行的替代方案:
方案一:使用Excel Interop
需要先引用Microsoft.Office.Interop.Excel组件(可通过NuGet安装或添加COM引用),直接操作Excel对象模型获取按顺序排列的工作表:
Imports Microsoft.Office.Interop.Excel Module Module1 Sub GetSheetsInOrder(ByVal filePath As String) Dim excelApp As Application = New Application() Dim workbook As Workbook = Nothing Try workbook = excelApp.Workbooks.Open(filePath) For Each worksheet As Worksheet In workbook.Worksheets Console.WriteLine(worksheet.Name) ' 按实际顺序输出工作表名 Next Catch ex As Exception Console.WriteLine($"出错:{ex.Message}") Finally If workbook IsNot Nothing Then workbook.Close(SaveChanges:=False) System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook) End If excelApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp) End Try End Sub End Module
注意:此方法要求运行环境安装Microsoft Office,且需注意释放COM对象避免进程残留。
方案二:使用EPPlus(推荐,无需安装Office)
EPPlus是开源的Excel操作库,可通过NuGet安装,轻量且适合服务器环境:
Imports OfficeOpenXml Module Module1 Sub GetSheetsInOrder(ByVal filePath As String) Using package As New ExcelPackage(New FileInfo(filePath)) For Each worksheet In package.Workbook.Worksheets Console.WriteLine(worksheet.Name) ' 按实际顺序输出工作表名 Next End Using End Sub End Module
注意:EPPlus 5.x及以上版本需要商业授权用于非开源项目,若使用免费版本可选择4.x版本。
内容的提问来源于stack exchange,提问作者Gefallenus
相关产品推荐
相关产品推荐

