|
В excel поиск пустой ячейки по колонке средствами 1С | ☑ | ||
---|---|---|---|---|
0
bfss-732
19.10.22
✎
11:31
|
Всем привет!
Есть эксель, как проверить в определённой колонке что значение в листе заполнено? Как дойти до пустого значения ячейки и прервать цикл (цикл должен идти внизу по колонке)? Интересует синтаксис OLE. |
|||
1
Fish
19.10.22
✎
11:34
|
Смотря что считать значением. Если в ячейке нет текста, но забита формула - это как считается?
|
|||
2
Fish
19.10.22
✎
11:35
|
+(1) Ну и числовые значения. 0 - это пустая ячейка или нет?
|
|||
3
bfss-732
19.10.22
✎
11:36
|
(1) текст
|
|||
4
Kassern
19.10.22
✎
11:37
|
Раз интересует синтаксис OLE, то вам навеное сюда https://learn.microsoft.com/ru-ru/javascript/api/excel?view=excel-js-preview
|
|||
5
Kassern
19.10.22
✎
11:37
|
*наверное
|
|||
6
mikecool
19.10.22
✎
11:37
|
ЗначениеЗаполнено(блабла.text)
|
|||
7
Fish
19.10.22
✎
11:37
|
(3) Ну тогда всё просто. Если текст в ячейке пустой - то это пустая ячейка.
|
|||
8
bfss-732
19.10.22
✎
11:38
|
(2) пустая, ничего в ней нет, а ноль это ноль
|
|||
9
bfss-732
19.10.22
✎
11:41
|
(6)
Сделал так, но счетчик стал расти до миллионов Для к=1 По Excel.Worksheets.Count Цикл Диапазон = Excel.Worksheets(к).UsedRange; Попытка Найдено = Диапазон.Find("Начисления"); НомерСтрокиТаблицыНачисления = Найдено.Row + 2; Истина1=-1; Исключение Истина1=0; КонецПопытки; Счетчик = 0; НачальнаяСтрока = НомерСтрокиТаблицыНачисления; //КолонкаКода = 7; //КолонкаКоличества = 24; КолонкаНаименования = 1; ЗначениеЯчейки = Лист.Cells(НачальнаяСтрока + Счетчик, КолонкаНаименования).Value; // ЗначениеЯчейки Пока ЗначениеЗаполнено(ЗначениеЯчейки) Цикл Счетчик = Счетчик + 1; КонецЦикла; Сообщить (Счетчик); КонецЦикла; |
|||
10
Builder
19.10.22
✎
11:43
|
получение количества ячеек и колонок на листе:
зависит от версии экселя. Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1); Если Версия = "8" тогда ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count; ФайлКолонок = Excel.Cells.CurrentRegion.Columns.Count; Иначе ФайлСтрок = Excel.Cells(1,1).SpecialCells(11).Row; ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column; Конецесли; |
|||
11
Fish
19.10.22
✎
11:43
|
(9) Жесть. Убери бесконечный цикл и будет счастье.
|
|||
12
Kassern
19.10.22
✎
11:46
|
(9) "Пока ЗначениеЗаполнено(ЗначениеЯчейки) Цикл
Счетчик = Счетчик + 1; КонецЦикла; " - В помойку Если ЗначениеЗаполнено(ЗначениеЯчейки) Тогда Счетчик = Счетчик + 1; КонецЕсли; И да, чем вас Табличный документ не устроил для решения это задачи? |
|||
13
Fish
19.10.22
✎
11:49
|
Ну и для прерывания цикла необходимо использовать команду "Прервать"
|
|||
14
bfss-732
19.10.22
✎
11:51
|
(10) Microsoft Excel Worksheet (.xlsx)
|
|||
15
Kassern
19.10.22
✎
11:52
|
(13) Тут вообще нет нужды в бесконечном цикле
|
|||
16
Builder
19.10.22
✎
11:57
|
(14) Там в коде проверка есть :)
|
|||
17
Fish
19.10.22
✎
11:59
|
(15) Тут два варианта решения - либо идти в цикле строкам до конца листа, и прерывать цикл по первому пустому значению, либо использовать конструкцию Пока значение не пустое, тогда прерывать не нужно.
|
|||
18
bfss-732
19.10.22
✎
12:06
|
(17) Нашел через отладчик на "заполненость" текста WrapText. Но как определить что поиск идет по циклу по колонке внизу, а не в бок?
Пока Лист.Cells(НачальнаяСтрока + Счетчик, КолонкаНаименования).WrapText Цикл Счетчик = Счетчик + 1; КонецЦикла; Сообщить (Счетчик); |
|||
19
Fish
19.10.22
✎
12:07
|
(18) "как определить что поиск идет по циклу по колонке внизу, а не в бок?" - Переведи на русский.
|
|||
20
bfss-732
19.10.22
✎
12:10
|
(18) Так вроде прокатило)))
|
|||
21
bfss-732
19.10.22
✎
12:12
|
(19) Таблица эскель, она ж таблица, а не колонка. Циклом как перебирается? Может цикл по горизонтали строку перебирать, а мне нужно колонку, значит по вертикали
|
|||
22
bfss-732
19.10.22
✎
12:13
|
(18) еще б получить номер строки на чем прервался
|
|||
23
Fish
19.10.22
✎
12:16
|
(21) Ну и? У тебя же написано ЗначениеЯчейки = Лист.Cells(НачальнаяСтрока + Счетчик, КолонкаНаименования).Value
НачальнаяСтрока+Счетчик - это строки, а КолонкаНаименования - это номер колонки. Как построишь цикл, так и будешь обходить. Либо по строке, либо по колонке. |
|||
24
Fish
19.10.22
✎
12:16
|
+(23) А вообще, посмотри https://infostart.ru/public/398279/ . Думаю, пригодится.
|
|||
25
Kassern
19.10.22
✎
12:23
|
Что мешает сделать так, без всяких ОЛЕ и прочих ком объектов?
ТабДок=Новый ТабличныйДокумент; ТабДок.Прочитать(ИмяФайла,СпособЧтенияЗначенийТабличногоДокумента.Текст); КолСтрок=ТабДок.ПолучитьРазмерОбластиДанныхПоВертикали(); Для к=1 По КолСтрок Цикл ТекстВЯчейке=ТабДок.ПолучитьОбласть(к,НомерНужнойКолонки,к,НомерНужнойКолонки).ТекущаяОбласть.Текст; Если Не ЗначениеЗаполнено(ТекстВЯчейке) Тогда Прервать; КонецЕсли; КонецЦикла; // в к - будет количество строк с заполненными данными по нужной колонке. Если нужно всю колонку пройти, то без прервывания, добавить свой счетчик. |
|||
26
bfss-732
19.10.22
✎
12:36
|
(25) у меня в экселе зашито 3 разных таблиц (разное количество колонок и названия их) отчета (так сделали, выгрузка такая).
Мне нужно это все считать в обработке, а потом уже документ сделать из всех этих данных. Понятно, что сложность считать, т.к. отчет никто переделывать не будет, а эти три таблицы, надо найти OLE |
|||
27
Fish
19.10.22
✎
12:39
|
(26) ссылку в (24) смотрел?
|
|||
28
bfss-732
19.10.22
✎
13:05
|
(27) да, ранее находил
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |