Имя: Пароль:
1C
1С v8
как сохранить табличный документ в excel без екселя и на сервере ? 8.1
,
0 zladenuw
 
18.05.13
15:44
как быть ?
делал вот так

Макет = ПолучитьМакет("Макет");
т = Макет.ПолучитьОбласть("т");
ТД = Новый ТабличныйДокумент;
ТД.Вывести(т);
ИмяВремФ = ПолучитьИмяВременногоФайла(".txt");
ТД.Записать(ИмяВремФ,ТипФайлаТабличногоДокумента.TXT);
ВыбФайл = Новый Файл(ИмяВремФ);
Если ВыбФайл.Существует() Тогда
 ИмяфЕксель = "C:\-\Downloads\test.xls";
 ПутьКФайлу  = "C:\-\Downloads\test2.xls";
 ПереместитьФайл(ИмяВремФ, ИмяфЕксель);
 Excel = Новый COMОбъект("Excel.Application");
 Книга = Excel.WorkBooks.Open(ИмяфЕксель);
 Книга.SaveAs(ПутьКФайлу,-4143);
 Excel.Application.Quit();
 Excel = Неопределено;
 Книга = Неопределено;
КонецЕсли;


Но вот проблема екселя нету и сохранить табличный документ в hmtl  на сервере нельзя.
Как победить ?

Без добавление пустых конфигураций. только код. помогите
1 zladenuw
 
18.05.13
15:53
на гугль вот так. но как мне без гемора импортировать туда табличный документ. любой

СтрокаПодключения = "
|Provider=Microsoft.Jet.OLEDB.4.0;
|Data Source="+ИмяФайлаЭксельНовый+";
|Extended Properties=""Excel 8.0;HDR=YES"";";

Connection = Новый COMОбъект("ADODB.Connection");

Connection.ConnectionString = СтрокаПодключения;
Connection.Open();

Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;

Command.CommandText = "CREATE TABLE [МояТаблица] (Символьный char(255), Дата date, Целый int, Дробный float)";
Command.Execute();

Command.CommandText = "INSERT INTO [МояТаблица] (Символьный, Дата, Целый, Дробный) values ('АБВГДЕЁ', '12/4/1955', '1234567', '12345,6789')";
Command.Execute();
2 zladenuw
 
18.05.13
15:55
может есть у кого то пример перебора табличного документа ?
3 zladenuw
 
18.05.13
16:00
по перебору понятно.
Для а = 1 по ТД.ВысотаТаблицы Цикл
    Для б=1 по ТД.ШиринаТаблицы Цикл
   Ячейка = ТД.Область(а,б,а,б).Текст;
   Сообщить(Ячейка);
     КонецЦикла;
А вот как получить линии таблицы с макета и передать их ?
4 Ctrekoza
 
18.05.13
16:12
(0) Я конечно не спец, но, а в xml тоже не сохраняется? :)
У 1с есть такая небольшая и бесплатная программка просмотра файлов 1с на компах где не установлена 1с. Можно сохранить в xml, а потом открыть в этой программе и на другом компе где есть excel и попробовать там перевести файл в excel.
5 zladenuw
 
18.05.13
16:13
(4) нужно все программно. да ексель поставили ошибка при SaveAs. пишет что нету такого метода. то пока не поставили. ищю другие пути.
6 zladenuw
 
18.05.13
16:30
получается что нельзя обвести линиями таблицу, без екселя ?
7 zladenuw
 
18.05.13
16:38
(4) проблема в том что
у табличного документа метод записать можно только два формата.
При работе на сервере или через com-соединение использует только файлы форматов mxl и txt.

выбор не велик :)
вообщем лажа. а если пробовать открывать с mxl  то там бред.

и хз как выйти с положения :(
8 Живой Ископаемый
 
18.05.13
16:59
(7) это у в8.1 такое ограничение, точно? И что же вас тогда до стх пор останавливает от перехада на 8.2?
9 zladenuw
 
18.05.13
17:04
(8) да точно.старый начальник не хотел. 8.2 прожорливей и тормознутей немного чем 8.1, его слова.
Ждем нового начальника ит отдела,а там будет видно. просто не известно какие чудеса будут после перехода на 8.2
10 craxx
 
18.05.13
17:52
(0) Йоксель рулит!
http://yoksel.net.ru/
11 zladenuw
 
18.05.13
17:58
(10) почитаю спасибо
12 zladenuw
 
18.05.13
18:04
(10) пойдет тема, но не то. и не открывает она таблицу mxl
13 craxx
 
18.05.13
18:17
(12) все открывает, внимательно читай
14 zladenuw
 
18.05.13
18:21
(13) так я запустил. сохранил mxl  открываю его и вот ошибка.
http://www.ximage.ru/index.php?id=1368886874
15 Живой Ископаемый
 
18.05.13
19:38
(9) абсолютный бред, начиная например с того что тонкий клиент просто даже памяти потребляет меньше раза в три.

Чудес не будет если не исользовали какихто чудесных способов реализации
16 ic-kat
 
18.05.13
21:51
(14)у меня такая ошибка вылезала, когда я пыталась открыть mxl, который сохранили в 1с 8. а ёксель работает кажется с mxl версии 1с7
17 ic-kat
 
18.05.13
22:05
да, глянула, так и есть. сначала перегоняли с mxl8 в mxl7, затем ёкселем в xls, а потом в самописную компоненту на основе опенофиса, которая уже конвертила и в нтмл и в офисные форматы и во все подряд.
18 zladenuw
 
19.05.13
00:28
пока так.


Excel = Новый COMОбъект("Excel.Application");
   Книга = Excel.WorkBooks.Add();
   Лист = Книга.WorkSheets(1);
   //МассивКОМ = Новый COMSafeArray("VT_VARIANT", ТД.ШиринаТаблицы, ТД.ВысотаТаблицы);
   Для индСтрок = 1 По ТД.ВысотаТаблицы Цикл
       Для индКолонок = 1 По ТД.ШиринаТаблицы Цикл
           ////МассивКОМ.SetValue(индКолонок, индСтрок, ТД.Область(индСтрок,индКолонок,индСтрок,индКолонок).Текст);
           Лист.Cells(индСтрок, индКолонок).Value = ТД.Область(индСтрок,индКолонок,индСтрок,индКолонок).Текст;
           Лист.Cells(индСтрок,индКолонок).Borders.Linestyle = 1;
       КонецЦикла;
   КонецЦикла;
   
   //Excel.Range(Excel.Cells(1,1), Excel.Cells(ТД.ВысотаТаблицы,ТД.ШиринаТаблицы)).Value = МассивКОМ;    
   Excel.Visible=1;    
   
   //Книга.SaveAs(ПутьКФайлу,1);
   Excel.Application.Quit();
   Excel = Неопределено;
   Книга = Неопределено;
19 zladenuw
 
19.05.13
00:35
(18)
там без проверки или есть линия

Для индСтрок = 1 По ТД.ВысотаТаблицы Цикл
       Для индКолонок = 1 По ТД.ШиринаТаблицы Цикл
           ////МассивКОМ.SetValue(индКолонок, индСтрок, ТД.Область(индСтрок,индКолонок,индСтрок,индКолонок).Текст);
           Лист.Cells(индСтрок, индКолонок).Value = ТД.Область(индСтрок,индКолонок,индСтрок,индКолонок).Текст;
           Если ТД.Область(индСтрок,индКолонок,индСтрок,индКолонок).ГраницаСверху.ТипЛинии <> ТипЛинииЯчейкиТабличногоДокумента.НетЛинии
           или     ТД.Область(индСтрок,индКолонок,индСтрок,индКолонок).ГраницаСправа.ТипЛинии <> ТипЛинииЯчейкиТабличногоДокумента.НетЛинии
           или     ТД.Область(индСтрок,индКолонок,индСтрок,индКолонок).ГраницаСлева.ТипЛинии <> ТипЛинииЯчейкиТабличногоДокумента.НетЛинии
           или     ТД.Область(индСтрок,индКолонок,индСтрок,индКолонок).ГраницаСнизу.ТипЛинии <> ТипЛинииЯчейкиТабличногоДокумента.НетЛинии Тогда
               Лист.Cells(индСтрок,индКолонок).Borders.Linestyle = 1;
           КонецЕсли;
           
       КонецЦикла;
   КонецЦикла;
20 zladenuw
 
19.05.13
00:46
а вот как быть с рисунком. его только через файл или можно как то сразу через 1с ?
наверное только через временные.
21 mehfk
 
19.05.13
00:49
(0) Если допустимо xlsx вместо xls то на сервере (даже если он под linux) можешь программно формировать xml. Кое-какая инфа есть на инфостарте. Если не стремишься к суперуниверсальным решениям, то можешь один раз сохранить в xlsx и на основании файла sheet1.xml посмотреть как его нужно делать. Я, например, автофильтр включал и менял стиль ссылок-ячеек с R1C1 на A1
22 zladenuw
 
19.05.13
00:51
(21) не. там не линукс. там мс скл крутиться
23 zladenuw
 
19.05.13
01:00
(21) ну а как мне сохранить в xml. если нельзя табличный документ выгрузить в него
24 zladenuw
 
19.05.13
01:12
сдела так. но не вижу я там рисунков.
Объект = СериализаторXDTO.ЗаписатьXDTO(ТД);
ЗаписьXML = Новый ЗаписьXML;
   ЗаписьXML.ОткрытьФайл("C:\test1456.xml");
   ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Объект);
   ЗаписьXML.Закрыть();
25 zladenuw
 
19.05.13
01:18
(24) мда, поспешил. как то бредово открывается в екселе. про опен вообще молчу.
26 zladenuw
 
19.05.13
01:34
(15) согласен. но этот весь функционал нужно переписать. а сейчас хватает текучки. вот такие дела. ну и не я решаю. я то за
27 hhhh
 
19.05.13
03:23
что-то я пропустил, а почему просто нельзя записать табличный документ в ексель?

ТД.Записать(ИмяФайла, ексель)
28 zladenuw
 
19.05.13
03:33
(27) так это 8.1. на сервере только мхл и тхт
29 mehfk
 
19.05.13
19:05
(28) Глянь вот это.
http://yadi.sk/d/2Tp4enEe4yf6G
Скачано с ИС, ссылка на оригинал потеряна.
30 zladenuw
 
20.05.13
10:30
(29) хм. а что в макете ?
31 mehfk
 
20.05.13
11:05
(30) xlsx