Из 1С записать формулу в ячейке MS EXCEL
Интеграция - Загрузка и выгрузка в Excel
Часто слышу этот вопрос: "Как сделать, как написать?!" Объяснить сразу мне трудно, поэтому давайте "на пальцах"
Свежий простой пример - рассмотрим, как указать для ячейки формулу:
Ексель.Cells(1,3).Formula= "=СЦЕПИТЬ(E1;C7)";
Первое, на что хочу обратить внимание - те функции, которые Вы видите визуально в ячейке MS EXCEL для 1С "слегка не знакомы", ей лучше озвучить имя функции на VBA. А откуда Вы узнаете, как эта функция на VBA называется??? Я Вам расскажу, немного терпения
- Открываем новую книгу MS EXCEL
- Идем в меню Сервис - Макрос - Начать запись - Ок (появится маленькое окошко с квадратной кнопкой - его не кое случае не закрывать)
- Кликаем ячейку "С1" и пишем в ней формулу =СЦЕПИТЬ(E1;C7)
- После этого нажимаем на квадратную кнопочку (Мы только что с Вами записали макрос на языке VBA)
Посмотрим что получилось. Идем в меню Сервис - Макрос - Макросы - (там будет в новой книге по умолчанию Макрос1) - выбираем его и нажимаем кнопку "Войти". Поздравляю - мы попали во встроенный редактор VBA (аналог конфигуратора 1С). И что мы видим:
Sub Макрос1()
Range("C1").Select
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)"
Range("C2").Select
End Sub
Теоретически нам отсюда нужно только:
Range("C1").FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)"
это и будет для 1С =
Cells(1,3).Formula= "=СЦЕПИТЬ(E1;C7)";" "
проверим напишем код на любимом 1С
Процедура Сформировать()
Перем Кат,Шаб;
Ехсел=СоздатьОбъект("Excel.Application");
Книга=Ехсел.Workbooks;
Если ФС.ВыбратьФайл(0,Кат,Шаб,"Выбери файл Еxcel",,"*.xls",)=1 Тогда
Книга.Open(Шаб+Кат);
Ехсел.Range("C1").FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)";
Книга.Close();
Ехсел="";
КонецЕсли;
КонецПроцедуры
Все работает!
Немного подумав, Вы поймете, что:
Ехсел.Range("C1").FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)";
можно заменить на
Ехсел.Cells(1, 3).FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)";
и результат не изменится, а возможностей прибавится.
В MS EXCEL только амлет нельзя пожарить - возможности его одурманивают.
Я рад , что кому-то эта статья пригодилась. Спасибо Вам всем.
И чтобы закрепить материал, напишу задачу (недавно она здесь на портале была озвучена).
Многие делают отчеты и сохраняют в EXCEL... так вот задача стояла в следующем, чтобы при открытии файла у таблицы стоял фильтр с заданными параметрами (пример таблицы на рис.1, а нужно получить (например все товары у которых количество равно 11) рис.2.)
Попробуйте решить сами на языке 1С.
ОТВЕТ:
Ехсел.Range("C5:D5").AutoFilter (); //создаем автофильтр
Ехсел.Range("C5:D5").AutoFilter (2,"11"); //указаваем столбец и значение фильтр
В связи с большим количеством комментариев у данной публикации, решил выложить то, что, по моему мнению, не должно "утонуть" в потоке информации:
Пост (44) Рассказывает нам где находится файл FUNCS.XLS - который содержит полезную информацию по формулам EXCEL - прислал gaglo
Пост (55) Подарил на ссылку на замечательную Функция по возврату констант EXCEL - прислал JohnyDeath
Пост (59) Добавил ссылку на русскоязычный сайт посвященный EXCEL - прислал an77
Пост (61) Еще одна ссылка на сайт, посвященный работе с макросами
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Универсальные функции Разработчик 1С:Предприятие 7.7 1C77 Россия Бесплатно (free)
Получение реквизитов контрагентов из 1С:Контрагент для старых конфигураций под 1с 7.7.
25.04.2022 4909 zhenyat 7
Банковские операции Загрузка и выгрузка в Excel Бухгалтер Пользователь 1С:Предприятие 7.7 1C77 Россия Бухгалтерский учет Платные (руб)
Решение предоставляет комплексную загрузку банковской выписки из CSV, XLS, TXT файла в 1С 7.7 любой конфигурации. Позволяет создавать документы выбранного вида, например "Строка выписки банка (приход/расход)", или многострочный табличный документ, например Выписка, для каждой операции из загружаемого файла банковской выписки. Загружает реквизиты документа, а также создаёт контрагентов и другие необходимые элементы справочников.
5999 руб.
29.07.2021 28854 23 27
Загрузка и выгрузка в Excel Перенос данных 1C Разработчик Пользователь 1С:Предприятие 7.7 1С:Предприятие 8 1C:Бухгалтерия 1C77 1С:ERP Управление предприятием 2 Абонемент ($m)
Описание технологии загрузки любых адресов из 1С 7.7 с разложением по ФИАС в современные конфигурации 1C 8.3 на примере ERP. Предлагаемый способ просто чудо, он гарантирует результат, он очень простой и качественный! Моя обработка является синтаксическим анализатором, который подставляет в строку грязного адреса выражение "Дом №" и "Корпус", благодаря чему грязные адреса 7.7 сами очень хорошо раскладываются по значимым полям ФИАС - заполняется область, город, улица, дом, корпус.. все раскладывается само с помощью встроенного механизма современных конфигураций 1С 8.3, который написали сами сотрудники фирмы 1С!
1 стартмани
16.08.2019 22291 22 ksnik 12
Разработка внешних компонент Загрузка и выгрузка в Excel Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Внешняя компонента 1С 7.7. для сохранения таблиц в формате Excel 2007.
1 стартмани
21.03.2019 35410 89 MadDAD 347
Универсальные функции Разработчик 1С:Предприятие 7.7 1C77 1С:Комплексная 7.7 Абонемент ($m)
Предлагается набор функций 1с 7.7 для формирования строки json стандартными средствами.
1 стартмани
10.12.2018 14498 malovandrey 7
Загрузка и выгрузка в Excel Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Импорт данных в 1С:Предприятие 7.7 из Excel через JET.OLEDB или ACE.OLEDB. Данный метод позволяет загружать данные из файлов на ПК, на которых не установлен MS Office.
1 стартмани
20.09.2016 33542 13 aserg 4
Файловый обмен (TXT, XML, DBF), FTP Внешние источники данных Загрузка и выгрузка в Excel Системный администратор Разработчик Бухгалтер Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 Абонемент ($m)
Позволяет выгружать данные справочников, документов, сальдо по счетам из 1С 7.7 (компонента «Бухгалтерский учет» в файлы формата MXL, XLS, DBF. Полученные файлы удобно использовать для переноса в другие программы. В разработке применено несколько оригинальных решений.
1 стартмани
10.06.2016 54876 238 gubanoff 17
Информационная безопасность Универсальные функции Разработчик 1С:Предприятие 7.7 Бесплатно (free)
При использовании терминалок для удаленных баз, иногда при входе в базу данных необходимо исключить возможность входа пользователей с компьютеров с другим часовым поясом. Например, работают в Новосибирской базе с временем UTC +6 и пытаются зайти в базу с UTC +3.
16.05.2016 15210 kudenzov 3
Возможно в екселе 2007 есть галочка, где поставить можно, но что то не могу найти.
В екселе есть несколько отличный от 1с способ установки масштаба: количество страниц в ширину и в высоту. Чтоб добиться нужного результата (установки печати по ширине страницы) можно задать одну страницу в ширину и заведомо большое значение в высоту. Например так:
Ехсел=СоздатьОбъект("Excel.Application");
.......................
.......................
Ехсел.ActiveSheet.PageSetup.Orientation = 1; //ориентация
Ехсел.ActiveSheet.PageSetup.PaperSize = 9; //размер бумаги
Ехсел.ActiveSheet.PageSetup.Zoom = False;
Ехсел.ActiveSheet.PageSetup.FitToPagesWide = 1;//страниц в ширину
Ехсел.ActiveSheet.PageSetup.FitToPagesTall = 100;//страниц в высоту
xl=CreateObject("Excel.Application");
wb=xl.Workbooks.Add();
xl.VBE.ActiveVBProject.VBComponents(1).CodeModule.AddFromString("public sub Hello" +
РазделительСтрок+ "MsgBox(""Hello World!"")" + РазделительСтрок + "end sub");
wb.SaveAs("Test.xls");
xl.run("ЭтаКнига.Hello");
wb.Close();
xl.quit();
а рассказать , как несложными действиями самому научится находить ответ на нужный вопрос.
Отдельное спасибо (4) MoneG2 , как он правильно указал есть еще одно решение данного вопроса и это показывает и еще раз доказывает , что в программировании - любую задачу, можно решить РАЗНЫМИ способами.
Спасибо (3) Alltruist - за добавление к статье, очень хороший пример.
(6) larisab , как то решал твою "проблему" следующим способом
ручками написать макрос и его в автозагрузку (личную книгу макросов)
он смотрит при открытии файла , если есть определенная метка
например в ячейке "AW" = 1
значит такой формат листа
если 2 то другой
и так до бесконечности...
а при написании кода в 1С , ты помнишь и формируешь таблицу
согласно правилам данного макроса.
и вот теперь ...только пользуясь стандарным методом "Сохранить как..."
в Еxcel у тебе будет все в шоколаде )))
это не панацея это только пример.
(кстати у меня в публикация есть пример создания макроса из 1С)
- не LocalFormula, а FormulaLocal;
- если нет планов по распространению за границы, то (лучше?) быстрее писать в родной локали, ибо не придется так нудно выяснять, что СЦЕПИТЬ шифруется как CONCATENATE;
- и если кому-то вдруг да придется разбираться со множеством формул, так для перевода локализованных названий функций в оригинальные существует прямо от авторов Екселя секретная книга FUNCS.XLS, спрятанная где-то в недрах типа "X:\Program Files\Microsoft Office\Office12\1049\FUNCS.XLS", и там все-все имена расписаны: откроешь её, и сразу можно узнать, что ОКРУГЛТ - это MROUND и тому подобное
;
852 - функции
а еще красота в том, что можно самому из 1С написать функцию и уже в ячейках ссылаться на нее. и она будет доступна в меню -вставка -функция- пользовательские
для этого совсем необязательно куда-либо за рубеж выезжать.
достаточно чтобы сервер стоял не русский, а ваш код выполнился на сервере. или офис был не русский. частая ситуация.
а ещё проблемы с переносом кода в оупен-офис.
Вот ОпенОффис - это да, этот, видимо, может понимать или не понимать разные функции саавсем по-разному; но с ним не пришлось мне работать.
(45) Буквоедство я тоже люблю. Ну так сложилось, у меня лично есть и OFFICE11, и OFFICE12, и там и там есть FUNCS.XLS, и вообще он был в соответствующей папке со времен Офиса 97.
(47) и (49) - константы быстрее всего смотреть из редактора VBA, но без всякого F2 и поиска, а правой кнопкой по имени константы и выбрать Quick Info...
А БОЛЬШОЙ список внутренних констант находится в справке Excel: для Офиса 2003: F1 - Оглавление - Microsoft Excell Visual Basic Reference - Enumerations - Microsoft Excell Constants, вверху справа жмакнуть "Показать все" и смотреть все, смотреть, смотреть... Вот, правда, пояснений там нет. Да! И еще надо, чтоб при установке Офиса справку по VBA тоже установили.
при работе из 1с с ОО итак есть проблемы (одинэсный код для Екселя и ОО несколько отличается!) Поэтому, например, когда я писал обработку, которая должна была работать и там и сям, приходилось проверять на установленность екселя на компе.
(48)
Лично мне понравилось скрещивать 1с с другими системами, всвязи с этим пригодилась книга А.Михайлова "1С предприятие системное программирование".
(5)
Но всё равно + :D
посмотрите вложенный файл
называется "Справка-расчет денежной компенсации за вещевое имущество"
этот программа на макросах была написана " в окопе, на сапоге убитого командира.." во время бурной молодости и славной службы в ВС РФ.
и не поверите заняла почетное 3-е место в конкурсе Microsoft Office Extensions в 2003 г. (подарили полный набор офиса 2003 на 18 компакт дисках, сертифакт, пресса....вообщем приятно было)
Выбор пал (а это был 2001 год на EXCEL, только из-за доступности для военнослужащих т.к. про 1С ...ну вообщем вы поняли)
К последней фразе поста автора... И к наступающему... :D
Если 1С считать (а оно так и есть по сути) надстройкой на экселем,
то мы имеем воплощенную мечту идиота, которая выражается тостом:
"За то чтобы ваши желания охренели бы перед вашими возможностями!"
среднестатический пользователь EXCEl использует его возможности только на 5-7% . А возможности его безграничны.
(20) не завидуй плюсам данной публикации - зачем гуглить (человеку нужно уходить с сайта) , если все можно будет найте на родном - это же ОГРОМНАЯ КОПИЛКА ЗНАНИЙ и ОПЫТА.
ситуация , когда начинайщий программист (да и не только ) тупо скопипастил какую либу функцию или процедуру и даже не разобрался что она делает и КАК ОНА это делает (работает и работает)- думаю в пример приводить не стоит.
А вот когда человек сам доходит до этого, сам нашел и разобрался, как найти , как научится - это намного ДОРОЖЕ любого ПЛЮСА, это плюс в ЕГО копилку знания и опыта. Вот цель этой статьи.
хотелось сказать, но думаю , не достаточно правильно смогу сформулировать свою мысль ....
- самый ДОРОГОЙ это первый ПЛЮС и самый горький это первый МИНУС
(но полюбому это ОПЫТ набранный тобой, ты учишся, ты начинаешь понимать, вникать, перенимать азы общения )
знаешь анекдот:
Вовочка папе:
- пап, мы сегодня кружочки в классе рисовали, и у меня
лучше всех получился. Это потому, что я сын нового русского ?
- да, сынок !
- пап, а на переменке с мальчишками в туалете ....письками мерялись, это потому что я сын нового русского ?
- да, сынок и не только, ведь тебе уже 22 годика.
А мерять плюсами людей - это в корне НЕПРАВИЛЬНО , а тебе по твоей же ОЦЕНКЕ - нарушаешь суббординацию. Было бы у тебя плюсов больше, чем у Noy вот тогда бы и сравнивал. Надеюсь ты меня услышал.
я напишу тут ответ на твой вопрос.
вот строка кода которая сделает все группировки при открытии документа "Закрытыми" см. задачу в (29) и (31)
Ехсел.ActiveSheet.Outline.ShowLevels(1,1);Метод Outline
ShowLevels(,)
Синтаксис:
ShowLevels(RowLevels, ColumnLevels)
Параметры:
<RowLevels> - VT_VARIANT
<ColumnLevels> - VT_VARIANT
Однако сомнения остались. Не превратится ли Инфостарт в мусорку для специалистов? Ведь и эта публикация и моя довольно очевидны...
Так же хочу заметить, что Excel часто использует свои встроенные константы, которые имеют числовой тип и порой бывает интересно, а чему равна та или иная переменная, например:
Range("E4").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
и так часто пишет конструктор макросов, так вот чтоб узнать чему равны
достаточно в том же макросе VBA написать
и выполнить этот макрос в excel перед вами появиться окно в котором будет написано значение этой константы.
Если кому интересно в моей обработке я формирую бланк табеля Т-13 в Еxcel из 1С, , в данной обработке можно увидеть как в Excel создаются и рисуются таблицы, как формируются списки для выбора элемента, как описывается "условное форматирование", а так же имеется БОЛЬШОЙ список внутренних констант (за который надо благодарить не меня, а др. человека, увидел в чужой обработке и взял на вооружение) и все это в Excel из 1С
Да уж, очевидны... попробовала я проделать все это в екселе 2007, ужос... ничего не получается, не дает той строчки
ActiveCell.FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)"
Range("C2").Select
только первые две.
Каким то чудом открылась справка-расчет. В маленьком окошке. Куча листов, смотреть тяжко, так как они еще как то свернуты, видны только шапки. Стало страшно. По моему, это освоить так просто слету невозможно.
Надо искать книжки. Посоветуйте.
Если прочесть и понять, то можно будет легко выбрать себе вторую книгу, уже специально по EXCEL - просмотрев страниц с десяток. Ну или решить, что никакой больше книги по VBA уже и не надо.
1. В 1С процедуру необходимо добавить оператор:
Перем Ехсел,Книга;
2. Ехсел.Range("C1").FormulaR1C1 = "=CONCATENATE(RC[2],R[6]C)";
я бы поменял на
Ехсел.Range("C1").FormulaR1C1 = "=RC[2] & R[6]C";
А как сделать файл Excel с группировками.Задача такова:
отчет для экономистов по затратам-укрупненным , расшифрованным бухгалтерскими. Как бы в excel передать группировку строк.
Если подскажете, то спасибо заранее!
могу Вам предложить два варианта :
1. Сразу формируете файл Excel
(не универсально под каждый отчет нужно делать)
2. Обычным спосом формируете отчет в 1С
(но нужен будет файл с макросом в личной книге)
в отчете на нужных группировках делаете скрытую метку
а при открытии макрос обрабатывает согласно правилам ,удаляет метки и сохраняет. Все предельно просто.
Ехсел.Cells(1, 3).Locked=0; //снять защиту
Ехсел.Cells(2, 3).Locked=0; //снять защиту
Ехсел.Protect("1"); // Установка защиты на лист c паролем "1"{ВнешняяОбработка.ВС_ЗапросЦенПотенциальныхПоставщиков.Форма.ФормаДокумента.Форма(218)}: Ошибка при установке значения атрибута контекста (Locked): Произошла исключительная ситуация (Microsoft Excel): Нельзя установить свойство Locked класса Range
Видимо, пытался объединенные ячейки залочить
Excel Developer Reference
Range.Locked Property
Returns or sets a Variant value that indicates if the object is locked.
Syntax
expression.Locked
expression A variable that represents a Range object.
Remarks
This property returns True if the object is locked, False if the object can be modified when the sheet is protected, or Null if the specified range contains both locked and unlocked cells.
Example
This example unlocks cells A1:G37 on Sheet1 so that they can be modified when the sheet is protected.
Visual Basic for Applications
Worksheets("Sheet1").Range("A1:G37").Locked = False
Worksheets("Sheet1").Protect
© 2010 Microsoft Corporation. All rights reserved.
Excel.Range(Excel.Cells(Row,Колонка)).Locked=False; //вот так попробуй
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 61933
Создание 01.12.09 18:41
Обновление 20.06.11 11:08
Просмотры 70388
Загрузки 0
Рейтинг
198
Комментарии 80
Код открыт Не указано
Рубрики Загрузка и выгрузка в Excel Универсальные функции
Кому
Системный администратор
,
Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 7.7
Конфигурация 1C77
Операционная система Windows
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)