Как получить количество строк в excel 1с

   ТаверСети

22.04.05 — 12:14

  Попытка
    Прайс = Новый ComОбъект(«Excel.Application»);
  Исключение
    Предупреждение(«Не удалось создать COM-объект Excel.Application!!!»);
    Возврат;
  КонецПопытки;
  Попытка
    Книга = Прайс.WorkBooks().Open(ИмяФайла);
  Исключение
    Предупреждение(«» + ОписаниеОшибки());
    Возврат;
  КонецПопытки;

    ну че тутуа писать????

      Книга.Close();

   miki

1 — 22.04.05 — 12:15

65k.
Или тебе только не пустые?

   ТаверСети

2 — 22.04.05 — 12:16

miki
ну чтобы точно понятно что дальше ничего нету

   miki

3 — 22.04.05 — 12:18

Проверяй значение ячейки на <пусто> или маркер какой-нить пиши в конец ХЛС.

   ТаверСети

4 — 22.04.05 — 12:18

miki (3)
нифина был другой способ
мне тута каньше ктото обьяснил но я забыл
а в архивах нету

   Ret

5 — 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-й лист?

   Ret

7 — 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колонки
…………….
ну и т.д.

   Ret

8 — 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

мне раньше показывали способ как
узнать количество непустых строк.

   Lex1C

11 — 22.04.05 — 12:39

9 — Метод Sheets(НомерЛиста)

   Ret

12 — 22.04.05 — 12:52

(9)
КоличествоЛистов=ВходExcel.Worksheets.Count;
Для i=1 По КоличествоЛистов Цикл

   ТаверСети

13 — 22.04.05 — 13:01

не сегодня чета нету умных…

   Железяка

14 — 22.04.05 — 13:02

(13)Предупреждение

   Ret

15 — 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;
    Сообщить(«»+поз+»=»+Строка);
  КонецЦикла;
=========================
нехочет работать

   Ret

18 — 22.04.05 — 13:11

(13)
Я конечно привожу куски кода, который уже заточен под мои задачи, но из них вполне можно понять логику и использовать под себя.
Когда сам писал это, не мало пришлось покапаться в доках, а тебе выкладываешь на тарелочке, а ты разобраться не можешь.
За тебя-то никто не будет делать. Смотри, разбирайся и делай.

   miki

19 — 22.04.05 — 13:15

Может тебе надо:
  РеальноЮзается=Лист.UsedRange;
  КолонокРеальноЮзаемых=ИспользуемыйЛист.Columns.Count();
  СтрокРеальноЮзаемых=ИспользуемыйЛист.Rows.Count();

   Ret

20 — 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-у

Cells(1,1).SpecialCells(11).Row -последняя не пустая строка
Cells(1,1).SpecialCells(11).Column — последний не пустой столбец
и еще выше я привел процеДУРУ ПроверкаБитыхСсылок(Ячейка) привел.
Перед загрузкой если там ошибки, то на Значение = НужныйЛист.Cells(index,index2).Value 1С вылетает. Поэтому их надо обязательно отсечь!!!
Не помню где это описано, но это известная весчь.

escritor
30.09.2009 12:45 Прочитано: 24255

Как при загрузке данных из Excel получить количество колонок и строк в файле?

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
01.10.2009 01:44 Ответ № 1

Например так:
Код 1C v 8.х

 НашФайл.Sheets.Item(к).UsedRange.Columns.Count();   //Количество колонок
НашФайл.Sheets.Item(к).UsedRange.Rows.Count(); //Количество строк

Посмотрите пример, в котором это используется

demiurg
05.10.2009 12:14 Ответ № 2

О, только вчера над этим же голову ломал, я получил так:
Код 1C v 8.х

 Попытка
