Имя: Пароль:
1C
1С v8
Выгрузка разных отчетов в один XLS файл на разные страницы
0 Ctyd
 
06.08.14
14:49
Нужно сделать регламентную задачу(это не проблема) для анализа состояния предприятия по дням.
отчеты отправляются каждый день не зависимо от пользователей.
вариант:
ТабДок.Записать("c:\1.xlsx", ТипФайлаТабличногоДокумента.XLSX);
Главный офис требует все отчеты в 1 файле для анализа. куда нужно порыть что бы найти решение?
1 Garykom
 
гуру
06.08.14
15:03
(0) кури маны и форум на способы записи в Excel напрямую и через всяческие извращения
2 _fvadim
 
06.08.14
15:11
Попробовать копировать табдок на нужные листы через COM.
Или лепить вместе после сохранения - можно из 1с через COM, можно внешним скриптом.
3 Лодырь
 
06.08.14
15:14
например http://goo.gl/UGiO0S
4 Лодырь
 
06.08.14
15:21
Вкратце будет чтото типа того + какие то заморочки с тонкой настройкой результата:
ВременныйФайл = ПолучитьИмяВременногоФайла("xls");
ТабличныйДокументНовогоЛиста.Записать(ВременныйФайл, ТипФайлаТабличногоДокумента.XLS);    
ВременнаяКнига         = Excel.WorkBooks.Open(ВременныйФайл);                            
ЛистПолучатель         = КнигаКудаВсеПопадает.WorkSheets(НомерТекущегоЛиста);     
ЛистОтправитель     = ВременнаяКнига.WorkSheets(1);
ЛистОтправитель.Copy(ЛистПолучатель, Null);              
ЛистПолучатель.name = "НекоеИмя";
5 Jaap Vduul
 
06.08.14
15:22
Пример для 7.7:

Таб=СоздатьОбъект("Таблица");
  Для сч=1 По 3 Цикл
   Таб.Область(1,1).Текст="Привет от листа №"+сч;
    file[сч]="d:\test_"+сч+".xls";
    Таб.Записать(file[сч],1);
  КонецЦикла;
  
  xl=createobject("excel.application");
  wbMain=xl.workbooks.open(file[1]);
  wsMain=wbMain.worksheets(1);
  wsMain.name="Лист №1";
  Для сч=-3 По -2 Цикл
    wbCopy=xl.workbooks.open(file[(-сч)]);
    wsCopy=wbCopy.worksheets(1);
    wsCopy.name="Лист №"+(-сч);
    wsCopy.copy(wsMain);
    wsMove=wbMain.worksheets(1);
    wsMain.move(wsMove);
    wbCopy.saved=1;
    wbCopy.close();
    ФС.УдалитьФайл(file[(-сч)]);
  КонецЦикла;
  w=xl.activewindow;
  w.displayworkbooktabs=1;
  w.tabratio=0.5;
  wbMain.save();
  xl.visible=1;
6 Repey
 
06.08.14
15:25
Лодырь , а как в 2010 екселе сохранить в другой формат? В методе "SaveAs" когда в скобках делаешь второй параметр - оно ругается. В самом ВБА делается лишь через вот так:
ActiveWorkbook.SaveAs Filename:= "D:\Temp\MyBook.xls", FileFormat:=xlExcel8
но из 1С так записать тоже не выходит.
7 Tatitutu
 
