Ошибка доступа к определенным листам Excel с Jet - PullRequest
0 голосов
/ 15 апреля 2010

Я использую ASP.NET для открытия документа Excel 2003, размещенного на сервере. Электронная таблица Excel, созданная системой, находящейся вне моего контроля, имеет 5 рабочих таблиц. Я получаю доступ к данным на каждом листе следующим образом (разрывы строк добавлены для удобства чтения):

string ExcelConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\sample.xls;
    Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1;\";";

OleDbDataAdapter myData = 
    new OleDbDataAdapter("SELECT * FROM [mysheet]", ExcelConn);
myData.TableMappings.Add("Table", "mysheet");
myData.Fill(ExcelDS);

Это работает для 3 из 5 листов. Два других выдают эту ошибку:

ядро ​​базы данных Microsoft Jet не удалось найти объект «mysheet». Убедитесь, что объект существует и что вы пишете его имя и путь правильно.

Я четыре раза проверил имя листа, проверив текст на нижней вкладке, а также проверив конец строки, полученной в Excel:

=CELL("filename")
c:\[sample.xls]mysheet

Строка подключения указывается один раз и используется повторно для всех 5 листов.

Возможно ли, что мне нужно ссылаться на лист строкой, которая не соответствует имени, которое видно в Excel? Может быть, скрытые символы, пробелы и т. Д.? Есть ли другой способ найти истинное имя листа? Любые другие предложения для получения этих данных?

Примечание: я не могу изменить документ Excel (я бы использовал SSIS для импорта CSV, если бы мог иметь его по-своему).

Я использую .NET 3.5 / II6.

1 Ответ

1 голос
/ 15 апреля 2010

Ну, я нашел способ раскрыть фактическое название листа.

Используя строку подключения в вопросе, я могу сделать это ...

OleDbConnection conn = new OleDbConnection(ExcelConn);
conn.Open();
...
conn.Close();

При открытом соединении я могу использовать отладчик для получения имен листов.

conn.GetSchema("Tables").Rows[0]["TABLE_NAME"]
conn.GetSchema("Tables").Rows[1]["TABLE_NAME"]
...
conn.GetSchema("Tables").Rows[9]["TABLE_NAME"]

Я обнаружил, что в документе Excel было 10 имен листов. 2 листа, которые вызывали ошибки, имели одинаковые имена, исправленные после «$». Я думаю, что меня ждет кошмар поддержки, так как я готов поспорить, что кто-то играл с документом Excel, прежде чем отправить его мне, - но по крайней мере я знаю, как получить данные.

...