Имя: Пароль:
1C
1С v8
Как записать данные в ActiveX компоненту "Microsoft Office Spreadsheet 11.0"
0 SherifSP
 
29.01.13
12:58
Разместил на форме документа ActiveX, компоненту "Microsoft Office Spreadsheet 11.0", как записать в нее данные с Excel файла
1 SherifSP
 
29.01.13
14:13
Ап, ап
2 SherifSP
 
30.01.13
11:35
Сохранил xls в xml, но загрузить не могу
3 SherifSP
 
30.01.13
11:35
Пишет метод объекта не обнаружен Open
4 SherifSP
 
30.01.13
11:39
XLSОбъектКниги = ЭлементыФормы.ЭлементУправления1.Application.Workbooks;
   Попытка
       XLSОбъект = XLSОбъектКниги.Open(ОбъектXLS);
   Исключение
       Возврат;
   КонецПопытки;

Подскажите как с компонентой работать
5 Miss1C
 
30.01.13
11:43
(4) Посмотри методы в справке компоненты, там должен быть хелп
6 SherifSP
 
30.01.13
11:45
(5) Там не описано как импортировать(
7 Дык ё
 
30.01.13
12:13
(2) если через xml, то

Текст = Новый ТекстовыйДокумент;
Текст.Прочитать("C:\ПутьКФайлу\Книга1.xml");
ЭлементыФормы.ЭлементУправления1.XMLData = Текст.ПолучитьТекст();
8 SherifSP
 
30.01.13
12:23
{Документ.ПланограммаКДоговору.Форма.ФормаДокумента(148)}: Ошибка при установке значения атрибута контекста (XMLData): Произошла исключительная ситуация (Microsoft Office 2003 Web Components): Компоненту "Электронная таблица Microsoft Office" не удалось загрузить XML-данные.

Документ электронной таблицы XML должен в качестве корневого узла иметь тег <Workbook>.
   ЭлементыФормы.ЭлементУправления1.XMLData = Текст.ПолучитьТекст();
по причине:
Произошла исключительная ситуация (Microsoft Office 2003 Web Components): Компоненту "Электронная таблица Microsoft Office" не удалось загрузить XML-данные.

Документ электронной таблицы XML должен в качестве корневого узла иметь тег <Workbook>.
9 SherifSP
 
30.01.13
12:23
Сейчас попробую добавить этот тег
10 Дык ё
 
30.01.13
12:35
(8) а чё у тебя за xml? я просто нажал в экселе файл/сохранить как/тип файла таблица xml 2003 и оно открылось. если оно с русским текстом, скажи еще тексту кодировку utf-8

а так еще можно xls через ado открыть
11 SherifSP
 
30.01.13
12:58
(10) Подскажи как xls открыть?
12 SherifSP
 
30.01.13
13:13
(10) Куда пропал?)
13 SherifSP
 
30.01.13
13:14
(10) А как цвет передать xml файлом?
14 SherifSP
 
30.01.13
13:23
(10) Оформление xml в теге передает, но компонента загружает только данные
15 SherifSP
 
30.01.13
13:24
+(14) Мб потому что считываю данные с xml как текст?
16 Дык ё
 
30.01.13
13:30
(11)

ЭлементыФормы.ЭлементУправления1.ActiveSheet.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\ПутьКФайлу\Книга1.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""";
ЭлементыФормы.ЭлементУправления1.ActiveSheet.CommandText = "SELECT * FROM [Лист1$]";
17 Дык ё
 
30.01.13
13:35
(14) там прямого импорта нет. оформление можно передать через буфер обмена. не получится, если исходная задача - отказаться от использования excel
18 SherifSP
 
30.01.13
13:35
(16) Пишет не допустимое имя Лист1
19 SherifSP
 
30.01.13
13:37
(17) Задача загрузить данные с xls, можно без оформления, но если есть какой то формат который передаст и оформление в компоненту, буду использовать его
20 Дык ё
 
30.01.13
13:37
(18) ну я хз как у тебя листы в книге называются. к названию $ прибавь
21 FN
 
30.01.13
13:41
Процедура ОткрытьФайлЕксель() //xls
   Попытка
       Ексель = СоздатьОбъект("Excel.Application");
   Исключение
       Предупреждение("Для открытия файлов xls, необходимо наличие программы Microsoft Excel.");
       Возврат;
   КонецПопытки;
   Катал=ВосстановитьЗначение("СуперЛист.ПоследнийКаталог");Файл="";
   Если ФС.ВыбратьФайл(0,Файл,Катал,"Укажите файл для открытия:","Файлы Ексель|*.xls*","*.xls,*.xlsx")=0 тогда Возврат; КонецЕсли;
   Ексель.DisplayAlerts=0;
   Попытка
       Ексель.Workbooks.Open(Катал+Файл);
   Исключение
       Ексель="";Возврат;
   КонецПопытки;
   спЛистов=СоздатьОбъект("СписокЗначений");
   для х=1 по Ексель.ActiveWorkbook.Sheets.Count Цикл
       Данные=Ексель.ActiveWorkbook.Sheets(х).UsedRange;
       Если Данные.Rows.Count()>1 Тогда
           спЛистов.ДобавитьЗначение(Ексель.ActiveWorkbook.Sheets(х).cells,Ексель.ActiveWorkbook.Sheets(х).Name);
       КонецЕсли;
   КонецЦикла;
   Если спЛистов.РазмерСписка()=0 Тогда
       Предупреждение("В указанном файле ("+Файл+") нет данных");
       ЗакрытьЕксель(Ексель);Возврат;
   ИначеЕсли спЛистов.РазмерСписка()=1 Тогда
       Данные=спЛистов.ПолучитьЗначение(1);
   Иначе
       Если спЛистов.ВыбратьЗначение(Данные,"Укажите лист для импорта данных:",,,0)<>1 Тогда
           ЗакрытьЕксель(Ексель);Возврат;
           Возврат;
       КонецЕсли;
   КонецЕсли;
   Данные.Copy();
   АктивИкс.Объект.WorkSheets.Add();
   АктивИкс.Объект.WorkSheets(2).Delete();
   Если АктивИкс.Объект.WorkSheets.Count>1 Тогда
       Для х=-АктивИкс.Объект.WorkSheets.Count по -2 Цикл
           АктивИкс.Объект.WorkSheets(-х).Delete();
       КонецЦикла;
   КонецЕсли;
   АктивИкс.Объект.Cells(1,1).Paste();
   АктивИкс.Объект.Cells(1,1).Copy();
   ЗакрытьЕксель(Ексель);
КонецПроцедуры

это код из 7.7

больше примеров смотри http://infostart.ru/public/20668/
22 SherifSP
 
30.01.13
13:41
(20) А если листа нет, например взял сохранил отчет в xls?
23 Дык ё
 
30.01.13
13:53
(22) вот тебе с оформлением :-)

Excel = Новый COMОбъект("Excel.Application");
Excel.Workbooks.Open("C:\ПутьКФайлу\Книга1.xls");
Excel.ActiveSheet.UsedRange.Copy();
ЭлементыФормы.ЭлементУправления1.ActiveSheet.Paste();
24 SherifSP
 
30.01.13
13:54
(23) А ну)
25 SherifSP
 
30.01.13
13:59
(23) Что то не то)
26 SherifSP
 
30.01.13
14:00
(23) То же что и в (16) )
27 SherifSP
 
30.01.13
14:01
+(26) Колонки сильно узкие
28 Дык ё
 
30.01.13
14:10
(27) тогда, как подсказывает товарищ в (21)

Excel.ActiveSheet.Cells.Copy();
29 SherifSP
 
30.01.13
14:23
(21)  
АктивИкс.Объект.WorkSheets.Add();
   АктивИкс.Объект.WorkSheets(2).Delete();
   Если АктивИкс.Объект.WorkSheets.Count>1 Тогда
       Для х=-АктивИкс.Объект.WorkSheets.Count по -2 Цикл
           АктивИкс.Объект.WorkSheets(-х).Delete();
       КонецЦикла;
   КонецЕсли;
   АктивИкс.Объект.Cells(1,1).Paste();
   АктивИкс.Объект.Cells(1,1).Copy();
   ЗакрытьЕксель(Ексель);

АктивИкс - Это компонента?
30 FN
 
30.01.13
14:25
(29)Да. в твоем случае код будет примерно таким:
Excel = Новый COMОбъект("Excel.Application");
Excel.Workbooks.Open("C:\ПутьКФайлу\Книга1.xls");
Excel.ActiveSheet.UsedRange.Copy();
ЭлементыФормы.ЭлементУправления1.Application.Cells(1,1).Paste();
31 SherifSP
 
30.01.13
14:34
В 7 был метод у Списка значений ВыбратьЗначение() Как его заменить в 8.1?
32 SherifSP
 
30.01.13
14:35
+(31) ВыбратьЭлемент()?
33 SherifSP
 
30.01.13
14:44
(30) Все равно цвета не копирует
34 Дык ё
 
30.01.13
14:52
(33) да ладно :-/ (23) с учетом (28) копирует все на первом листе
35 SherifSP
 
30.01.13
14:55
(34)

Excel = Новый COMОбъект("Excel.Application");
Excel.Workbooks.Open("C:\ПутьКФайлу\Книга1.xls");
Excel.ActiveSheet.Cells.Copy();
ЭлементыФормы.ЭлементУправления1.ActiveSheet.Paste();

Так?
36 SherifSP
 
30.01.13
14:58
(34) Размещение и ширина колонок нормальная, но цвета не отображаются(
37 Дык ё
 
30.01.13
15:01
(36) у 2003 офиса цветовая гамма меньше, чем у 2010. может, на преобразовании что-то теряет. можешь свой xls на посмотреть выложить?
38 Дык ё
 
30.01.13
15:04
+(37) сразу не проверил, поверил тебе на слово, но он у меня и из xml все оформление восстанавливает
39 SherifSP
 
30.01.13
15:06
40 SherifSP
 
30.01.13
15:06
(38) хм
41 SherifSP
 
30.01.13
15:10
(38) Офис 2003?
42 SherifSP
 
30.01.13
15:11
43 Дык ё
 
30.01.13
15:12
(39) открывает 1 в 1, только без группировки строк. может, у тебя owc устаревшей конструкции? у меня owc11.dll версии 12.0.6502.5000, а офис 2010 14.0.6112.5000
44 SherifSP
 
30.01.13
15:15
(43) У меня 2003 офис
45 Дык ё
 
30.01.13
15:19
(44) офис вряд ли влияет, попробуй руками скопировать - цвета копируются даже из мокселя
46 SherifSP
 
30.01.13
15:21
У меня owc11.dll версии - 12.0.4518.1014
47 SherifSP
 
30.01.13
15:22
(45) Нет не копируются
48 Дык ё
 
30.01.13
15:23
(46) обнови через виндовсапдейт. не поможет - я пас. с нашей стороны пули вылетели, ищите проблему на стороне мишени :-)
49 SherifSP
 
30.01.13
17:44
В офисе была проблема, переустановил работает на ура)