7.7 1C & Excel

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем man37, 29 мар 2014.

  1. TopicStarter Overlay
    man37
    Offline

    man37 Опытный в 1С

    Регистрация:
    10 дек 2013
    Сообщения:
    197
    Симпатии:
    5
    Баллы:
    29
    Здравствуйте, искал по инету, но не нашел ответ на свой вопрос (возможно, плохо искал).
    1С 7.7 ТиС.
    Вопрос в следующем: как из 1С объединить ячейки и установить высоту строки при выгрузке в Excel через СоздатьОбъект("Excel.Application").
  2. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Обычно, если мне требуется из 1С по ОЛЕ сделать что-то с вордом или экселем, я делаю так:
    1. Ставлю запись макроса;
    2. Выполняю требуемые действия;
    3. Анализирую полученный код.

    Дальше остается только полученный код перенести в 1С и привести в соответствие синтаксис.
  3. TopicStarter Overlay
    man37
    Offline

    man37 Опытный в 1С

    Регистрация:
    10 дек 2013
    Сообщения:
    197
    Симпатии:
    5
    Баллы:
    29
    Макрос то я умею делать, а вот как применить его к 1С?
  4. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    что конкретно не получается?
  5. TopicStarter Overlay
    man37
    Offline

    man37 Опытный в 1С

    Регистрация:
    10 дек 2013
    Сообщения:
    197
    Симпатии:
    5
    Баллы:
    29
    Задать через 1С высоту строки (скажем первой, дальше надеюсь разберусь) и в этой строке объединить три столбца (пусть 1,2 и 3).
    Мне необходим образец.
  6. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Что хочется получить, я и в первом посте прочитал. Интересовало - что для этого было сделано....

    Ладно, по моему алгоритму:
    1. Создаю чистый лист
    2. Записываю макрос, объединяю три ячейки и устанавливаю высоту строки.
    3. Получаю такой код:

    Код:
    Sub Макрос1()
    '
    ' Макрос1 Макрос
    '
    
    '
        Range("A1:C1").Select
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .WrapText = False
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Selection.Merge
        Rows("1:1").Select
        Selection.RowHeight = 44
    End Sub
    Ну и теперь переношу все это в 1С:

    Код:
        Excel = СоздатьОбъект("Excel.Application");
        Excel.Application.Workbooks.Open(ФайлЗагрузки);
       
        Excel.ActiveSheet.Range("A1:C1").Merge();
        Excel.ActiveSheet.Rows("1:1").RowHeight = 44;
       
        Excel.ActiveWorkbook.Close();
        Excel.Quit();
    В каком месте возникала проблема?
    man37 нравится это.
  7. TopicStarter Overlay
    man37
    Offline

    man37 Опытный в 1С

    Регистрация:
    10 дек 2013
    Сообщения:
    197
    Симпатии:
    5
    Баллы:
    29
    Спасибо!
    Я так понимаю
    Excel.ActiveSheet.Range("A1:C1").Merge(); - это объединение
    Excel.ActiveSheet.Rows("1:1").RowHeight = 44; - это высота

    Проблема в том, что я не понимаю, что откуда брать, т.к. неуч (самоучка), теперь в принципе мне понятно.
    Еще раз, спасибо.
  8. TopicStarter Overlay
    man37
    Offline

    man37 Опытный в 1С

    Регистрация:
    10 дек 2013
    Сообщения:
    197
    Симпатии:
    5
    Баллы:
    29
    Не получается объединить.
    Код:
            Excel.ActiveSheet.Range("A2:C2").Merge();          // объединение второй строки
            Excel.ActiveSheet.Rows("2:2").RowHeight = 40;   // высота второй строки
            Excel.Columns("A:A").ColumnWidth = 30;             // ширина первой колонки
  9. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Excel.ActiveSheet.Range("A2:С2").Select.MergeCells = True

    а так?
  10. TopicStarter Overlay
    man37
    Offline

    man37 Опытный в 1С

    Регистрация:
    10 дек 2013
    Сообщения:
    197
    Симпатии:
    5
    Баллы:
    29
    Excel.ActiveSheet.Range("A2:С2").Select.MergeCells = True<<?>>; // объединение
    {C:\USERS\АНАТОЛИЙ\DESKTOP\ZAKAZNEW — КОПИЯ.ERT(746)}: Переменная не определена (True)
  11. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
  12. TopicStarter Overlay
    man37
    Offline

    man37 Опытный в 1С

    Регистрация:
    10 дек 2013
    Сообщения:
    197
    Симпатии:
    5
    Баллы:
    29
    Excel.ActiveSheet.Range("A2:С2").Select.MergeCells = 1;
    {C:\USERS\АНАТОЛИЙ\DESKTOP\ZAKAZNEW — КОПИЯ.ERT(746)}: :
  13. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
  14. TopicStarter Overlay
    man37
    Offline

    man37 Опытный в 1С

    Регистрация:
    10 дек 2013
    Сообщения:
    197
    Симпатии:
    5
    Баллы:
    29
    Не открывает по щелчку Excel, открывается только из Excel и пропадают остальные формулы.
  15. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    "не открывается" - а должна? Какие у вас еще формулы там? Вы их задали?
    Лучше приведите полный код обработки...
  16. TopicStarter Overlay
    man37
    Offline

    man37 Опытный в 1С

    Регистрация:
    10 дек 2013
    Сообщения:
    197
    Симпатии:
    5
    Баллы:
    29
    Код:
    Перем ЗапущенExcel, Excel, Книга, КоличСтрок, ФайлОткрыт, НомСтр;
        ЗапущенExcel = 1;
       
        Попытка
            // запускаем Excel-Server
            Excel = СоздатьОбъект("Excel.Application");
            Excel.DisplayAlerts = 0;
        Исключение      
            ЗапущенExcel = 0;
            Сообщить(ОписаниеОшибки(),"!");
        КонецПопытки;           
        Если ЗапущенExcel=1 Тогда
            Попытка
                // открываем файл
                Excel.Application.Workbooks.Open(ПутьКФайлу);
                //Книга = Excel.ActiveWorkbook;
                ФайлОткрыт = 1;
                КоличСтрок=Excel.ActiveSheet.UsedRange.Rows.Count; //Количество строк в файле
            Исключение
                ФайлОткрыт = 0;
                Excel.Quit();
                Сообщить(ОписаниеОшибки(),"!");
            КонецПопытки;        
        КонецЕсли;                   
        Если ФайлОткрыт = 1 Тогда    // успешно открыт
           
            Excel.ActiveSheet.Range("A2:С2").Select.MergeCells = 1;    // объединение столбцов
            //Excel.ActiveSheet.Range("A2:C2").Merge();    // объединение столбцов
            Excel.ActiveSheet.Rows("2:2").RowHeight = 40;   // высота второй строки
            Excel.Columns("A:A").ColumnWidth = 30; // ширина первой колонки
            //Excel.Visible = 1;
           
            //Вставляем формулу
            Для НомСтр=7 По КоличСтрок-1 Цикл
                Excel.Cells(НомСтр,7).Formula="=(RC[-4])* (RC[-1])";
            КонецЦикла;        
            Excel.Cells(КоличСтрок,7).Formula="=SUM(R[-"+СокрЛП(КоличСтрок-8)+"]C:R[-1]C)";
           
            Excel.ActiveWorkbook.SaveAs(ПутьКФайлу);       
            Excel.Quit();                          
        КонецЕсли;   
    КонецПроцедуры
    
    Процедура ОбработкаЯчейкиТаблицы(Значение,Флаг,Табл,Адрес)   
        Перем ПутьКФайлу;
        Если Значение="Сохранить" Тогда
            ПутьКФайлу="";
            Если СохранитьФайл(ПутьКФайлу)=1 Тогда
                ДобавитьФормулы(ПутьКФайлу);           
            КонецЕсли;
        КонецЕсли;              
  17. TopicStarter Overlay
    man37
    Offline

    man37 Опытный в 1С

    Регистрация:
    10 дек 2013
    Сообщения:
    197
    Симпатии:
    5
    Баллы:
    29
    Решено добавлением

    Код:
    Excel.ActiveWorkbook.SaveAs(ПутьКФайлу,-4143);
    может кому пригодится!
  18. TopicStarter Overlay
    man37
    Offline

    man37 Опытный в 1С

    Регистрация:
    10 дек 2013
    Сообщения:
    197
    Симпатии:
    5
    Баллы:
    29
    Появился еще вопрос:
    Как сгруппировать номенклатуру, если неизвестно количество номенклатуры в группе, т.е. сегодня добавили две новых позиции, завтра убрали одну?
    Как сгруппировать зная точное кол-во я знаю, а дальше.....
  19. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    так может сначала посчитать? ИМХО это больше философский вопрос при такой формулировке.
  20. TopicStarter Overlay
    man37
    Offline

    man37 Опытный в 1С

    Регистрация:
    10 дек 2013
    Сообщения:
    197
    Симпатии:
    5
    Баллы:
    29
    Ну, как бы не совсем удобно. Посчитать можно, но допустим сегодня в группе 15 наименований, завтра - 17, послезавтра - 20, а потом решили, что т.к. этот товар продается плохо и благо он закончился, чтобы его случайно не заказать удалим его. Соответственно, придется тогда при выгрузке прайса в Excel править код, а это, как понимаете, совсем не удобно. Вот и хотелось бы вставить какой-нибудь код, что бы он определял кол-во товара в группе. Если, конечно, такое можно сделать.

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