Рейтинг:
50
bbirajdar
Вам нужны драйверы OLEDB 12, установленные на вашем компьютере.
Установка по этой ссылке
http://www.microsoft.com/en-us/download/details.aspx?id=13255[^]
И код будет таким .
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFileName + ";Extended Properties=\"Excel 12.0;HDR=YES;\"";
// if you don't want to show the header row (first row) use 'HDR=NO' in the string
OleDbConnection excelConnection = new OleDbConnection(connectionString);
excelConnection.Open();
// Get the data table containg the schema guid.
DataTable dtWorksheetTables = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (dtWorksheetTables == null || dtWorksheetTables.Rows.Count == 0) return null;
string worksheetName = GetWorksheetName(dtWorksheetTables);
string strExcelSQL = "SELECT * FROM [" + worksheetName + "]";
OleDbCommand oleDbCommand = new OleDbCommand(strExcelSQL, excelConnection);
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(oleDbCommand);
DataTable excelDataTable = new DataTable();
dataAdapter.Fill(excelDataTable);
//Dispose
dataAdapter.Dispose();
oleDbCommand.Dispose();
excelConnection.Close();
excelConnection.Dispose();
GC.Collect();
sagarjainhr
Я установил access database 10 установленный на моей машине все еще выдает ошибку
bbirajdar
Изменить строку связи для
@"Поставщика=Майкрософт.Туз.Oledb для.12.0;Источник данных=" + excelFileName + ";дополнительные свойства=\"значение Excel 12.0;HDR съемка=да;\"";
sagarjainhr
Я использую vb.net платформа, а не C#, поэтому не может использовать косые черты"\", так как это вызывает ошибку.
Если я преобразовать его в vb.net а также использовать ее бросать одну и ту же ошибку
bbirajdar
Не смотрите на \ . Посмотрите на содержимое строки подключения.... Вы используете Excel 8.0.. Вместо этого используйте 12.0.. Вы поняли мою точку зрения или мне следует объяснить ее более подробно?
sagarjainhr
Я попробовал использовать Excel 12.0, но все равно он дает ту же ошибку. Я поражен здесь, и я действительно не понимаю, что делать я пытался с 8 & 12 оба, но все еще не в состоянии я получаю ту же ошибку
bbirajdar
Опубликуйте свой полный код.. Вашего ответа недостаточно, чтобы догадаться, в чем дело...
sagarjainhr
Частная суб importFromExcel(как byval путь к файлу как строку)
Попробуй
Dim tablesNames как DataTable
Dim connectionString As String = [строка].Формат("Поставщик=Майкрософт.Туз.Oledb для.12.0;Источник данных=" &амп; путь &ампер; ";расширенные свойства=""значение Excel 12.0;HDR съемка=да;""")
Использование oleDbConn в качестве нового OleDbConnection(connectionString)
oleDbConn.Открыть()
tablesNames = oleDbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Столы, Ничего)
Если tablesNames - это ничто, то
cmbNames.Предметы.Добавить("-Выберите-")
Еще
cmbNames.Предметы.Четкий()
cmbNames.Предметы.Добавить("-Выберите-")
For i As Integer = 0 To tablesNames.Rows.Отсчет - 1 Шаг +2
Dim tableName As String = tablesNames.Строки(i)("ИМЯ_ТАБЛИЦЫ").Метод toString().Заменить("$", "")
имятаблицы = имя_таблицы.Заменять("'", "")
Если tableName.StartsWith("_") Затем
Еще
cmbNames.Предметы.Добавить(tableName.Отделка())
Конец, Если
Следующий
Конец, Если
Конец Использования
Catch generatedExceptionName как исключение
Ящик для сообщений.Show(generatedExceptionName.Метод toString)
Окончательно
Метод oledbconnection.ReleaseObjectPool()
Конец Попытки
Конец Подводной Лодки
sagarjainhr
это мой код, я хочу получить файл *.xlsx и получить доступ к нему, но я не могу получить доступ к файлу *.xlsx, но я могу получить доступ к файлу *.xls. Поскольку все данные находятся там в *.xlsx, его очень нужно получить доступ к файлу *.xlsx, чем к файлу *.xls
Когда oleDbConn.Open() пытается выполнить его, он выдает ошибку внешняя таблица не находится в ожидаемом формате.
bbirajdar
Код кажется правильным.. Можете ли вы сказать мне номер строки, где эта ошибка выбрасывается ?
sagarjainhr
он говорит, что строка 59-это та же самая строка, где код oleDbConn.Open() пытается выполнить
sagarjainhr
Private Sub btn_FileBrowse_Click(ByVal sender As System.Объект, бывал е как система.EventArgs) обрабатывает btn_FileBrowse.Щелчок
Через ОФД, как новое диалоговое окно openfiledialog()
cmbNames.Предметы.Четкий()
chklboxName.Предметы.Четкий()
ОФД.Заголовок = "Выберите файл"
- Если тбброуз.Текст = "" Тогда
ОФД.InitialDirectory = "Мои Документы:\"
-Иначе
- ОФД.InitialDirectory = tbBrowse.Text
-Конец, Если
ОФД.Фильтр = "файлы Excel (*.файлы XLSX)|*.XLSX-файлы|все файлы (*.*)|*.*"
Если ОФД.ShowDialog() = DialogResult.Тогда ладно
именем = ОФД.имя файла
тбброуз.Текст = имя файла
Попробуй
System.IO.File.Откройте(имя, ИО.Содержит filemode.Откройте, IO.FileAccess.Читать, ИО.Обменник.Читать)
Поймать
Тусклый ответ как MsgBoxResult = MsgBox("пожалуйста, убедитесь, что файл закрыт, прежде чем продолжить", MsgBoxStyle.Информация, "Тревога")
тбброуз.Текст = ""
Конец Попытки
Еще
тбброуз.Текст = ""
Тусклый ответ как MsgBoxResult = MsgBox("файл не выбран, Пожалуйста, выберите файл для продолжения", MsgBoxStyle.Информация, "Тревога")
Ящик для сообщений.Показать("файл не выбран, Пожалуйста, выберите Файл и продолжайте")
Конец, Если
Вызовите importFromExcel(имя файла)
Конец Использования
Конец Подводной Лодки
Частная суб importFromExcel(как byval путь к файлу как строку)
Попробуй
Dim tablesNames как DataTable
'Dim connectionString As String = [String].Формат("Поставщик=Майкрософт.Туз.Oledb для.12.0;Источник данных={0};расширенные свойства=""значение Excel 12.0 XML;и режим HDR=да;компания IMEX=1;""", Путь к файлу)
'Dim connectionString As String = [String].Формат("Поставщик=Майкрософт.Туз.Oledb для.12.0;Источник данных={0};расширенные свойства=""значение Excel 12.0;HDR съемка= "да";""", путь к файлу)
'Dim connectionString As String = [String].Формат("Поставщик=Майкрософт.Туз.Oledb для.12.0;Источник данных={0};расширенные свойства=""значение Excel 12.0;HDR съемка=да;компания IMEX=1;""", Путь к файлу)
Dim connectionString As String = [строка].Формат("Поставщик=Майкрософт.Туз.Oledb для.12.0;Источник данных=" &амп; путь &ампер; ";расширенные свойства=""значение Excel 12.0;HDR съемка=да;""")
Использование oleDbConn в качестве нового OleDbConnection(connectionString)
oleDbConn.Открыть()
tablesNames = oleDbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Столы, Ничего)
Если tablesNames - это ничто, то
cmbNames.Предметы.Добавить("-Выберите-")
Еще
cmbNames.Предметы.Четкий()
cmbNames.Предметы.Добавить("-Выберите-")
For i As Integer = 0 To tablesNames.Rows.Отсчет - 1 Шаг +2
Dim tableName As String = tablesNames.Строки(i)("ИМЯ_ТАБЛИЦЫ").Метод toString().Заменить("$", "")
имятаблицы = имя_таблицы.Заменять("'", "")
Если tableName.StartsWith("_") Затем
Еще
cmbNames.Предметы.Добавить(tableName.Отделка())
Конец, Если
Следующий
Конец, Если
Конец Использования
Catch generatedExceptionName как исключение
Ящик для сообщений.Show(generatedExceptionName.Метод toString)
Окончательно
Метод oledbconnection.ReleaseObjectPool()
Конец Попытки
Конец Подводной Лодки
bbirajdar
Окей.. Установите эти драйверы OLEDB http://www.microsoft.com/en-us/download/details.aspx?id=13255
sagarjainhr
Где btn_FileBrowse_Click() fnc просматривает файл и вызывает функцию importFromExcel()
и вот как работает эта функция
bbirajdar
Эта загрузка установит набор компонентов, облегчающих передачу данных между существующими файлами Microsoft Office, такими как файлы Microsoft Office Access 2010 (*.mdb и *.accdb) и файлы Microsoft Office Excel 2010 (*.xls, *. xlsx и *.xlsb), в другие источники данных, такие как Microsoft SQL Server. Также поддерживается подключение к существующим текстовым файлам. Драйверы ODBC и OLEDB устанавливаются разработчиками приложений для использования при разработке своих приложений с подключением к форматам файлов Office.
sagarjainhr
Это тоже не работает....
sagarjainhr
Спасибо за вашу помощь
Теперь он работает нормально. thr не было никаких проблем со строкой подключения это была проблема с просмотром функции файла я просто прокомментировал 1 блок он работает нормально
Member 10684591
я также сталкиваюсь с той же проблемой можете ли вы просто поделиться строкой подключения
Member 12887310
привет не могли бы вы пожалуйста рассказать мне как вы решили эту проблему
Рейтинг:
43
sagarjainhr
Я решил это сам, никаких проблем с соединительной строкой не было, и там все было в порядке. Проблема была в том, что я проверял, открыт ли файл или нет, и я не закрыл этот файл после этого процесса. таким образом, он был использован другим процессом, и строка подключения не смогла получить доступ к листу excel, и это вызвало ошибку.
Пожалуйста, убедитесь, что файл не открыт или не используется каким-либо другим процессом при попытке чтения с файлом *.xlsx, если файл открыт также он отлично работает с файлом *.xls, а не в файле *.xlsx имейте это в виду при доступе к файлу *.xlsx
vikramaditya9
Я также столкнулся с той же проблемой "внешняя таблица не находится в ожидаемом формате".Я использую строку connectionString как &ГТ; параметр connectionString = "поставщика=Майкрософт.Туз.Oledb для.12.0;Источник данных=" + ExcelPath + ";дополнительные свойства=\"значение Excel 12.0;HDR съемка=да;\"";
Пожалуйста, Предложите кому-нибудь какие-нибудь проблемы с connectionstring?
Anshuwa
Поставщик=Майкрософт.Туз.Oledb для.12.0;source=d:\files\file.xlsx данных; расширенные свойства='программы Excel 8.0;HDR съемка=да
WEI LI JASMINE ZEE
ДА. Выбранный файл excel должен быть открыт, и у него не будет проблем со строкой подключения.
Если выбранный файл excel будет закрыт, я получу сообщение об ошибке "внешняя таблица не находится в ожидаемом формате".
Есть ли способ решить эту проблему? С TQ.