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