Имя: Пароль:
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С? Зачем экселю объект "файл", ему только путь нужен.
Основная теорема систематики: Новые системы плодят новые проблемы.