¿Cuál es el nombre de la pestaña al cargar el archivo XLS en vb 2008?
Pregunta
Estoy tratando de cargar una hoja de cálculo con pestañas únicas de Excel 97 en una tabla de servidor SQL usando la función OleDbDataAdapter. De toda la documentación que he encontrado, el primer parámetro debe ser " seleccionar * de [sheet1 $] " Esto funciona bien para mí solo si la pestaña en la hoja de trabajo se llama Hoja1. Si cambio lo que hay entre los corchetes [] al nombre de la pestaña real, también funciona bien.
El problema es que la hoja de cálculo que se está cargando proviene de otro sistema y que el sistema cambia el nombre de la pestaña con cada carga. ¿Cómo puedo averiguar cuál es el nombre de la pestaña para que mis usuarios no tengan que abrir la hoja de cálculo y cambiar el nombre de la pestaña?
Solución
Bien, primero, abre una conexión OleDB a tu hoja de cálculo de Excel.
Luego, use algo como lo siguiente (que se muestra en VB.NET):
Imports System.Data
Imports System.Data.Odbc
Imports System.Data.OleDb
Dim DSN As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MYEXCELFILE.XLS;Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;MAXSCANROWS=12"""
Dim OleDbConn As New OleDbConnection(DSN)
OleDbConn.Open()
Dim tables As System.Data.DataTable = OleDbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
Dim tableName As String
Dim canBeImported As Boolean
For Each dr As System.Data.DataRow In tables.rows
tableName = dr.Item("TABLE_NAME").ToString
canBeImported = (tableName.IndexOfAny(New Char() {" ","[","]","'","""","`",";"}) < 0)
Next
OleDbConn.Close()
Esto recorrerá todas las tablas en el archivo de Excel (tabla = hojas o rangos con nombre) y obtendrá el nombre de cada una. Además, filtrará las tablas que tengan caracteres a los que no se pueda acceder a través de ODBC (los espacios son el problema más común).
Otros consejos
He investigado esto en el pasado y siempre he llegado a la conclusión de que tuve que hacer cumplir los nombres de las pestañas de las personas que me entregan las hojas de cálculo, no parece haber una manera confiable de encontrarlos. .