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?

¿Fue útil?

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. .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top