К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

к знатокам ADODB

Гость
0 - 09.10.2014 - 12:01
Есть обработка, которая читает данные из Excel. Потом их разбираю уже как надо. Работает в нескольких приложениях.
В данной ситуации есть 31 лист по дням, с каждого читаются данные и затем строится сводный отчет. Все бы хорошо, но вот конкретно в одном месяце, при чтении листа "12" (чем он не угодил), все читается нормально, но не читаются данные в колонке "H" (восьмая). То есть считываются пустые. Причем данные простые типа "П3". Менял уже и формат ячейки, фигня какая то. Все остальные листы - без проблем. По структуре они идентичные. Может кто сталкивался с подобной чертовщиной. Если надо, то тогда уже приведу подробности. Но там собственно соединение и чтение с помощью SELECT. В отладчике смотрел, пустые именно данные объекта ADO, то есть еще до моей таблицы значений, в которую потом пихаю



Uho
1 - 09.10.2014 - 12:06
0-USSR > удали ВСЮ колонку, потом вставь пустую на ее место и заполни пару ячеек - читать будет?
Гость
2 - 09.10.2014 - 12:18
(0) В адо напрямик к ячейке обратись и прошерсти свойства. Интересующее тебя точно там, где ожидаешь его получить в Селекте?
Гость
3 - 09.10.2014 - 12:20
Попробовал, не читает. Причем там в первой строке были данные (мне не нужные), их читала.
Гость
4 - 09.10.2014 - 12:21
(2)точно там, я по порядку смотрел все ячейки строки. Загадка какая то. Но я еще раз пройдусь в отладчике по этой строке
Гость
5 - 09.10.2014 - 12:30
просмотрел строку, в предыдущей нормальное значение, в нужной мне (7-ая) - ничего и дальше тоже ничего во всех Вставлю что нить в следующие
Гость
6 - 09.10.2014 - 12:33
Из следующей читает, только "H" игнорирует ) сволочь
Гость
7 - 09.10.2014 - 12:40
сделай проверку на
Сп.ДобавитьЗначение("#ПУСТО!");
Сп.ДобавитьЗначение("#ДЕЛ/0!");
Сп.ДобавитьЗначение("#ЗНАЧ!");
Сп.ДобавитьЗначение("#ССЫЛКА!");
СписокОшибокЁкселя.ДобавитьЗначение("#ИМЯ?");
Сп.ДобавитьЗначение("#ЧИСЛО!");
Сп.ДобавитьЗначение("#Н/Д");
//Для англ. версии
Сп.ДобавитьЗначение("#NULL!");
Сп.ДобавитьЗначение("#DIV/0!");
Сп.ДобавитьЗначение("#VALUE!");
Сп.ДобавитьЗначение("#REF!");
Сп.ДобавитьЗначение("#NAME?");
Сп.ДобавитьЗначение("#NUM!");
Сп.ДобавитьЗначение("#N/A");
Гость
8 - 09.10.2014 - 12:53
(7)я не понял куда это воткнуть
Гость
9 - 09.10.2014 - 12:54
проверку на значение в ячейках
Гость
10 - 09.10.2014 - 13:14
(9)я туплю конечно, но не пойму )
Тип значениястр в нужной мне ячейке - пустой
Гость
11 - 09.10.2014 - 13:30
(10) уверен ? :))
ЗЫ я б еще шаблон листа проверил - типа - не зафиксирован ли данный столбец нигде и вопрос - если писАть в ДРУГОЙ лист ?
Гость
12 - 09.10.2014 - 13:36
(11)так я не пишу в этот лист, я читаю из него. ТипЗначенияСтр смотрел в отладке, у предыдущей ячейки "Строка", я значение потом в число преобразую. Я не пойму чем ваше этот лист отличается от соседей
Скажи мне все таки что с кодом (7) делать ?)
Гость
13 - 09.10.2014 - 14:02
(12) проверить ячейки перед чтением на наличие вхождений в данный Список Значений
Uho
14 - 09.10.2014 - 14:24
12-USSR > ну объединение какое-то или что еще
Гость
15 - 09.10.2014 - 14:38
не пойму я что там можно проверить
(14)нет никакого объединения. жесть
Гость
16 - 09.10.2014 - 16:37
проверяй как
ТекстЯчейки=Лист.Cells(Н, Р).Text;
Если Сп.НайтиЗначение(ТекстЯчейки)=0 Тогда
Ячейка = СокрЛП(Лист.Cells(КолИП, Р).Value);
Гость
17 - 09.10.2014 - 17:42
(101)Ты мне по моему пишешь чтение по OLE ) я ж через ADO читаю, какие в нем Cells ?
Гость
18 - 09.10.2014 - 18:51
Короче, получается вот какая фигня. В первой строке колонки "H" заказчиком вбита формула, считающая количество "значащих" строк (то есть помеченных специальными кодами, которые я как раз не могу прочитать). Счет начинается со строки 6. Формула - =СЧЁТЕСЛИ(H6:H1000;"*") На данном листе колонки с H6 по H26 пустые. Если я что-нибудь прописываю в H6 или H7 (дальше не пробовал), то вся колонка начинает прекрасно читаться. Стираю введенный текст, вся колонка читается пустой (кроме H1)
По какой причине ADO так себя ведет ? Я могу конечно переделать все чтение на OLE, но из за такой непонятной фигни неохота, да и в скорости думаю потеряю прилично. Вот такая загогулина
Гость
19 - 10.10.2014 - 07:52
хе, таки про "что то там есть" таки угадал ;))
ЗЫ тоесть во всех остальных листах с этой же формулой все нормально ?
Гость
20 - 10.10.2014 - 07:59
(10)да, нормально Но там непустые ячейки "H", начиная с 6 строки. Не стал ломать, переделал сейчас на OLR, по скорости не замерял, но примерно тоже самое. Все читает, все работает
Гость
21 - 10.10.2014 - 07:59
На OLE
Гость
22 - 10.10.2014 - 08:05
оля да, тормознутая шо ппц
Гость
23 - 10.10.2014 - 08:11
что-то не могу найти как открыть книгу Excel по OLE "только для чтения"
Гость
24 - 10.10.2014 - 08:26
Оо ;))
http://guinpin.narod.ru/excelole.html
бработку:

Эксель.DisplayAlerts = 0;

После выбора файла загружаем его:

Эксель.Workbooks.Open(Файл,0,1);

первый параметр - имя файла;
второй - флаг обновления ссылок. В таблицах могут присутствовать ссылки, например на макросы, хранящиеся в отдельном файле, и т.п. При открытии такого документа эксель интересуется, нужно ли обновлять ссылки. 1 - обновлять, 0 не обновлять. В случае обработки чужих документов, не факт, что есть файл, на который указывает ссылка, значения пересчитывать не требуется, поэтому у меня стоит 0;
третий - режим открытия. 0 - чтение\запись, 1 - только чтение. Чтобы избежать ненужных вопросов при закрытии файла, открываем его в режиме "только чтение".

В моем примере, после открытия файла, загружается список листов книги:
Гость
25 - 10.10.2014 - 08:29
я вроде так и делаю, но при закрытии спрашивает, сохранить ли изменения, хотя я их и не вносил ) Мне как раз для закрытия без вопросов и надо. Щас посмотрю, может из-за второго параиетра криво открывается, я его не указывал
26 - 10.10.2014 - 08:29
(21)
возьми лучше йоксель...
Гость
27 - 10.10.2014 - 08:32
все вроде получилось) Спасибо огромное )
Гость
28 - 10.10.2014 - 08:35
ну его йоксель, хотя я юзаю его для отчетов с группировками и выгружал Excel с его помощью, все работает прекрасно теперь по OLE, все сходится.


К списку вопросов






Copyright ©, Все права защищены