гл_appExcel = Новый COMObject("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки() + "Не удалось найти приложение Microsoft Excel!");
Попытка
ПолноеИмяФайла = "C:ЗаявкиПоступившиеtemp.xls";
exWorkBook = гл_appExcel.Workbooks.Open(ПолноеИмяФайла);
Исключение
Сообщить(ОписаниеОшибки() + " Не удалось открыть файл " + ПолноеИмяФайла);
КонецПопытки;
RangeAll = exWorkBook.ActiveSheet.UsedRange;
// Определим количество всех строк и колонок
ЧислоКолонок = RangeAll.Columns.Count;
ЧислоСтрок= RangeAll.Rows.Count;
//Получение данных о контрагенте
КодКонтрагента = СокрЛП(RangeAll.Cells( 8, 4 ).Text);
ИмяКонтрагента = СокрЛП(RangeAll.Cells( 7, 4 ).Text);
rasswet
07.10.2009 09:14 Ответ № 3

UsedRange -это заполненые?
RangeAll -это все?
если в документе есть столбцы в которых были данные, но они были удалены через del, т.е. там пусто. какой из методов корректно это опознает?

demiurg
07.10.2009 16:39 Ответ № 4

UsedRange — это все ячейки содержащие значение на данный момент.
Если был нажат del, то это пустая ячейка, то есть нет значений.

E_Migachev
25.10.2009 22:49 Ответ № 5

Подсказка: Вы можете приложить к ответу файл или изображение щелкнув по значку или в редакторе.
 Excel = Новый COMОбъект("Excel.application");
 Excel.WorkBooks.Open(ПолноеИмяФайла);
 Лист = Excel.Sheets(1); // Первый лист по индексу
Excel.DisplayAlerts = False;
 ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
 ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
 Excel.Application.Quit();
 Строка = Лист.Cells(Строка, Колонка).Value;

Нумерация колонок и строк начинается с 0!

 OpenOffice = Новый ComОбъект("com.sun.star.ServiceManager"); // Создаем СОМ-объект
 
 scr = Новый ComОбъект("MSScriptControl.ScriptControl");    
 scr.language = "javascript";
 scr.eval("MassivParametrov = new Array()");
 MassivParametrov = scr.eval("MassivParametrov");
 scr.AddObject("OpenOffice", OpenOffice);
 scr.eval("MassivParametrov[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
 scr.eval("MassivParametrov[0].Name='Hidden'");
 scr.eval("MassivParametrov[0].Value=true");
 
 Desktop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop"); // Создаем Desktop
 URL = ConvertToURL(ПолноеИмяФайла); // Правильно формируем имя файла
 Doc = Desktop.LoadComponentFromURL(URL, "_blank", 0, MassivParametrov);
 
 Doc.lockControllers();
 Doc.addActionLock();
 
 Sheets = Doc.GetSheets();
 Лист = Sheets.GetByIndex(0); // Открываем первый лист по индексу

и функция ConvertToURL:

// Для преобразования имени файла при обращении к OpenOffice/LibreOffice
Функция ConvertToURL(FileName)
 ИмяФайла =  СтрЗаменить(FileName," ","%20" );
 ИмяФайла =  СтрЗаменить(ИмяФайла,"","/");
 Возврат "file:/" + "/localhost/" + ИмяФайла;
КонецФункции
 oCell = Лист.GetCellbyPosition(0, 0);
 oCursor = Лист.createCursorByRange(oCell);
 oCursor.GotoEndOfUsedArea(Истина);
 aAddress = oCursor.RangeAddress;
 ВсегоКолонок = aAddress.EndColumn;
 ВсегоСтрок = aAddress.EndRow;
 Doc.close(true);
 Desktop.terminate();

Читаем как строку:

 Строка = Лист.getCellByPosition(Колонка,Строка).getText().String();

http://help1c.com/faq8/view/702.html

Данный метод обладает гораздо большей производительностью и простотой, чем банальный объектный метод через COM соединение.

Все что потребуется это создание 2 объектов

Здесь универсальная обработка по загрузке Номенклатуры из Excel:

// Функция для Платформы 1С 8.0 или 8.1
// Выполняет загрузку из файла Excel
//
// Параметры
//  ПутьКФайлу  - <Строка>            - путь к файлу xls
//
// Автор: ---%%%Gmix 16.03.2006 12:38:48
//     
// Возвращаемое значение:
//   <Булево>   – Истина загрузка произошла
//                                             - Ложь загрузки не было
//
Функция ВыполнитьЗагрузку(ПутьКФайлу) Экспорт
 
            Файл=Новый Файл(ПутьКФайлу);
 
            Если Файл.Существует() Тогда
                        Стр_Файл=Файл.ПолноеИмя;
 
                        // Отрезаем слеш если он есть в конце пути
                        Стр_Путь=Файл.Путь;
                        Если Прав(Стр_Путь,1)="" Тогда
                                   Стр_Путь=Лев(Стр_Путь,СтрДлина(Стр_Путь)-1);
                        КонецЕсли;
 
                        // Строка корнекта
                        Стр_Конект = "Driver={Microsoft Excel Driver (*.xls)};
                    |DriverId=790;
                    |Dbq="+Стр_Файл+";
                    |DefaultDir="+Стр_Путь+";"; 
                        Об_Конект = Новый COMОбъект("ADODB.Connection");
                        Попытка
                                    Об_Конект.Open(Стр_Конект);           
                        Исключение
                                   Сообщить ("Не возможно подключится к Microsoft Excel Driver!!!
                                   |Возможно файл ["+Стр_Файл+"] открыт другим пользователем.");
                                   Возврат Ложь;
                        КонецПопытки;
 
                        // формируем запрос
                        // Здесь есть нюанс первая строка данных всегда будет являться заголовком
// если она пустая то имена клонок формируются следующим образом F<Номер колонки>
                        Стр_SQL = "select
                |     F1 as Артикул,
                |     F2 as Наименование,
                |     F3 as ПолноеНаименование
                | FROM [A1:AZ100000]
                | WHERE ((F1 Is Not Null) AND (F1 <>''))";
                Об_РекордСет = Новый COMОбъект("ADODB.Recordset");
 
                        Попытка
                                   Об_РекордСет=Об_Конект.Execute(Стр_SQL);
                        Исключение
                                   Сообщить("Не удадлось выполнить запрос к файлу Excel
                                   |"+ ОписаниеОшибки(),СтатусСообщения.Важное);
                                   Возврат Ложь;
                        КонецПопытки;
 
 
                        Пока НЕ Об_РекордСет.EOF Цикл
                                  // Получаем данные из Об_РекордСет
                                   // ...
                      Сообщить("");
                                   Для каждого ОБ_Поле Из Об_РекордСет.Fields Цикл
                // Пример вывода информации Сообщить(ОБ_Поле.Name,Об_РекордСет.Fields(ОБ_Поле.Name).value); 
                                   КонецЦикла;
                                   // ...
                                   Об_РекордСет.MoveNext();
                        КонецЦикла;
 
                        Об_Конект.Close();     // Закрываем конект
                        Об_Конект=Неопределено;
                        Об_РекордСет=Неопределено;
 
                        Возврат Истина;
            Иначе
                        Сообщить("Файл "+ПутьКФайлу+" не найден!");
                        Возврат Ложь;
            КонецЕсли;
КонецФункции    
// OldthiefXXX
Перем СерверExcel;
 
Процедура КнопкаВыполнитьНажатие(Кнопка)
 ФайлХЛС=СерверExcel.Application.Workbooks.Open(ДокументХЛС);
 КонечнаяСтрокаДанных=ФайлХЛС.ActiveSheet.UsedRange.Rows.Count; 
 КоличествоКолонокДанных=ФайлХЛС.ActiveSheet.UsedRange.Columns.Count; 
 Состояние("Загрузка в память данных ведомости...");
 ExcelЛист=ФайлХЛС.ActiveSheet;
 Область = СерверExcel.Range(ExcelЛист.Cells(1,1), ExcelЛист.Cells(КонечнаяСтрокаДанных,КоличествоКолонокДанных));
 МассивДанныхEXEL = Область.Value.Выгрузить();
КонецПроцедуры
 
Процедура ИнициализацииЕкселя()
Состояние("Происходит инициализация EXCEL...");
Попытка 
 СерверExcel1 = Новый COMОбъект("Excel.Application");
 СерверExcel1.DisplayAlerts = 0;
Исключение       
 ЗапущенExcel = 0;
 Сообщить(ОписаниеОшибки(),"!");
КонецПопытки;
КонецПроцедуры   

Чтение и запись данных MS Excel с использованием 1С, примеры форматирования таблицы

Часто возникает потребность прочитать данные из таблицы MS
Excel или из источника 1С записать (выгрузить) данные в книгу MS Excel. Можно ли средствами 1С решить эти задачи? Ответ прост — можно и это не особо затруднительно.
Чтение данных по большому счету вообще не представляет больших проблем. При выгрузке данных в MS Excel возможны некоторые трудности, что может быть связано с особенностями VBA.
Для выгрузки данных из 1С в MS Excel можно воспользоваться заранее созданным шаблоном или, если состав данных не известен до самой выгрузки, создать файл MS Excel на ходу.
Здесь будет приведен пример чтения данных из файла MS Excel и выгрузки данных с созданием файла.

Допустим, стоит задача прочитать данные из файла MS Excel, каким-то образом их обработать и выгрузить полученный результат в другой файл MS Excel.
Открываем конфигуратор и создаем новую внешнюю обработку.

Создание новой внешней обработки

Добавляем форму обработку и на нее помещаем две кнопки: Загрузить данные и Выгрузить данные. Поскольку цель данного примера показать приемы работы с загрузкой и выгрузкой данных в файл MS Excel, то на форму промежуточные данные выводить не будем.
Они будут помещены в таблицу значений и затем выгружены из нее.

Создание кнопок на форме внешней обработки

Теперь поместим в обработчики кнопкок «Загрузить данные» и «Выгрузить данные»функционал чтения данных из файла MS Excel.

В обработчиках кнопок получается следующий код:

Процедура ЗагрузитьДанныеНажатие(Элемент)
	
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.Заголовок = "Выберите имя файла для чтения";
	Диалог.МножественныйВыбор = Ложь;
	Диалог.Фильтр = "Файл MS Excel (.xlsx)| *.xlsx";
	
	
	Если Не Диалог.Выбрать() Тогда
		Сообщить("Файл для обработки не выбран!");
	Иначе
		
		ФайлДанных = Диалог.ПолноеИмяФайла;
		Попытка
			Excel = Новый COMОбъект("Excel.Application");
			Excel.WorkBooks.Open(ФайлДанных);
			Состояние("Обработка файла Microsoft Excel...");
		Исключение
			Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
			Сообщить(ОписаниеОшибки());
			Возврат;
		КонецПопытки;

		Попытка
			
			Excel.Sheets(1).Select(); 
		Исключение
			
			Excel.ActiveWorkbook.Close();
			Excel = 0;
			Сообщить("Файл " + Строка(ФайлДанных) + " не соответствует необходимому формату! Первый лист не найден!");
			Возврат;
		КонецПопытки;

		
		Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1);
		Если Версия = "8" Тогда
			ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count;
			ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
		Иначе
			ФайлСтрок = Excel.Cells(1,1).SpecialCells(11).Row;
			ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column;
		КонецЕсли;
		
		ТЗ.Очистить();
		
		Попытка 
			Для Сч = 2 По ФайлСтрок Цикл
				Состояние("Обрабатывается строка " + Строка(Сч) + " из " + Строка(ФайлСтрок));
				Если НЕ СокрЛП(Excel.Cells(Сч, 1).Value) = ""  Тогда
					НоваяСтрока = ТЗ.Добавить();
					НоваяСтрока.НомерПоПорядку 	= СокрЛП(Excel.Cells(Сч, 1).Value);
					НоваяСтрока.ТестовыйТекст 	= СокрЛП(Excel.Cells(Сч, 2).Text);
					НоваяСтрока.ТестовоеЧисло1 	= СокрЛП(Excel.Cells(Сч, 3).Value);
					НоваяСтрока.ТестовоеЧисло2 	= СокрЛП(Excel.Cells(Сч, 4).Value);
					НоваяСтрока.ТестовоеЧисло3 	= СокрЛП(Excel.Cells(Сч, 5).Value);
					НоваяСтрока.ТестовоеЧисло4 	= СокрЛП(Excel.Cells(Сч, 6).Value);
					НоваяСтрока.ТестовоеЧисло5 	= СокрЛП(Excel.Cells(Сч, 7).Value);
					НоваяСтрока.ТестовоеЧисло6 	= СокрЛП(Excel.Cells(Сч, 8).Value);
					НоваяСтрока.ТестовоеЧисло7 	= СокрЛП(Excel.Cells(Сч, 9).Value);
					НоваяСтрока.ТестоваяДата 	= СокрЛП(Excel.Cells(Сч, 10).Value);
				КонецЕсли;
				КонецЦикла;
		Исключение
			
			Excel.ActiveWorkbook.Close();
			Excel.Quit();
			Сообщить(ОписаниеОшибки());
			Возврат;
		КонецПопытки;
		
		Попытка			
			Сообщить("Файл Excel прочитан!");
			Excel.Quit();
		Исключение
			Сообщить(ОписаниеОшибки());
			Возврат;
		КонецПопытки;			
	КонецЕсли;
	
КонецПроцедуры 

Процедура ВыгрузитьДанныеНажатие()
	
	Для Каждого ТекСтрока Из ТЗ Цикл 
		ТекСтрока.ТестовоеЧисло5 = ТекСтрока.ТестовоеЧисло5 - Число(ТекСтрока.НомерПоПорядку);
	КонецЦикла;	
	
	Если ТЗ.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;

	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	Диалог.Заголовок = "Выберите имя файла для сохранения";
	Диалог.МножественныйВыбор = Ложь;
	Диалог.Фильтр = "Файл MS Excel *.xlsx)| *.xlsx";
	
	
	Если Диалог.Выбрать() Тогда
		
		ФайлДанных = Диалог.ПолноеИмяФайла;
		
		Попытка
			Excel = Новый COMОбъект("Excel.Application");
		Исключение
			Сообщить(ОписаниеОшибки());
			Возврат;
		КонецПопытки;
		Попытка
			Книга = Excel.WorkBooks.Add();
			
			
			Лист = Книга.WorkSheets(1);
			Лист.Name = "Выгрузка данных";
			
			Excel.ActiveWindow.View 		= 2; 	
			Excel.ActiveWindow.Zoom 		= 100;  
			Лист.PageSetup.Orientation 		= 2; 	
			Лист.Columns(1).ColumnWidth 		= 10;   
			Лист.Columns(2).ColumnWidth 		= 25;   
			Лист.Columns(10).ColumnWidth 		= 13;
			Лист.Columns(11).ColumnWidth 		= 13;			
			
			
			
			Лист.Cells(1, 1).Value 			= "Номер по порядку";
			Лист.Cells(1, 2).Value 			= "Выгружаемый текст";
			Лист.Cells(1, 3).Value 			= "Выгружаемые числа";			
			Лист.Cells(1, 10).Value 		= "Выгружаемая дата";
			Лист.Cells(1, 11).Value 		= "Программная формула";
			Лист.Cells(2, 3).Value 			= "Число 1";
			Лист.Cells(2, 4).Value 			= "Число 2";
			Лист.Cells(2, 5).Value 			= "Число 3";
			Лист.Cells(2, 6).Value 			= "Число 4";
			Лист.Cells(2, 7).Value 			= "Число 5";
			Лист.Cells(2, 8).Value 			= "Число 6";
			Лист.Cells(2, 9).Value 			= "Число 7";
			Лист.Range("A1:A2").MergeCells 	= Истина;
			Лист.Range("A1:A2").WrapText 	= Истина;
			Лист.Range("B1:B2").MergeCells 	= Истина;
			Лист.Range("B1:B2").WrapText 	= Истина;
			Лист.Range("J1:J2").MergeCells 	= Истина;
			Лист.Range("J1:J2").WrapText 	= Истина;
			Лист.Range("K1:K2").MergeCells 	= Истина;
			Лист.Range("K1:K2").WrapText 	= Истина;
			Лист.Range("C1:I1").MergeCells 	= Истина;
			Лист.Range("C1:I1").WrapText 	= Истина;
			
			Лист.Range("A1:K2").Borders.Linestyle 	= 1;  
			Лист.Range("A1:K2").HorizontalAlignment = 3;  
			Лист.Range("A1:K2").VerticalAlignment 	= 2;  
			Лист.Range("A1:K2").Font.Bold 		= 1;  
			
			
			
			СчетчикСтрок = 3; 
			Для Каждого ТекСтрока Из ТЗ Цикл
				Лист.Cells(СчетчикСтрок, 1).Value 			= ТекСтрока.НомерПоПорядку;
				Лист.Cells(СчетчикСтрок, 2).Value 			= ТекСтрока.ТестовыйТекст;
				Лист.Cells(СчетчикСтрок, 3).Value 			= ТекСтрока.ТестовоеЧисло1;
				Лист.Cells(СчетчикСтрок, 4).Value 			= ТекСтрока.ТестовоеЧисло2;
				Лист.Cells(СчетчикСтрок, 5).Value 			= ТекСтрока.ТестовоеЧисло3;
				Лист.Cells(СчетчикСтрок, 6).Value 			= ТекСтрока.ТестовоеЧисло4;
				Лист.Cells(СчетчикСтрок, 7).Value 			= ТекСтрока.ТестовоеЧисло5;
				Лист.Cells(СчетчикСтрок, 8).Value 			= ТекСтрока.ТестовоеЧисло6;
				Лист.Cells(СчетчикСтрок, 9).Value 			= ТекСтрока.ТестовоеЧисло7;
				Лист.Cells(СчетчикСтрок, 10).Value 			= ТекСтрока.ТестоваяДата;
				Лист.Cells(СчетчикСтрок, 11).Formula		= "=F" + Строка(СчетчикСтрок) + "+G" + Строка(СчетчикСтрок);
				СчетчикСтрок = СчетчикСтрок + 1;
			КонецЦикла;
			
			СчетчикСтрок = СчетчикСтрок - 1; 
			
			Лист.Range("A3:K" + Строка(СчетчикСтрок)).Borders.Linestyle 	= 1;  
			Лист.Range("A3:K" + Строка(СчетчикСтрок)).VerticalAlignment 	= 2;  
			Для НомерСтроки = 3 По СчетчикСтрок Цикл                              
				Для Столбец = 4 По 9 Цикл
					Лист.Cells(НомерСтроки, Столбец).NumberFormat 	= "0.00";
				КонецЦикла;				
				Лист.Cells(НомерСтроки, 11).NumberFormat 	= "0.00";
			КонецЦикла;
		Исключение			
			Excel.Quit();
			Сообщить(ОписаниеОшибки());
			Возврат;
		КонецПопытки;
		
		Попытка
			Книга.SaveAs(ФайлДанных);
			Сообщить("Файл " + ФайлДанных + " успешно сохранен"); 
		Исключение
			Сообщить(ОписаниеОшибки() + " Файл не сохранен!");
			Возврат;
		КонецПопытки;
		
		Попытка			
			Excel.Quit();
		Исключение			
			Сообщить(ОписаниеОшибки());
			Возврат;
		КонецПопытки;
		
	КонецЕсли;
	
КонецПроцедуры  

В результате получилась обработка, в которой сначала из файл
считываются данные, а затем — по нажатию кнопки выгрузки данных как-то
обрабатываются и выгружаются в файл. Либо в пустой, либо указанный
пользователем. При этом существующий файл пересоздается. При выгрузке показаны
некоторые примеры форматирования файла.

На этом пока все.

Пример обработки и файла для чтения данных можно скачать
тут


ну че тутуа писать????      Книга.Close;

65k.Или тебе только не пустые?

mikiну чтобы точно понятно что дальше ничего нету

Проверяй значение ячейки на <пусто> или маркер какой-нить пиши в конец ХЛС.

miki нифина был другой способмне тута каньше ктото обьяснил но я забыла в архивах нету

….а далее все обходы по строкам и столбцам через циклы.

RetНужныйЛист=ВходExcel.Worksheets.Item(ЛистExcel);вот ето место пожалуйста поподробнее.как получить 1-й лист?

———————————————это основные операторы модуля

RetНужныйЛист=ВходExcel.Worksheets.Item(ЛистExcel);вот ето место пожалуйста поподробнее.как получить 1-й лист?

мне раньше показывали способ какузнать количество непустых строк.

9 — Метод Sheets(НомерЛиста)

КоличествоЛистов=ВходExcel.Worksheets.Count;Для i=1 По КоличествоЛистов Цикл

не сегодня чета нету умных…

Мля, итак уже все разжевал…НужныйЛист=ВходExcel.Worksheets.Item(i);………и т.д.

Retкак узнать номер последней не пустой строки?

Я конечно привожу куски кода, который уже заточен под мои задачи, но из них вполне можно понять логику и использовать под себя.Когда сам писал это, не мало пришлось покапаться в доках, а тебе выкладываешь на тарелочке, а ты разобраться не можешь.За тебя-то никто не будет делать. Смотри, разбирайся и делай.

Мля…. я тащусь….НужныйЛист=ВходExcel.Worksheets.Item(ЛистExcel);——далее работаешь со значением———- и т.д. (шо тебе ящо конец цикла написать?)

короче ето делается так.=====================Процедура ЗагрузитьНажатие(Элемент)============================ето я чета туплю сегодняспасибо за ответ Ret-у

Cells(1,1).SpecialCells.Row -последняя не пустая строкаCells(1,1).SpecialCells.Column — последний не пустой столбеци еще выше я привел процеДУРУ ПроверкаБитыхСсылок(Ячейка) привел.Перед загрузкой если там ошибки, то на Значение = НужныйЛист.Cells(index,index2).Value 1С вылетает. Поэтому их надо обязательно отсечь!!!Не помню где это описано, но это известная весчь.

Тэги:

Комментарии доступны только авторизированным пользователям

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Как получить количество дней в месяце excel
  • Как получить квадраты в excel
  • Как получить итог в excel
  • Как получить имя активного листа excel
  • Как получить имена таблиц в excel

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии