Имя: Пароль:
1C
1С v8
Excel.WorkBooks.Open(МойТабДок)
0 zippygrill
 
04.05.14
19:05
Привет всем!
Отладчик сразу попадает в Исключение при вызове команды из название темы. В чем может быть проблема? Есть несколько таб.документов, вот и пытаюсь их сохранить в отдельных листах.
Код целиком ниже.

    Файл = Новый COMОбъект("Excel.Application");    
    
    Файл.Visible = 0;    
    Файл.DisplayAlerts = 0;
    Попытка                          
        Книга = Файл.Workbooks.Open(ПутьКниги);
    Исключение
        Книга = Файл.Workbooks.Add();
        Книга.SaveAs(ПутьКниги);
    КонецПопытки;
    
    Для Каждого ФайлЛиста Из СписокФайлов Цикл
        НовоеИмяЛиста = ФайлЛиста.Представление;
        
        Попытка                          
            Лист = Файл.Workbooks.Open(ФайлЛиста.Значение);
        Исключение
            Продолжить;
        КонецПопытки;
        
        Попытка
            Лист.Worksheets(1).Name = НовоеИмяЛиста;
        Исключение
            Лист.Worksheets(1).Name = НовоеИмяЛиста + "ошибка";
        КонецПопытки;
        Лист.Worksheets(1).Copy(Книга.Worksheets(1));
        Лист.Close(0);
    КонецЦикла;
    
    Книга.Save();
    Книга.Close(-1);
    Файл = 0;
1 zippygrill
 
04.05.14
19:07
*на отдельных листах
2 zippygrill
 
04.05.14
19:26
а?
3 Torquader
 
04.05.14
19:29
Открыть табличный документ, переданный вместо имени файла - и что вы хотите - даже я не могу представить, что вы хотите от компьютера.
4 zippygrill
 
04.05.14
19:37
(3) значит техника такая: для каждого табличного документа создается временный файл excel, копируется в за ранее созданный еще один файл, ну и потом удаляем этот временный файл. ясно.
5 su_mai
 
04.05.14
19:55
(0) Можно сохранять в формате Excel средствами 1С напрямую.
ТабличныйДокумент.Записать("c:\1.xls", ТипФайлаТабличногоДокумента.XLSX);
6 zippygrill
 
04.05.14
20:02
(5) это понятно. Но вопрос не в этом был.
А как это хозяйство http://screencast.com/t/eHdJsGzvlG2 привести к нормальному виду?

Остановился на этот вариант
    Для Каждого ФайлЛиста Из СписокФайлов Цикл
        НовоеИмяЛиста = ФайлЛиста.Представление;
        тДок = ФайлЛиста.Значение;
        ПутьВременногоФайла = КаталогВременныхФайлов() + "\" + НовоеИмяЛиста;
        тДок.Записать(ПутьВременногоФайла);
        
        Попытка                          
            Лист = Файл.Workbooks.Open(ПутьВременногоФайла);
        Исключение
            Продолжить;
        КонецПопытки;
        
        Попытка
            Лист.Worksheets(1).Name = НовоеИмяЛиста;
        Исключение
            Лист.Worksheets(1).Name = НовоеИмяЛиста + "ошибка";
        КонецПопытки;
        Лист.Worksheets(1).Copy(Книга.Worksheets(1));
        Лист.Close(0);
        УдалитьФайлы(ПутьВременногоФайла);
    КонецЦикла;
7 su_mai
 
04.05.14
20:06
(6) Дружище, ты попал. Ты вскрыл коды 1С и опубликовал их :)
MOXCEL - это сигнатура формата табличных документов 1С.

Попробуй расширение сменить у файла на mxl и открыть его в 1С.   Программно так же можно его открывать через.: ТабличныйДокумент.Открыть()... в синт. пом. смотри.
8 zippygrill
 
04.05.14
20:10
(7) а с какой целью мне изменить расширение когда четко надо в xls сохранить? :)
9 su_mai
 
04.05.14
20:10
ТабличныйДокумент.Записать("c:\1.xls", ТипФайлаТабличногоДокумента.XLSX);
10 Torquader
 
