Имя: Пароль:
1C
 
из XLS в 1С - как узнать количество строк в XLS ?
Ø
0 ТаверСети
 
22.04.05
12:14
  Попытка
    Прайс = Новый ComОбъект("Excel.Application");
  Исключение
    Предупреждение("Не удалось создать COM-объект Excel.Application!!!");
    Возврат;
  КонецПопытки;
  Попытка
    Книга = Прайс.WorkBooks().Open(ИмяФайла);
  Исключение
    Предупреждение("" + ОписаниеОшибки());
    Возврат;
  КонецПопытки;
  
  ну че тутуа писать????
  
  
  Книга.Close();
1 miki
 
22.04.05
12:15
65k.
Или тебе только не пустые?
2 ТаверСети
 
22.04.05
12:16
miki
ну чтобы точно понятно что дальше ничего нету
3 miki
 
22.04.05
12:18
Проверяй значение ячейки на <пусто> или маркер какой-нить пиши в конец ХЛС.
4 ТаверСети
 
22.04.05
12:18
miki (3)
нифина был другой способ
мне тута каньше ктото обьяснил но я забыл
а в архивах нету
5 Ret
 
22.04.05
12:21
ВходExcel = СоздатьОбъект("Excel.Application");
НужныйЛист=ВходExcel.Worksheets.Item(ЛистExcel);
КонСтрока=НужныйЛист.Cells(1,1).SpecialCells(11).Row;
КонСтолбец=НужныйЛист.Cells(1,1).SpecialCells(11).Column;
....
а далее все обходы по строкам и столбцам через циклы.
6 ТаверСети
 
22.04.05
12:23
Ret(5)
НужныйЛист=ВходExcel.Worksheets.Item(ЛистExcel);
вот ето место пожалуйста поподробнее.
как получить 1-й лист?
7 Ret
 
22.04.05
12:25
+5 Как пример
//*******************************************
//проверяет есть ли нужные сведения на листе
Функция ПроверкаПередзагрузкой(ВыбранныйЛист,НомерЛиста);
  ЕстьНужныеСведения=0;
  КонСтолб=ВыбранныйЛист.Cells(1,1).SpecialCells(11). Column;
  Для i = НачСтр По КонСтр Цикл
    Если ПустоеЗначение(ВыбранныйЛист.Cells(i,3).Text)=1 Тогда
      Продолжить;
    Иначе
      Для к=1 по КонСтолб Цикл
        //Проверим ячейки на всякую дрянь
        Если ПроверкаБитыхСсылок(ВыбранныйЛист.Cells(i,к))=1 Тогда
          ВнестиВКомментарийЗагрузки("На выбранном вами листе №"+НомерЛиста+" имеются ошибки.Лист не будет загружен");
          Возврат ЕстьНужныеСведения;
        КонецЕсли;
      КонецЦикла;
      Если //Возможно это индетификаторы колонок
      (Число(ВыбранныйЛист.Cells(i,3).Value)=3)
      и (Число(ВыбранныйЛист.Cells(i,1).Value)=1)
      и (Число(ВыбранныйЛист.Cells(i,2).Value)=2)
      и (Число(ВыбранныйЛист.Cells(i,4).Value)=4)
      и (Число(ВыбранныйЛист.Cells(i,5).Value)=5)
      и (Число(ВыбранныйЛист.Cells(i,6).Value)=6)
      и (Число(ВыбранныйЛист.Cells(i,7).Value)=7)
      и (Число(ВыбранныйЛист.Cells(i,8).Value)=8)
      и (Число(ВыбранныйЛист.Cells(i,9).Value)=9)
      и (Число(ВыбранныйЛист.Cells(i,10).Value)=10)
      и (Число(ВыбранныйЛист.Cells(i,11).Value)=11)
      и (Число(ВыбранныйЛист.Cells(i,12).Value)=12)
      и (Число(ВыбранныйЛист.Cells(i,13).Value)=13)
      и (Число(ВыбранныйЛист.Cells(i,14).Value)=14)
      и (Число(ВыбранныйЛист.Cells(i,15).Value)=15)
      и (Число(ВыбранныйЛист.Cells(i,16).Value)=16)
      и (Число(ВыбранныйЛист.Cells(i,17).Value)=17)
      Тогда //наверное то что нам нужно
        ЕстьНужныеСведения=1;
        Возврат ЕстьНужныеСведения;
      КонецЕсли;
    КонецЕсли;
  КонецЦикла;
  Возврат ЕстьНужныеСведения;
КонецФункции // ПроверкаПередзагрузкой
//Проверим, а есть ли нужные данные
  Если ПроверкаПередзагрузкой(НужныйЛист,ЛистExcel)=0 Тогда
    Предупреждение("На выбранном вами листе нет нужных сведений",5);
    Возврат;
  КонецЕсли;
МаксимумПустыхСтрок=25;//чтобы просмотреть все строки, но не зациклиться
  СчетчикПустыхСтрок=0;//т.к. м.б. какие-либо строки оставлены пустыми для разделения и прочей красивости
  НайденыйСтатус="";
    Для index=НачСтр По КонСтр Цикл // обход по строкам
      ЗначениеКолонки1 = НужныйЛист.Cells(index,1).Value;
      Если ПустоеЗначение(ЗначениеКолонки1)=1 Тогда //чтобы побыстрее просмотреть
        СчетчикПустыхСтрок=СчетчикПустыхСтрок+1;
        Если СчетчикПустыхСтрок>МаксимумПустыхСтрок Тогда //хорош копать
          СчетчикПустыхСтрок=0;
          Прервать;
        Иначе
          Продолжить;
        КонецЕсли;
      Иначе //не пустое значение 1колонки
................
ну и т.д.
8 Ret
 
22.04.05
12:27
+5 и еще
//*******************************************
//проверяет нет ли всякой бяки на в ячейке
Функция ПроверкаБитыхСсылок(Ячейка)
  БитаяСсылка="";
  ТекстЯчейки=Ячейка.Text;
  Если СписокОшибокЁкселя.НайтиЗначение(ТекстЯчейки)=0 Тогда
    БитаяСсылка=0;
    //Сообщить(Ячейка.Value);
  Иначе
    БитаяСсылка=1;
    //Сообщить(ТекстЯчейки);
  КонецЕсли;
  Возврат БитаяСсылка;
КонецФункции // ПроверкаБитыхСсылок
--------------------------------------------
это основные операторы модуля
//Для исключения ошибок екселя
СписокОшибокЁкселя=СоздатьОбъект("СписокЗначений");
СписокОшибокЁкселя.ДобавитьЗначение("#ПУСТО!");
СписокОшибокЁкселя.ДобавитьЗначение("#ДЕЛ/0!");
СписокОшибокЁкселя.ДобавитьЗначение("#ЗНАЧ!");
СписокОшибокЁкселя.ДобавитьЗначение("#ССЫЛКА!");
СписокОшибокЁкселя.ДобавитьЗначение("#ИМЯ?");
СписокОшибокЁкселя.ДобавитьЗначение("#ЧИСЛО!");
СписокОшибокЁкселя.ДобавитьЗначение("#Н/Д");
9 ТаверСети
 
22.04.05
12:34
Ret(5)
НужныйЛист=ВходExcel.Worksheets.Item(ЛистExcel);
вот ето место пожалуйста поподробнее.
как получить 1-й лист?
10 ТаверСети
 
22.04.05
12:36
мне раньше показывали способ как
узнать количество непустых строк.
11 Lex1C
 
22.04.05
12:39
9 - Метод Sheets(НомерЛиста)
12 Ret
 
22.04.05
12:52
(9)
КоличествоЛистов=ВходExcel.Worksheets.Count;
Для i=1 По КоличествоЛистов Цикл
13 ТаверСети
 
22.04.05
13:01
не сегодня чета нету умных...
14 Железяка
 
22.04.05
13:02
(13)Предупреждение
15 Ret
 
