Имя: Пароль:
1C
1C 7.7
v7: Excel - задать имя книги
,
0 dk
 
08.10.15
09:11
формирую отчет в 1с 77
сохраняю в каталог временных файлов имя_файла = абракадабра_<случайноечисло>.xls
открываю файл в excel через workbooks.add(имя_файла)
удаляю временный файл
----------
проблема
получаю открый excel с заголовком абракадабра_<случайноечисло>
и при сохранении файл тоже предлагает имя абракадабра_<случайноечисло>
а хочется что-то более нормальное чтобы было
1 Масянька
 
08.10.15
09:15
(0) Показать(<?>,,);
Синтаксис:
Показать(<Заголовок>,<ИмяФайла>,<Активизировать>)
Назначение:
Открыть окно редактирования таблицы.
Параметры:
<Заголовок> - необязательный параметр. Заголовок окна редактирования. Если параметр не задан, в заголовке будет выдаваться слово ''Таблица''.
<ИмяФайла> - необязательный параметр. Имя файла для сохранения таблицы. Если параметр задан, то при закрытии окна табличного документа система будет предлагать сохранить документ в файле с указанным именем. Если файла с таким именем не существует, то будет создан новый файл с таким именем. Если параметр опущен или имеет пустое значение, то при закрытии окна табличного документа система не будет предлагать сохранить данные в файле.
<Активизировать> - необязательный параметр. Признак активизации. Число: 1 - активизировать окно табличного документа; 0 - не активизировать окно табличного документа;  -1 (минус единица) - закрыть окно если оно открыто; по умолчанию  1.
Это в отчете надо сделать.
2 dk
 
08.10.15
09:16
мимо
3 Масянька
 
08.10.15
09:17
(2) Мимо что? Или сохраняешь программно?
4 dk
 
08.10.15
09:19
все программно
все мимо )))
надо не в 1с заголовок поменять, а в EXCEL
5 Смотрящий
 
08.10.15
09:20
workbooks.saveas(параметры)
параметры посмотришь в  справке
6 Масянька
 
08.10.15
09:21
(4) Если не умеешь описать задачу - выкладывай код... Хотя бы.
7 dk
 
08.10.15
09:22
(5) мимо
задача не сохранить с нужным именем, а предопределить имя для сохранения, но само сохранение будет или не будет делать пользователь
8 dk
 
08.10.15
09:27

Процедура ОбработатьВЭксель(Таб1)
Перем ВремФайл, Скрипт, AppExcel;
    
    ВремФайл = КаталогВременныхФайлов() + "РаспределениеСумм_" +_GetPerformanceCounter() + "_удалить.xls";
    
    Попытка
        Таб1.Записать(ВремФайл, "XLS");
    Исключение
        Сообщить("Ошибка при сохранении файла: " + ВремФайл);
        Таб1.Показать();
        Возврат;
    КонецПопытки;
    
    Попытка
        Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
        Скрипт.language="javascript";
        AppExcel=Скрипт.Eval("new ActiveXObject('Excel.Application')");
    Исключение
        Попытка
            AppExcel=СоздатьОбъект("Excel.Application");
        Исключение
            Сообщить("Не удалось открыть Excel");
            Таб1.Показать();
            Возврат;
        КонецПопытки;
    КонецПопытки;    
    
    //AppExcel.Visible = -1;
    
    Попытка
        //Книга = AppExcel.Workbooks.Open(ВремФайл);
        Книга = AppExcel.Workbooks.Add(ВремФайл);
    Исключение
        Таб1.Показать();
        Возврат;
    КонецПопытки;
    
    Лист = Книга.Sheets(1);
    
    КолСтрок    = Таб1.ВысотаТаблицы();
    КолКолонок    = Таб1.ШиринаТаблицы();
    Шапка        = Таб1.ВысотаСекции("Шапка");
    
    Лист.Cells(1, 1).Select();
    Лист.Cells(Шапка+1, 3).Select();
    AppExcel.ActiveWindow.FreezePanes = -1;
    
    Для Сч = 3 ПО КолКолонок Цикл
        Если Сч = 11 Тогда
            Продолжить;
        КонецЕсли;
        
        Яч = Лист.Cells(КолСтрок + 2, Сч);
        Яч.FormulaR1C1    = "=SUM(R"+(Шапка+1)+"C:R"+КолСтрок+"C)";
        Яч.Font.Bold    = -1;
        Яч.Font.Size    = 10;
        Яч.NumberFormat    = "# ##0";
    КонецЦикла;    //Для Сч = 3 ПО КолКолонок Цикл
    
    Лист.Range(Лист.Cells(2,1),Лист.Cells(3,1)).Merge();
    Лист.Range(Лист.Cells(2,2),Лист.Cells(3,2)).Merge();
    Лист.Range(Лист.Cells(2,7),Лист.Cells(3,7)).Merge();

    Лист.Range(Лист.Cells(2,8),Лист.Cells(3,8)).Merge();
    Лист.Range(Лист.Cells(2,9),Лист.Cells(3,9)).Merge();
    Лист.Range(Лист.Cells(2,10),Лист.Cells(3,10)).Merge();
    
    Лист.Range(Лист.Cells(2,16),Лист.Cells(3,16)).Merge();
    Лист.Range(Лист.Cells(2,17),Лист.Cells(3,17)).Merge();
    Лист.Range(Лист.Cells(2,18),Лист.Cells(3,18)).Merge();
    Лист.Range(Лист.Cells(2,19),Лист.Cells(3,19)).Merge();
    
    Попытка
        ФС.УдалитьФайл(ВремФайл);
    Исключение
        Сообщить("Ошибка при удалении файла: " + ВремФайл);
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    AppExcel.Visible = -1;
    
КонецПроцедуры    //ОбработатьВЭксель(Таб1)
9 1Сергей
 
08.10.15
09:34
Может стоит пересохранять как шаблон (*.xlt)?
10 dk
 
08.10.15
09:37
задача открыть пользователю несохраненный файл с данными с заданным именем
---
короче либо никто не знает, либо решения через изврат типа копи пасте
----
у workbook есть свойства Name и FullName но они только для чтения, а хочется установить свое имя
11 1Сергей
 
08.10.15
09:39
(10) ещё раз посмотри (9)
12 dk
 
08.10.15
09:43
нафига мне шаблон, если там живые данные?
13 dk
 
08.10.15
09:44
хотя щас проверю
14 dk
 
08.10.15
09:45
не, имя все равно из шаблона берет, еще и матерится на несовпадение типов
15 1Сергей
 
08.10.15
09:46
шаблон позволяет создать новую книгу с уже какими-то данными, но ещё не сохраненную и не имеющую имя
16 1Сергей
 
08.10.15
09:46
(14) это он предлагает имя. Я думал ты и так хочешь задать некое имя
17 dk
 
08.10.15
09:51
я могу конечно сразу в 1с 77 сохранить файл с заданным именем, типа распределение.xls и открыть его пользователю
но тогда другая проблема
формируют отчет - открывается excel - все хорошо
но если сейчас сформируют еще раз отчет не закрывая Excel, то откроется предыдущая версия
18 1Сергей
 
08.10.15
09:56
(17) опять же решается шаблоном :)
19 dk
 
08.10.15
09:57
(18) приведи простой пример
20 1Сергей
 
08.10.15
10:03
записываешь свой файл в темпе, программно открываешь (скрыв от глаз) его в екселе и пересохраняешь в том же темпе как шаблон под именем "New file.xlt". Открываешь шаблон в екселе уже показывая, удаляешь шаблон.
Как итог: имеем открытый в екселе файл, но не сохраненный. Если пользователь просто нажмет на дискетку, то всё-равно выйдет диалоговое окно и предложит имя файла "New file1.xls". Если ещё раз сформируют отчет, то откроется новый файл. Старый останется открытым
21 skafandr
 
08.10.15
10:06
(19) Решать задачу легче всего когда в голове порядок с тем что нужно получить ;)
"сразу в 1с 77 сохранить файл с заданным именем, типа распределение.xls" + добавить в название что-то уникальное от пользователя (имя,код пользователя)  чтобы не было замеса между пользователями. А если и пользователи ммммммммм  давят на все по несколько раз,как кролики, добавить в название время :)
22 skafandr
 
08.10.15
10:08
Хотя по мне так и

РаспределениеСумм_"+_GetPerformanceCounter()

вполне нормальное имя.Если хомячка не устраивает - пусть переименовывает
23 dk
 
08.10.15
11:11
ясно, простого пути нема
двойное сохранение - ну так себе решение
пущай живут с _GetPerformanceCounter()
24 dk
 
08.10.15
11:14
(20) кстати
Книга = AppExcel.Workbooks.Add(ВремФайл);
открывает не только на основании шаблона но и на основании простого XLS файла