04.05.14
20:11
Задача в чём - сделать файл Excel, где несколько листов ?
11 zippygrill
 
04.05.14
20:13
(9) ага я его пропустил. Невнимателен.
(10) Да. Но вроде все получилось.
12 su_mai
 
04.05.14
20:14
Убери попытку - исключение тогда увидишь суть ошибки
13 su_mai
 
04.05.14
20:15
Вообще Попытку Исключение надо испорльзовать только тогда, когда та будешь обрабатывать исключительную ситуацию, а так как у тебя написано, то текст ошибки теряется и не понятно почему и что произошло.
14 zippygrill
 
04.05.14
22:33
А не подскажите еще как удалить уже сушествующие листы в файле excel?
15 Torquader
 
04.05.14
22:57
А что, в коллекции листов команды Delete нет ?
16 zippygrill
 
04.05.14
22:58
(15) ну я пробовал так писать а она послала меня
        Лист.Worksheets(1).Delete();
        Попытка
            Лист.Worksheets(1).Name = НовоеИмяЛиста;
17 zippygrill
 
04.05.14
22:59
или до Open надо удалить листы?
18 Torquader
 
04.05.14
22:59
Заставил меня открыть Excel...
19 Torquader
 
04.05.14
23:01
(17) Какие листы ?
Если те, которые созданы в книге по умолчанию, то удалять их нужно перед записью.
20 Torquader
 
04.05.14
23:01
Просто, если лист удалили, то в массиве будет дырка - насколько я помню - массив ассоциативный.
21 zippygrill
 
04.05.14
23:02
(19) листы которые были сохранены до этого.
22 Torquader
 
04.05.14
23:04
(21) Ты сохраняешь не лист, а всю книгу - в ней может быть несколько листов. А книгу - её не удаляют, а закрывают (Close) и открывают другую - новую.
В Excel, кстати, есть встроенная справка, где всё можно посмотреть и понять.
23 zippygrill
 
04.05.14
23:04
Так а если пользователи перевыбирает не пустой файл эксель?!
24 Torquader
 
04.05.14
23:06
Что значит перевыбирает ? Если ты записываешь поверх старого файла, то он перезапишет, а если ты его открываешь - то зачем это делать ?
25 zippygrill
 
04.05.14
23:09
Ну при выборе и сохранение файла из 1С windows спрашивает Перезаписывать:?
26 Torquader
 
04.05.14
23:12
(25) Конечно, только, когда вы задаёте имя файла вручную (выбирает пользователь), то и диалог подтверждения перезаписи тоже на вашей совести.
27 zippygrill
 
04.05.14
23:13
сейчас попробую через ВыбратьКаталог а не Сохранение
28 zippygrill
 
04.05.14
23:13
у ДиалогВыбораФайла
29 Torquader
 
04.05.14
23:29
(28) Зачем вам каталог - чтобы все файлы туда запихивать ?
30 zippygrill
 
04.05.14
23:30
(29)Почему? Если дать пользователю возможность выбрать файл для сохранения то листы будут дублироваться в последующих сохранении.
31 zippygrill
 
04.05.14
23:36
В принципе режим ВыборКаталога также не переписывает уже существующие листы а добавляет их.
32 Torquader
 
04.05.14
23:38
(31) Лист - это блок (страница) в книге. Если мы записываем книгу, то мы записываем все листы и записывать её нужно, когда все листы сформированы.
Если мы хотим сохранить отдельный лист (такое тоже есть), но нужно сохранять лист (но будет другое расширение).

Нужно всё-таки понять, что вам нужно.
33 zippygrill
 
04.05.14
23:40
Книгу же конечно :)
34 zippygrill
 
04.05.14
23:42
если сейчас так написано

    Попытка                          
        Книга = Файл.Workbooks.Open(ПутьКниги);
    Исключение
        Книга = Файл.Workbooks.Add();
        Книга.SaveAs(ПутьКниги);
    КонецПопытки;

то следует переделать на

        Книга = Файл.Workbooks.Add();
        Книга.SaveAs(ПутьКниги);

чтобы всегда сохраняла новую книгу
35 Torquader
 
04.05.14
23:44
Да!
36 zippygrill
 
04.05.14
23:53
спс