Как называется вкладка при загрузке XLS-файла в vb 2008?
Вопрос
Я пытаюсь загрузить электронную таблицу Excel 97 с одной вкладкой в таблицу SQL server, используя функцию OleDbDataAdapter.Из всей документации, которую я нашел, первым параметром должен быть "select * from [sheet1$]".У меня это работает нормально, только если вкладка на рабочем листе называется Sheet1.Если я изменю то, что находится в скобках [], на фактическое название вкладки, это также будет работать нормально.
Проблема в том, что загружаемая электронная таблица поступает из другой системы, и эта система меняет название вкладки при каждой загрузке.Как я могу выяснить, как называется вкладка, чтобы моим пользователям не приходилось открывать электронную таблицу и переименовывать вкладку?
Решение
Хорошо, сначала откройте OleDB-подключение к вашей электронной таблице Excel.
Затем используйте что-то вроде следующего (показано в 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()
Это позволит перебрать все таблицы в файле Excel (таблица = листы или именованные диапазоны) и получить имя каждой.Кроме того, он будет отфильтровывать любые таблицы, в которых есть символы, к которым невозможно получить доступ через ODBC (пробелы - наиболее распространенная проблема).
Другие советы
Я изучал это в прошлом, и я всегда приходил к выводу, что мне приходилось навязывать названия вкладок людям, предоставляющим мне электронные таблицы, поскольку, похоже, не существует надежного способа их найти.