22.04.05
13:05
Мля, итак уже все разжевал...
Ты чо?
КоличествоЛистов=ВходExcel.Worksheets.Count;
Для i=1 По КоличествоЛистов Цикл
НужныйЛист=ВходExcel.Worksheets.Item(i);
.........и т.д.
16 ТаверСети
 
22.04.05
13:07
Ret(15)
как узнать номер последней не пустой строки?
17 ТаверСети
 
22.04.05
13:09
  НужныйЛист=Книга.Sheets(1);
  КонСтрока=НужныйЛист.Cells(1,1).SpecialCells(11).Row;
  КонСтолбец=НужныйЛист.Cells(1,1).SpecialCells(11).Column;
  Для поз=1 по КонСтрока Цикл
    Строка=НужныйЛист.Cells(поз,1).Value;
    Сообщить(""+поз+"="+Строка);
  КонецЦикла;
=========================
нехочет работать
18 Ret
 
22.04.05
13:11
(13)
Я конечно привожу куски кода, который уже заточен под мои задачи, но из них вполне можно понять логику и использовать под себя.
Когда сам писал это, не мало пришлось покапаться в доках, а тебе выкладываешь на тарелочке, а ты разобраться не можешь.
За тебя-то никто не будет делать. Смотри, разбирайся и делай.
19 miki
 
22.04.05
13:15
Может тебе надо:
  РеальноЮзается=Лист.UsedRange;
  КолонокРеальноЮзаемых=ИспользуемыйЛист.Columns.Count();
  СтрокРеальноЮзаемых=ИспользуемыйЛист.Rows.Count();
20 Ret
 
22.04.05
13:15
Мля.... я тащусь....
НужныйЛист=ВходExcel.Worksheets.Item(ЛистExcel);
КонСтр=НужныйЛист.Cells(1,1).SpecialCells(11).Row;
КонСтолб=НужныйЛист.Cells(1,1).SpecialCells(11).Column;
Для index=НачСтр По КонСтр Цикл // обход по строкам
Для index2 = 1 По КонСтолб Цикл //обход по колонкам
Значение = НужныйЛист.Cells(index,index2).Value;
------далее работаешь со значением
---------- и т.д. (шо тебе ящо конец цикла написать?)
21 ТаверСети
 
22.04.05
13:16
короче ето делается так.
=====================
Процедура ЗагрузитьНажатие(Элемент)
  Попытка
    Прайс = Новый ComОбъект("Excel.Application");
  Исключение
    Предупреждение("Не удалось создать COM-объект Excel.Application!!!");
    Возврат;
  КонецПопытки;
  Попытка
    Книга = Прайс.WorkBooks().Open(ИмяФайла);
  Исключение
    Предупреждение("" + ОписаниеОшибки());
    Возврат;
  КонецПопытки;
  
  
  НужныйЛист=Книга.Sheets(1);
  //НужныйЛист=Прайс.Worksheets.Item(1);
  КонСтрока=НужныйЛист.Cells(1,1).SpecialCells(11).Row;
  КонСтолбец=НужныйЛист.Cells(1,1).SpecialCells(11).Column;
  Для поз=1 по КонСтрока Цикл
    Строка=НужныйЛист.Cells(поз,1).Value;
    Сообщить(""+поз+"="+Строка);
  КонецЦикла;
  
  
  Книга.Close();
КонецПроцедуры
============================
ето я чета туплю сегодня
спасибо за ответ Ret-у
22 Ret
 
22.04.05
13:27
Cells(1,1).SpecialCells(11).Row -последняя не пустая строка
Cells(1,1).SpecialCells(11).Column - последний не пустой столбец
и еще выше я привел процеДУРУ ПроверкаБитыхСсылок(Ячейка) привел.
Перед загрузкой если там ошибки, то на Значение = НужныйЛист.Cells(index,index2).Value 1С вылетает. Поэтому их надо обязательно отсечь!!!
Не помню где это описано, но это известная весчь.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.