|   |   | 
| 
 | Выгрузка в xls без установленного MSOffice. | ☑ | ||
|---|---|---|---|---|
| 0
    
        dmrjan 06.08.15✎ 14:15 | 
        Народ, кто подскажет. Прислали обработку для доработки.
 Используется выгрузка в xls. При запуске отчета вылазит ошибка - {Форма.Форма.Форма(31)}: Ошибка при вызове конструктора (COMОбъект) Excel = Новый COMОбъект("Excel.Application"); по причине: Недопустимая строка с указанием класса Обязательна ли для работы обработки наличие MSOffice (использую LibreOffice)? Можно ли обойтись встроенной функцией выгрузки 1с в xls? | |||
| 1
    
        Dmitry1c 06.08.15✎ 14:17 | 
        Обязательна.
 Нельзя. | |||
| 2
    
        shuhard_серый 06.08.15✎ 14:18 | 
        (0) [Можно ли обойтись встроенной функцией выгрузки 1с в xls?]
 это нельзя определить не видя кода обработки | |||
| 3
    
        ДенисЧ 06.08.15✎ 14:18 | 
        Сформируй печатную форму и сохрани её как ексель...     | |||
| 4
    
        vicof 06.08.15✎ 14:18 | 
        ТабличныйДокумент.Записать (SpreadsheetDocument.Write)
 ТабличныйДокумент (SpreadsheetDocument) Записать (Write) Синтаксис: Записать(<ИмяФайла>, <ТипФайлаТаблицы>) Параметры: <ИмяФайла> (обязательный) Тип: Строка. Имя файла, в котором сохраняется табличный документ. <ТипФайлаТаблицы> (необязательный) Тип: ТипФайлаТабличногоДокумента. Формат, в котором будет сохранен табличный документ. Значение по умолчанию: MXL. Описание: Записывает табличный документ в файл. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). Примечание: При работе на сервере, веб-клиенте или через внешнее соединение нет возможности сохранять в формате XLS95. Не поддерживается сохранение в PDF картинок типа Метафайл. При работе на веб-клиенте вызов метода выполняет обращение к серверу. При работе на мобильной платформе возможно сохранение только в формат mxl. При записи в файл PDF перенос строк в ячейках документа может быть выполнен с некоторыми отличиями от того, как он выполняется при отображении на экран. Это может повлиять на высоту строк, у которых указана автоматическая высота. Пример: ТабДок.Записать("C:\My Documents\Таблица2.mxl"); -------------------------------------------------------------------------------- Методическая информация | |||
| 5
    
        dmrjan 06.08.15✎ 14:21 | 
        Неужто все так плохо? Как же 1С тогда позволяет выгружать отчеты в xls без предустановленного офиса?     | |||
| 6
    
        pavig 06.08.15✎ 14:21 | 
        (5) 
 прочитай (4) | |||
| 7
    
        Гёдза 06.08.15✎ 14:22 | 
        1с просто понимает формат xls     | |||
| 8
    
        stix2010 06.08.15✎ 14:22 | 
        >=8.3.5.1999 ТабДок.Записать(имяфайла, Тип)     | |||
| 9
    
        dmrjan 06.08.15✎ 14:23 | 
        (6) понял, попробую     | |||
| 10
    
        Поpyчик-4 06.08.15✎ 14:24 | 
        (5) на инфостарте есть набор процедур для чтения/записи в xlsx без установленного MSOffice. Поиск     | |||
| 11
    
        Гёдза 06.08.15✎ 14:25 | 
        (10) уже не актуально. 8.3.6 уже умеет и читать     | |||
| 12
    
        dmrjan 06.08.15✎ 14:26 | 
        (11) На 8.2 еще сидим.     | |||
| 13
    
        dmrjan 06.08.15✎ 14:27 | 
        (10) Заказчику нужен именно xls.     | |||
| 14
    
        Гёдза 06.08.15✎ 14:30 | 
        (13) Раз нужен - тогда ставь Excel     | |||
| 15
    
        vicof 06.08.15✎ 14:36 | 
        (14) Заказчик не хочет платить за эксель)     | |||
| 16
    
        stix2010 06.08.15✎ 16:35 | 
        есть еще конвертация c помощью yoksel.exe  - вход mxl выход xls     | |||
| 17
    
        GenV 06.08.15✎ 16:41 | 
        10+1
 Можно сохранять данные в xml в правильном формате, затем запаковать в zip, затем переименовать архив в Эксель - будет Эксель файл. На инфостарте по-моему был пример такой обработки. | |||
| 18
    
        Serginio1 06.08.15✎ 16:54 | ||||
| 19
    
        Serginio1 06.08.15✎ 16:56 | 
        Типа такого
 Процедура ЗаписатьТзВЭксель(тз) // Допустимые типы // adDouble = 5 Значение с плавающей точкой двойной точности // adDAte = 7 Дата // adCurrency = 6 Денежная сумма // adBoolean = 11 Булево // adVarWChar = 202 Символьная строка Unicode, заканчивающаяся NULL // adLongVarWChar = 203 Длинное строковое значение ИмяФайлаЭксель = "D:\Export.xlsx"; // Имя создаваемого файла Файл=Новый Файл(ИмяФайлаЭксель); Если файл.Существует() Тогда УдалитьФайлы(ИмяФайлаЭксель); КонецЕсли; // Собираем строку подключения //СтрокаПодключения = " //|Provider=Microsoft.Jet.OLEDB.4.0; //|Data Source="+ИмяФайлаЭксель+"; //|Extended Properties=""Excel 8.0;HDR=Yes;"";"; СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = "+ИмяФайлаЭксель; СтрокаПодключения = СтрокаПодключения + ";Mode=Share Deny Write; Extended Properties = "+"""Excel 12.0"+";HDR=Yes;IMEX=1"";"; ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ИмяФайлаЭксель+";Extended Properties=Excel 12.0 Xml;"; Connection = Новый COMОбъект("ADODB.Connection"); //Catalog = Новый COMОбъект("ADOX.Catalog"); //Catalog.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ИмяФайлаЭксель+";Extended Properties=Excel 12.0 Xml;"; //Table = New COMОбъект("ADOX.Table"); // Table.Name = "TestTable"; // Catalog.Tables.Append(Table); // Catalog=""; // Создаем соединение Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open(ActiveConnection); Command = Новый COMОбъект("ADODB.Command"); Command.ActiveConnection = Connection; Command.CommandType = 1; СоздатьТаблицуИКоманд(Тз,Connection,Command); Connection = Новый COMОбъект("ADODB.Connection"); Connection.Open(СтрокаПодключения); Command.ActiveConnection = Connection; Command.CommandType = 1; Параметры= Command.Parameters; ТекстВопросов=" VALUES("; ТекстКоманды= "INSERT INTO [Лист1]("; Для каждого парам из Параметры Цикл ТекстКоманды=ТекстКоманды+парам.Name+","; ТекстВопросов=ТекстВопросов+"?," КонецЦикла; ТекстКоманды=Лев(ТекстКоманды,стрДлина(ТекстКоманды)-1)+") "+Лев(ТекстВопросов,стрДлина(ТекстВопросов)-1)+")"; Сообщить(ТекстКоманды); Command.CommandText=ТекстКоманды; // Command.CommandText="INSERT INTO [Лист1$](Марка,Номер,Количество,Цена,Название) VALUES('Марка','Номер',1,2.2,'Название')"; // Command.Execute(); //возврат; Command.prepared=истина; //Command.CommandText=ТекстКоманды; Для каждого Выборка из Тз Цикл Для каждого парам из Параметры Цикл Значение=Выборка[Парам.Name]; Если Парам.Type=203 Тогда Парам.Size=СтрДлина(Значение)+1; КонецЕсли; Парам.Value=Значение; КонецЦикла; Command.Execute(); КонецЦикла; // // Закрываем соединение Command = Неопределено; Connection.Close(); Connection = Неопределено; КонецПроцедуры | |||
| 20
    
        spectre1978 06.08.15✎ 20:04 | 
        (0) как вариант, можно еще сделать автоматизацией через UNO в calc все то же что делалось в Excel. Но это джедайский путь :)     | |||
| 21
    
        Провинциальный 1сник 06.08.15✎ 20:39 | 
        (12) Переход на 8.3 бесплатный, если че. Зачем заморачиваться с ком-оле, если можно использовать нативные возможности платформы?     | |||
| 22
    
        Попытка1С 06.08.15✎ 20:48 | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |