Имя: Пароль:
1C
1С v8
Как изменить существующий файл Excel из 1С?
0 Prog111
 
09.09.18
11:09
Вроде все примеры перебрал, а всё равно не получается...
Сделал обработку, в которой выбирается имя открываемого файла Excel (ИмяФайлаЗагрузки). Открываю существующий файл, считываю его, сравниваю с базой, и если цены в базе не сходятся с ценами в файле, то меняю цены и пытаюсь записать файл Excel, но выходит ошибка:

Ошибка при вызове метода контекста (SaveAs)
    КнигаЗагрузки.SaveAs(НовыйФайл);
по причине:
Произошла исключительная ситуация (Microsoft Office Excel): Метод SaveAs из класса Workbook завершен неверно

Сама процедура:

&НаСервере
Процедура ИзменитьЦеныНаСайтеНаСервере()
    
    Эксель = Новый COMОбъект("Excel.Application");    
    КнигаЗагрузки = Эксель.WorkBooks.Open(ИмяФайлаЗагрузки);
    НомерЛиста = 1;
    Лист = КнигаЗагрузки.WorkSheets(НомерЛиста);
    
    Для Каждого Строка Из Номенклатура Цикл
        Если Строка.ИзменитьЦенуНаСайте = Истина Тогда
            Если Строка.Номенклатура = ПолучитьСпрНомПустой() Тогда
                Сообщить("Пустая ссылка: " + Строка.НаименованиеЭксель);
            Иначе
                Лист.Cells(Строка.НомерСтрокиЭксель, 16).Value = Строка.ЦенаВБазе;        
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    
    // Сохранение файла
    ФайлЭксель = Новый Файл(ИмяФайлаЗагрузки);
    Путь = ФайлЭксель.Путь;
    НовыйФайл = Новый Файл(Путь + "new.xlsx"); // + ФайлЭксель.Имя);
    КнигаЗагрузки.SaveAs(НовыйФайл);
    
КонецПроцедуры


База файловая.
1 Cool_Profi
 
09.09.18
11:13
Сообщить(НовыйФайл) что говорит?
2 HawkEye
 
09.09.18
11:27
(0) вторым параметром надо формат передавать...
3 HawkEye
 
09.09.18
11:28
-4143 - формат по умолчанию, если я ничего не путаю..
4 Prog111
 
09.09.18
11:33
(3) Поменял на:

КнигаЗагрузки.SaveAs(НовыйФайл,-4143);

Но результат тот же...
5 Prog111
 
09.09.18
11:34
(1) В отладчике это нормальный файл, с параметрами:
ПолноеИмя - "C:\Обработки 1С\new.xlsx"
6 Cool_Profi
 
09.09.18
11:44
7 Prog111
 
09.09.18
11:46
(6) Да в том-то и дело, то база файловая. Описанные проблемы вроде не подходят...
8 Sasha_H
 
09.09.18
13:28
А если переделать открытие Екселя не СОМ-объектом, а через ТабличныйДокумент?
9 Sasha_H
 
09.09.18
13:29
(0) Попробуй поменять на:

Эксель.SaveAs(НовыйФайл);
10 RomanYS
 
09.09.18
18:14
>>    НовыйФайл = Новый Файл(Путь + "new.xlsx");// + ФайлЭксель.Имя);
>>    КнигаЗагрузки.SaveAs(НовыйФайл);

А что эксель уже научился понимать объекты 1С? Зачем экселю объект "файл", ему только путь нужен.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший