Имя: Пароль:
1C
1С v8
В 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) да, ранее находил