06.08.14
15:27
ДокЭксель = Новый COMОбъект("Excel.Application");
    ДокЭксель.DisplayAlerts=0;
    ОбщаяКнига      =    ДокЭксель.WorkBooks.Open(ИмяОсновногоФайла);
    ЛистСДанными     = ОбщаяКнига.Sheets(1);
    ЛистСДанными.Select();
    ЛистСДанными.Name ="info";
    
    Сч=1;
    Для каждого ПутьКФайлуXLS Из МассивПутейФайловXLS Цикл
        Книга            = ДокЭксель.WorkBooks.Open(ПутьКФайлуXLS.Значение);
        ЛистСДанными     = Книга.Sheets(1);
        ЛистСДанными.Select();
        ИмяЛиста=СтрЗаменить(Книга.Name,СокрЛП(ПутьДляСохранения),"");
        ИмяЛиста=СтрЗаменить(ИмяЛиста,".xls","");
        ЛистСДанными.Name =ИмяЛиста;
        ЛистСДанными.Copy(ОбщаяКнига.Sheets(Сч));
        Сч=Сч+1;
        Книга.close();
    КонецЦикла;     
    
    ДокЭксель.ActiveWindow.TabRatio = 0.5;
    ЛистСДанными     = ОбщаяКнига.Sheets(1);
    ЛистСДанными.Select();
    ОбщаяКнига.Save();        
    ОбщаяКнига.close();
    ДокЭксель.Quit();
    
    ДокЭксель = Неопределено;    
    Для каждого ПутьКФайлуXLS Из МассивПутейФайловXLS Цикл        
        УдалитьФайлы(СокрЛП(ПутьКФайлуXLS.Значение));             
    КонецЦикла;
    
    
    ДокЭксель = Новый COMОбъект("Excel.Application");
    ДокЭксель.WorkBooks.Open(ИмяОсновногоФайла);
    ДокЭксель.Visible = Истина;
8 Tatitutu
 
06.08.14
15:29
+(7)
в папку программно формируешь свои отчеты.
потом выбираешь все файлы (какой то делаешь основным)
собираешь в один, записываешь - удаляешь все остальные.
9 Ctyd
 
06.08.14
15:29
шикарно....

ЛистСДанными.Copy(ОбщаяКнига.Sheets(Сч)); Этот код автоматом создаст лист если его нету в файле??
10 Tatitutu
 
06.08.14
15:30
(10) все работает на 100% быстро и качественно
11 Ctyd
 
06.08.14
15:31
(10) спасибо огромное..
12 Tatitutu
 
06.08.14
15:32
(9) смысл этого кода - открываем файл и копируем его в ОСНОВНОЙ файл.
13 Tatitutu
 
06.08.14
15:33
(6)
ИмяОсновногоФайла=СокрЛП(ПутьДляСохранения)+"МОЙ НОВЫЙ ФАЙЛ "+ Строка(Формат(НачПериода,"ДФ=MMyyyy"))+".xls";  
Сообщить(ИмяОсновногоФайла);
ТабДок.Записать(ИмяОсновногоФайла,ТипФайлаТабличногоДокумента.XLS);
14 Ctyd
 
06.08.14
15:35
(12) та я понял Спасибо=)
15 Лодырь
 
06.08.14
15:36
(6) у меня вполне прокатывает
КнигаВЭксель.SaveAs(ПутьКФайлу,56);
16 Repey
 
06.08.14
15:47
(15) 2010? Он даже в вба на такую конструкцию ругается.
http://savepic.org/5837642.jpg
17 Лодырь
 
06.08.14
15:49
(16) сейчас стоит 2013, до этого прошла серия предыдущих версий, код работает и насколько я помню этот кусок не модифицировался ) под рукой 2010 нет, проверить не могу.
18 Jaap Vduul
 
06.08.14
15:51
(16)
Синтаксис для VBA неправильный (при вызове метода без получения результата вызова, круглые скобки не нужны).
19 Repey
 
06.08.14
15:54
(18) Каким тогда образом сохранить из 1С ексель файл в другом формате можно?
Вариант не работает (15)
С параметром одним получается. Однако.
20 Лодырь
 
06.08.14
15:56
(19) ошибку то какую выдает?
21 Tatitutu
 
06.08.14
16:20
(19) ТабДок.Записать(ИмяОсновногоФайла,ТипФайлаТабличногоДокумента.XLS);
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший