8.х Проблема при создании нового документа Excel через 1С

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Vesker, 2 сен 2009.

  1. TopicStarter Overlay
    Vesker
    Offline

    Vesker

    Регистрация:
    2 сен 2009
    Сообщения:
    39
    Симпатии:
    0
    Баллы:
    1
    Может кто сталкивался с подобным?
    Есть процедура, которая реализует выгрузку данных в док-т Эксель. Фрагмент кода:
    Код:
        ...
    Эксель = Новый COMОбъект("Excel.Application");
    ДокЭксель = Эксель.Workbooks.Add();
    //Запись данных в ДокЭксель
    ...
    //Сохраняем и закрываем док-т Эксель
    ПолноеНаименование = "c:�111.xls";
    Попытка
    ДокЭксель.SaveAs(ПолноеНаименование);
    Исключение
    Сообщить("Файл не был записан. " + Символы.ПС + "Описание ошибки: "
    + ОписаниеОшибки())
    КонецПопытки;    
    
    ДокЭксель.Close();
    Эксель.Quit();
    ...
    
    
    При перезаписи файла, выскакивают окна диалога windows:
    1. Файл "c:\111.xls" уже существует в данном месте. Заменить?
    Если нажать "Нет" или "Отмена":
    2. Сохранить изменения в файле "Книга1"?
    Вопрос: Почему выскакивает второе окно? Как с этим бороться?
  2. koshak
    Offline

    koshak Опытный в 1С

    Регистрация:
    28 май 2009
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    Ну с Exsel в 1с не работал, но зато работал с Word. Там подобная штука решалась отключением показа сообщений с установкой свойства DisplayAlerts в ноль. При установке этого свойства в ноль, отключается показ стандартных вопросов и на них будут автоматически выполняться действия по умолчанию. При этом если такой файл уже существует, он будет перезаписан. Т.е. применимо к вашему случаю нужно добавить перед сохранением файла такую строку:

    Код:
    Эксель.DisplayAlerts = 0;
    
    Или
    Код:
    Эксель.DisplayAlerts = False;
    
    ЗЫ: А существование файла на диске проверяй с помощью 1с примерно такой функцией:

    Код:
    Функция ЕстьФайл(ПутьКФайлу)
    КаталогНаДиске = Новый Файл(ПутьКФайлу);
    Если КаталогНаДиске.Существует() Тогда
    Возврат Истина;
    Иначе
    Возврат Ложь;
    КонецЕсли;
    КонецФункции
    
  3. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Второй вопрос появляется при отработке метода ДокЭксель.Close(). Так как при нажатии "Нет" или "Отмена" изменения в книге не сохранены, эксель сам при закрытии книги предлагает их сохранить. Если сохранять изменения не нужно, то просто пишем ДокЭксель.Close(0), где 0 - это значение параметра метода Close() не сохранять изменения.
  4. TopicStarter Overlay
    Vesker
    Offline

    Vesker

    Регистрация:
    2 сен 2009
    Сообщения:
    39
    Симпатии:
    0
    Баллы:
    1
    Подредактировал, что-то не то до этого написал

    Использовал оба совета:

    Код:
    Эксель.DisplayAlerts = False;
    Попытка
    ДокЭксель.SaveAs(ПолноеНаименование); 
    Исключение
    Сообщить("Файл не был записан. " + Символы.ПС + "Описание ошибки: " 
    + ОписаниеОшибки());
    //Закрываем созданный файл Книга1 не записывая
    ДокЭксель.Close(0);
    Возврат
    КонецПопытки;
    //Закрываем файл 111.xls
    ДокЭксель.Close();
    Эксель.Quit();
    Сообщить("Записан файл " + ПолноеНаименование);
    
    
    Чеширский котяра, ASh, большое вам спасибо!

Поделиться этой страницей