Имена таблиц Excel содержат «$» при извлечении из схемы в VB.net - PullRequest
0 голосов
/ 22 января 2020

У меня есть список, который я пытаюсь заполнить в приложении, чтобы он содержал имена вкладок Excel или таблицы доступа. Он создается с помощью простой схемы:

dtSheet = OpenCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})

Затем он помещается в простой список (из String):

For Each Row In dtSheet.Rows
    ListOfSheets.Add(Row("TABLE_NAME").ToString())
Next

Это прекрасно работает, если я открываю базу данных Access, имена таблиц перечислены красиво. Однако, когда я использую его для Excel, я получаю такие символы, как $ и кавычки "'". Я хотел бы обрезать это, чтобы просто иметь названия вкладок, но до сих пор я не смог найти ничего, что могло бы помочь моей проблеме конкретно.

Я подозреваю, что ответ находится в {Nothing. ... "TABLE"} объект. Я немного разбираюсь в том, как работают подобные фильтры, и у меня возникли проблемы, когда я оборачиваюсь вокруг него после прочтения документации. NET.

Еще одна идея - сделать обрезку после изменения строки, но я Хотелось бы узнать, есть ли более простой способ получить простое имя строки, которое я хочу с самого начала.

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 24 января 2020

Основываясь на обсуждении из jmcihinney, я создал немного лучший код.

dtSheet = OpenCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
dtSheet.Columns.Add("Table_Text", Type.GetType("System.String"))
For i As Integer = dtSheet.Rows.Count - 1 To 0 Step -1
      If Microsoft.VisualBasic.Strings.Right(dtSheet.Rows(i)("TABLE_NAME"), 1) <> "$" Then
           dtSheet.Rows.RemoveAt(i)
      Else
           dtSheet.Rows(i)("TABLE_Text") = Replace(dtSheet.Rows(i)("TABLE_NAME"), "$", "")
      End If
Next 

Я по существу добавляю столбец в таблицу данных, которая создается из списка. Чтобы удалить все, что не является таблицей (например, именованные диапазоны, представления листа), я проверяю столбец Table_Name на суффикс «$». Заметьте, что я go задом наперед, чтобы не связываться с индексацией.

Затем в операторе Else я добавил "Replace", чтобы сделать table_text на "$" меньше версии Table_Name

. затем я могу построить свой список следующим образом:

Me.lbTableList.DataSource = dtsheet
Me.lbTableList.DisplayMember = "TABLE_Text"
Me.lbTableList.ValueMember = "TABLE_NAME"

Это делает мою таблицу красивой, независимо от того, загрузил ли я базу данных Access или файл Excel. Это также позволяет мне просто передать TABLE_NAME команде подключения и не беспокоиться о том, есть ли в названии «$»:

DBCmd.CommandText = "SELECT * FROM [" & strTable & "]"
...