Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   к знатокам ADODB (http://forums.kuban.ru/f1040/k_znatokam_adodb-6164464.html)

USSR 09.10.2014 12:01

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

Uho 09.10.2014 12:06

0-USSR > удали ВСЮ колонку, потом вставь пустую на ее место и заполни пару ячеек - читать будет?

roma n 09.10.2014 12:18

(0) В адо напрямик к [b]ячейке[/b] обратись и прошерсти свойства. Интересующее тебя точно там, где ожидаешь его получить в Селекте?

USSR 09.10.2014 12:20

Попробовал, не читает. Причем там в первой строке были данные (мне не нужные), их читала.

USSR 09.10.2014 12:21

(2)точно там, я по порядку смотрел все ячейки строки. Загадка какая то. Но я еще раз пройдусь в отладчике по этой строке

USSR 09.10.2014 12:30

просмотрел строку, в предыдущей нормальное значение, в нужной мне (7-ая) - ничего и дальше тоже ничего во всех Вставлю что нить в следующие

USSR 09.10.2014 12:33

Из следующей читает, только "H" игнорирует ) сволочь

101 09.10.2014 12:40

сделай проверку на
Сп.ДобавитьЗначение("#ПУСТО!");
Сп.ДобавитьЗначение("#ДЕЛ/0!");
Сп.ДобавитьЗначение("#ЗНАЧ!");
Сп.ДобавитьЗначение("#ССЫЛКА!");
СписокОшибокЁкселя.ДобавитьЗначение("#ИМЯ?");
Сп.ДобавитьЗначение("#ЧИСЛО!");
Сп.ДобавитьЗначение("#Н/Д");
//Для англ. версии
Сп.ДобавитьЗначение("#NULL!");
Сп.ДобавитьЗначение("#DIV/0!");
Сп.ДобавитьЗначение("#VALUE!");
Сп.ДобавитьЗначение("#REF!");
Сп.ДобавитьЗначение("#NAME?");
Сп.ДобавитьЗначение("#NUM!");
Сп.ДобавитьЗначение("#N/A");

USSR 09.10.2014 12:53

(7)я не понял куда это воткнуть

101 09.10.2014 12:54

проверку на значение в ячейках

USSR 09.10.2014 13:14

(9)я туплю конечно, но не пойму )
Тип значениястр в нужной мне ячейке - пустой

101 09.10.2014 13:30

(10) уверен ? :))
ЗЫ я б еще шаблон листа проверил - типа - не зафиксирован ли данный столбец нигде и вопрос - если писАть в ДРУГОЙ лист ?

USSR 09.10.2014 13:36

(11)так я не пишу в этот лист, я читаю из него. ТипЗначенияСтр смотрел в отладке, у предыдущей ячейки "Строка", я значение потом в число преобразую. Я не пойму чем ваше этот лист отличается от соседей
Скажи мне все таки что с кодом (7) делать ?)

101 09.10.2014 14:02

(12) проверить ячейки перед чтением на наличие вхождений в данный Список Значений

Uho 09.10.2014 14:24

12-USSR > ну объединение какое-то или что еще

USSR 09.10.2014 14:38

не пойму я что там можно проверить
(14)нет никакого объединения. жесть

101 09.10.2014 16:37

проверяй как
ТекстЯчейки=Лист.Cells(Н, Р).Text;
Если Сп.НайтиЗначение(ТекстЯчейки)=0 Тогда
Ячейка = СокрЛП(Лист.Cells(КолИП, Р).Value);

USSR 09.10.2014 17:42

(101)Ты мне по моему пишешь чтение по OLE ) я ж через ADO читаю, какие в нем Cells ?

USSR 09.10.2014 18:51

Короче, получается вот какая фигня. В первой строке колонки "H" заказчиком вбита формула, считающая количество "значащих" строк (то есть помеченных специальными кодами, которые я как раз не могу прочитать). Счет начинается со строки 6. Формула - =СЧЁТЕСЛИ(H6:H1000;"*") На данном листе колонки с H6 по H26 пустые. Если я что-нибудь прописываю в H6 или H7 (дальше не пробовал), то вся колонка начинает прекрасно читаться. Стираю введенный текст, вся колонка читается пустой (кроме H1)
По какой причине ADO так себя ведет ? Я могу конечно переделать все чтение на OLE, но из за такой непонятной фигни неохота, да и в скорости думаю потеряю прилично. Вот такая загогулина

101 10.10.2014 07:52

хе, таки про "что то там есть" таки угадал ;))
ЗЫ тоесть во всех остальных листах с этой же формулой все нормально ?

USSR 10.10.2014 07:59

(10)да, нормально Но там непустые ячейки "H", начиная с 6 строки. Не стал ломать, переделал сейчас на OLR, по скорости не замерял, но примерно тоже самое. Все читает, все работает

USSR 10.10.2014 07:59

На OLE

101 10.10.2014 08:05

оля да, тормознутая шо ппц

USSR 10.10.2014 08:11

что-то не могу найти как открыть книгу Excel по OLE "только для чтения"

101 10.10.2014 08:26

Оо ;))
[url]http://guinpin.narod.ru/excelole.html[/url]
бработку:

Эксель.DisplayAlerts = 0;

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

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

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

В моем примере, после открытия файла, загружается список листов книги:

USSR 10.10.2014 08:29

я вроде так и делаю, но при закрытии спрашивает, сохранить ли изменения, хотя я их и не вносил ) Мне как раз для закрытия без вопросов и надо. Щас посмотрю, может из-за второго параиетра криво открывается, я его не указывал

user1C 10.10.2014 08:29

(21)
возьми лучше йоксель...

USSR 10.10.2014 08:32

все вроде получилось) Спасибо огромное )

USSR 10.10.2014 08:35

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


Текущее время: 06:57. Часовой пояс GMT +3.