Я пытаюсь получить имена листов Excel с помощью oledb.
Моя строка подключения:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
filepath +
";Extended Properties=Excel 12.0;";
где путь к файлу
- имя файла.
Мой код для этого:
List<string> sheetNames = new List<string>();
_excel.Connect(_path);
DataTable dataTable = _excel.ExecuteSchema();
_excel.Disconnect();
foreach (DataRow row in dataTable.Rows)
{
string sheetName = row["TABLE_NAME"].ToString();
if(!sheetName.EndsWith("$'")) { continue; }
sheetNames.Add(sheetName);
}
список с именами листов содержит все допустимые имена листов и некоторые другие имена листов. Пример:
"'correctsheetname $'"
"'correctsheetname $' Print_Area"
Я добавляю только листы, оканчивающиеся на $ '
Моя проблема в том, что если имя листа содержит единственный цитата, я получаю это с двумя одинарными кавычками.
Пример:
для листа с именем asheetname's
я получаю 'asheetname''s $' '
Впоследствии, когда я пытаюсь получить источник данных этого листа, я получаю исключение, что этот лист не существовать.
query = "SELECT * FROM ['asheetname''s$']"
_command = new OleDbCommand(query, _connection);
_dataTable = new DataTable();
_dataReader = _command.ExecuteReader(); <-- Exception is thrown here
И сообщение об исключении:
{System.Data.OleDb.OleDbException: '' asheetname''s $ '' не является допустимым именем. Убедитесь, что он не содержит недопустимых символов или знаков препинания и не слишком длинный.
в System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult hr)
в System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult (tagDBPARAMS dbParams, Object и executeResult)
в System.Data.OleDb.OleDbCommand.ExecuteCommandText (Object & executeResult)
в System.Data.OleDb.OleDbCommand.ExecuteCommand (поведение CommandBehavior, Object и executeResult)
в System.Data.OleDb.OleDbCommand.ExecuteReaderInternal (поведение CommandBehavior, метод String)
в System.Data.OleDb.OleDbCommand.ExecuteReader (поведение CommandBehavior)
в System.Data.OleDb.OleDbCommand.ExecuteReader ()
в PrestaImporter.Entity.Excel.ExecuteQuery (строковый запрос)