Имя: Пароль:
1C
1С v8
Как экселину (xls) засунуть в поле табличного документа?
, , lex1972
0 Маленький Вопросик
 
28.01.13
09:08
Есть ли метод? спасибо!
1 Бешеная Нога
 
28.01.13
09:09
открыть в экселе, выделить, скопировать, вставить в поле табличного документа
2 Бешеная Нога
 
28.01.13
09:09
с вас 2000 руб за консультацию
3 pessok
 
28.01.13
09:12
Циклом!
4 Галахад
 
гуру
28.01.13
09:14
Прочитать область. Запихать в тз. тз засунуть в поле.
5 Маленький Вопросик
 
28.01.13
09:15
(4) вариант)))))
6 Маленький Вопросик
 
28.01.13
09:16
как поняли, что задача стоит просто отобразить эксельку
7 Маленький Вопросик
 
28.01.13
09:20
(4) слушай, у тебя примерчика нет?
8 In123
 
28.01.13
09:21
(7) Халявщик?
9 Cube
 
28.01.13
09:21
Один я ничего не понял?
10 andreymongol82
 
28.01.13
09:24
держите халявщики

Процедура ЗагрузитьИзExcel(ИмяФайла,ИмяЛиста,Таблица) Экспорт    
   //СтрокаСоединения = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " +СокрЛП(ИмяФайла) +" ;Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;"""; //ексель версии до v2007
   СтрокаСоединения = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " +СокрЛП(ИмяФайла) +" ;Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;"""; //v2007 и больше
   
   Connection = Новый COMОбъект("ADODB.Connection");
   Connection.ConnectionString =  СтрокаСоединения;
   
   Попытка
       Connection.Open();
   Исключение
       Сообщить(ОписаниеОшибки());
       Сообщить ("Проблемы с подключением к Excel" );
       Возврат;
   КонецПопытки;
   
   RS = Новый COMОбъект("ADODB.Recordset");
   
   ТекстЗапроса =
   "SELECT
   |    Лист.*
   |FROM
   |    ["+ИмяЛиста+"$] as Лист";
   
   попытка        
       RS.Open(ТекстЗапроса, Connection);
   исключение
       Сообщить(ОписаниеОшибки());
       Сообщить ("Проблемы с выполнением запроса");
       Возврат;
   КонецПопытки;
   
   //Создаем таблицу
   Таблица.Очистить();
   КоличествоПолей = RS.Fields.Count;
   МассивИменКолонок = новый Массив;
   Для ии = 1 по КоличествоПолей Цикл
       Field = RS.Fields.Item(ии-1);
       ИмяКолонки = УдалитьНеправильныеСимволы(СокрЛП(Field.Name));        
       МассивИменКолонок.Добавить(ИмяКолонки);
       Таблица.Колонки.Добавить(ИмяКолонки, ,Field.Name);
   КонецЦикла;    
   Таблица.Колонки.Добавить("ПорядковыйНомерДаДаДа");
   
   //Заполним строками
   иии = 1;
   Пока RS.EOF()=0 Цикл
       НоваяСтрока = Таблица.Добавить();
       иии = иии + 1;
       Для ии = 1 по КоличествоПолей Цикл
           Field = RS.Fields.Item(ии-1);
           //ИмяКолонки = СтрЗаменить(СокрЛП(Field.Name)," ","");        
           НоваяСтрока[МассивИменКолонок[ии-1]]=СокрЛП(Field.Value);
           НоваяСтрока.ПорядковыйНомерДаДаДа = иии;
       КонецЦикла;    
       RS.MoveNext();
   КонецЦикла;    
   
   RS.Close();
   Connection.Close();
   
КонецПроцедуры

Ну а дальше разбираем ТЗ и вывводим в Табличный документ.
Удалить неправильные символы - Заменяем всякие длинные пробелы, запятые, кавычки на "_"
11 Плот
 
28.01.13
09:24
(4) Начиная с (4) я тоже ниче не понял.
12 In123
 
28.01.13
09:26
(10) Зачем такие сложности?
13 Маленький Вопросик
 
28.01.13
09:27
(10) сейчас посмотрим)))
(12) предложи попроще )))
14 pessok
 
28.01.13
09:27
(10) читать эксель через ADODB... Право, я даже и не знаю - зачем
15 Галахад
 
гуру
28.01.13
09:27
Если ТЗ = Неопределено Тогда
   ТЗ =  Новый ТаблицаЗначений;
   Для Счетчик = 1 По ВсегоКолонок Цикл
       ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
   КонецЦикла;
КонецЕсли;
Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
   НоваяСтрока = ТЗ.Добавить();
КонецЦикла;

Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
Данные = Область.Value.Выгрузить();

Для Счетчик = 0 По ВсегоКолонок-1 Цикл
   ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
КонецЦикла;
16 andreymongol82
 
28.01.13
09:28
(14) Через адо быстрее чем просто по оле
17 Бешеная Нога
 
28.01.13
09:29
Загрузка из экселя запросом. закладка
18 andreymongol82
 
28.01.13
09:32
(17) В смысле?
19 Маленький Вопросик
 
28.01.13
09:32
(17) форматирование ячеек тоже запросом делать?
20 Маленький Вопросик
 
28.01.13
09:33
нужно посмотреь экселину, совершенно неопределенного содержимого
21 Бешеная Нога
 
28.01.13
09:33
(18) это закладка, чтобы потом поиском найти :)
22 Cube
 
28.01.13
09:33
(0) Блин, да скажи ты нормально - че те нада-то?)))
23 andreymongol82
 
28.01.13
09:35
(21) Тогда лучше вот здесь почитай
http://www.obrabotki.com/tag/1s-excel/
24 Бешеная Нога
 
28.01.13
09:36
(23) спс. неплохая инфа
25 Маленький Вопросик
 
28.01.13
09:46
(22) см (6)
26 Маленький Вопросик
 
28.01.13
09:58
Процедура ПосмотретьПрайсНажатие(Элемент)

   ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1;
   ТабДок.Очистить();
   ТабДок.АвтоМасштаб = Истина;
   
   ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

 
   ЛистЭксель = ПолучитьCOMОбъект(ЭтаФорма.ПутьКФайлуПоступлений);
   
   
   ВсегоСтрок = ЛистЭксель.Sheets(1).Cells.SpecialCells(11).Row;
   ВсегоКолонок = ЛистЭксель.Sheets(1).Cells.SpecialCells(11).Column;
   
   НомерПервойСтроки=1;
   НомерПервойКолонки=1;
   
   
   Область = ЛистЭксель.Sheets(1).Range(ЛистЭксель.Sheets(1).Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Sheets(1).Cells(ВсегоСтрок,ВсегоКолонок));
   Данные = Область.Value.Выгрузить();

   Для Счетчик = 0 По ВсегоКолонок-1 Цикл
       ТабДок.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
   КонецЦикла;
   
   ТабДок.Показать();
   
КонецПроцедуры

что-то не получается...
27 Cube
 
28.01.13
09:59
(25) Да ну тебя, разбирайся без меня)))
28 pessok
 
28.01.13
10:01
Для Счетчик = 0 По ВсегоКолонок-1 Цикл
       ТабДок.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
   КонецЦикла;

ШТО?!
29 vicof
 
28.01.13
10:02
A ActiveX-объекты запретили? Мож и не нужен табличный документ
30 Галахад
 
гуру
28.01.13
10:11
(26) Конечно не получается. Может код сначала почитать, а потом уже переписывать.
31 pessok
 
28.01.13
10:18
а ведь я тоже был таким :)

v8: Заполнить ПТД из Excel
32 Маленький Вопросик
 
28.01.13
11:17
(28) а как область сразу передать?
33 Маленький Вопросик
 
28.01.13
11:27
Процедура ПосмотретьПрайсНажатие(Элемент)

   ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1;
   ТабДок.Очистить();
   ТабДок.АвтоМасштаб = Истина;
   
   ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

 
   ЛистЭксель = ПолучитьCOMОбъект(ЭтаФорма.ПутьКФайлуПоступлений);
   
   
   ВсегоСтрок = ЛистЭксель.Sheets(1).Cells.SpecialCells(11).Row;
   ВсегоКолонок = ЛистЭксель.Sheets(1).Cells.SpecialCells(11).Column;
   
   НомерПервойСтроки=1;
   НомерПервойКолонки=1;
   
   
   Область = ЛистЭксель.Sheets(1).Range(ЛистЭксель.Sheets(1).Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Sheets(1).Cells(ВсегоСтрок,ВсегоКолонок));
   
   ТЗ =  Новый ТаблицаЗначений;
   Для Счетчик = 1 По ВсегоКолонок Цикл
       ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
   КонецЦикла;
   
   Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
   НоваяСтрока = ТЗ.Добавить();
   КонецЦикла;
   
   
   Данные = Область.Value.Выгрузить();

   Для Счетчик = 0 По ВсегоКолонок-1 Цикл
   ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
   КонецЦикла;
   
   ТабДок.Данные = ТЗ;
   
КонецПроцедуры
34 Маленький Вопросик
 
28.01.13
11:27
(33) еще они нерабочий вариант(((
35 Маленький Вопросик
 
28.01.13
11:35
люди, ну не хочется думать. подсказывайте, пожалуйста!
36 Галахад
 
гуру
28.01.13
11:42
(35) На каком этапе не работает?
37 pessok
 
28.01.13
11:46
ТабДок.Данные = ТЗ;
прелестно...
38 pessok
 
28.01.13
11:47
(35) если не хочется думать - меняй профессию. для начала - посмотри как заполняется ТабДок из ТЗ (считай, что результат запроса, только вместо Следующий() - Для Каждого) в типовых отчетах
39 Маленький Вопросик
 
28.01.13
11:48
(36) на этапе отображения в ПолеТабличногоДокумента. синтаксиса я не знаю
40 pessok
 
28.01.13
11:49
(39) синтаксис продаст ДенисЧ
посмотри типовые отчеты, еще раз тебе говорю
41 Галахад
 
гуру
28.01.13
11:51
Посмотри есть чего в ТЗ или нет:

Построитель = Новый ПостроительОтчета();
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
Построитель.Вывести();
42 andreymongol82
 
28.01.13
11:53
(35) От оно что, что-то много народу нонче думать не хочет...
43 Маленький Вопросик
 
28.01.13
11:59
(41) судя по отладчику -  ТЗ содержит всю загруженную информацию из Экселины
44 Маленький Вопросик
 
28.01.13
12:00
+(43) построитель все это также отображает
45 Галахад
 
гуру
28.01.13
12:05
Построитель = Новый ПостроительОтчета();
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);
Построитель.Вывести(ТабДок);
46 FN
 
28.01.13
12:06
Если просто показать, то бери DSOFramer
47 Маленький Вопросик
 
28.01.13
12:12
(45) хорошо, а как сохранить форматирование текста?
48 Галахад
 
гуру
28.01.13
12:14
(47) Из способа чтения области - никак.
49 Маленький Вопросик
 
28.01.13
12:16
(48) т.е. метода простого отображения эксельки нету выходит, надо обязательно через ТЗ перенос делать?
50 pessok
 
28.01.13
12:37
(49) если просто отобразить, то (29)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.