Работа с Excel

23.10.17

Интеграция - Загрузка и выгрузка в Excel

Собрал различные полезности для работы с Excel из 1С. Иногда приходится форматировать документ Excel программно из 1С. Так вот, чтобы не искать постоянно на просторах интернета как сделать левое выравнивание в ячейке Excel из 1С и т.п. решил опубликовать это...

СПОСОБ ПОИСКА НАИМЕНОВАНИЙ СВОЙСТВ И МЕТОДОВ VBA EXCEL С ПОМОЩЬЮ ЗАПИСИ МАКРОСОВ

На практике часто случается, что нужно решить какую-либо задачу, иногда довольно тривиальную с точки зрения пользователя Excel (к примеру изменить фон ячейки в Excel, добавить левую границу и т.д.), а решение в сети/документации искать не хочется или не получается, тогда можно попробовать начать запись макроса, выполнить нужную последовательность действий (изменить фон, добавить границу) , после чего записать макрос и открыть код VBA для анализа кода, названий свойств и методов. Такой способ довольно часто помогает быстро решить проблему.

1. Подключение к Excel

Попытка
    Excel = Новый COMОбъект("Excel.Application"); 
Исключение
    Сообщить(ОписаниеОшибки() + "Возможно программа Exсel не установлена на данном компьютере!");
    Возврат Ложь;
КонецПопытки;

//Создание книги
Книга = Excel.WorkBooks.Add();

//Открытие существующей книги  
Книга = Excel.WorkBooks.Open(ПутьКФайлу);

//Выбор рабочего листа по номеру 
Лист = WorkBook.WorkSheets(НомерЛиста);

//Выбор рабочего листа по имени 
Лист = WorkBook.WorkSheets(ИмяЛиста);   

//Сохранение книги
Попытка
	Книга.SaveAs(ПутьКФайлу);
	Книга.Close();
	Excel.Quit();	
Исключение
	Книга.Close();
	Excel.Quit();
КонецПопытки;

При подключении к Excel не забываем закрывать приложение после работы дабы не наплодить кучу ненужных процессов. Они также могут появиться если во время выполнения модуля выскочит ошибка до того как система дойдет до строк, где происходит закрытие Excel.

2. Запись значения в ячейку

ТекущийЛист.Cells(i, j).Value = "2";

Количество листов книги

КоличествоЛистов = Книга.Sheets.Count;

3. Шрифт и размер шрифта 

//Выделение области
Excel.Columns("A:H").Select();

//Размер шрифта
Лист.Cells.Font.Size = 12;

//Тип шрифта                        
Лист.Cells.Font.Name = "Calibri";

//1 — жирный шрифт, 0 — обычный.
Лист.Cells.Font.Bold = 1;

//1 — наклонный шрифт, 0 — обычный.	
Лист.Cells.Font.Italic = 1;

//2 — подчеркнутый, 1 — нет.	
Лист.Cells.Font.Underline = 1;	

4. Ширина колонки

Чтобы скрыть колонку, нужно установить ширину в значение 0.

Лист.Columns(НомерКолонки).ColumnWidth = Ширина;

Получение последней ячейки в используемом диапазоне

Например, при открытии таблицы нам нужно узнать до какой строки и/или до какого столбца присутствуют заполненные ячейки. 

ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;

4. Установка фильтра

Лист.Cells.AutoFilter();

 

5. Горизонтальное выравнивание ячейки

ТекущийЛист.Cells(i, j).HorizontalAlignment = -4130;

Режим выравнивания

Константа в Excel

Значение в ISBL

По центру

xlHAlignCenter

-4108

По центру выделения

xlHAlignCenterAcrossSelection

7

Распределенное

xlHAlignDistributed

-4117

С заполнением

xlHAlignFill

5

По значению

xlHAlignGeneral

1

По ширине

xlHAlignJustify

-4130

По левому краю

xlHAlignLeft

-4131

По правому краю

xlHAlignRight

-4152

 

 

6. Вертикальное выравнивание ячейки

ТекущийЛист.Cells(i, j).VerticalAlignment = -4130;

Режим выравнивания

Константа в Excel

Значение в ISBL

По нижнему краю

xlVAlignBottom

-4107

По центру

xlVAlignCenter

-4108

Распределенное

xlVAlignDistributed

-4117

По высоте

xlVAlignJustify

-4130

По верхнему краю

xlVAlignTop

-4160


7. Установка свойства ячейки "переносить по словам"

ТекущийЛист.Cells(i, j).WrapText = True;

 

8. Отключение/включение режима показа предупреждений

ExcelApp.DisplayAlerts = False; // отключение
ExcelApp.DisplayAlerts = True;  // включение

 

9. Формулы

ТекущийЛист.Cells(i, j).Formula = "SUM(A1:A10)";

Для формул с русскими названиями нужно использовать не Formula, а FormulaLocal. Таким образом правильными вариантами написания формул будут:

ТекущийЛист.Cells(i, j).FormulaLocal = "Сумм(A1:A10)";

 

10. Таблица цветов с индексами

//Установка цвета текста ячейки
ТекущийЛист.Cells(i, j).Font.ColorIndex = 8;

//Установка цвета фона ячейки
ТекущийЛист.Cells(i, j).Interior.Color = 49;

//Установка цвета рамки
ТекущийЛист.Cells(i, j).Borders.Color = 8;

 

11. Установка границы ячейки и тип линии границы

Значения константы XlBordersIndex

Тип линии

Значение в Excel

Значение в ISBL

Нет линии

xlLineStyleNone

0

Непрерывная

xlContinuous

1

В виде тире и точек

xlDashDot

4

В виде тире и двойных точек

xlDashDotDot

5

В виде точек

xlDot

8

В виде двойной линии

xlDouble

9

В виде наклонной пунктирной

xlSlantDashDot

13

 

Свойство LineStyle (тип линии) может принимать следующие значения

Расположение линии

Значение в Excel

Значение в ISBL

Линия по диагонали сверху – вниз

xlDiagonalDown

5

Линия по диагонали снизу – вверх

xlDiagonalUp

6

Линия, обрамляющая диапазон слева

xlEdgeLeft

7

Линия, обрамляющая диапазон сверху

xlEdgeTop

8

Линия, обрамляющая диапазон снизу

xlEdgeBottom

9

Линия, обрамляющая диапазон справа

xlEdgeRight

10

Все вертикальные линии внутри диапазона

xlInsideVertical

11

Все горизонтальные линии внутри диапазона

xlInsideHorizontal

12

 

Получение порядкового номера колонки Excel по буквенному обозначению имени

Однажды столкнулся с тем, что нужно было получить буквенное обозначение колонки Excel по её порядковому номеру. Например, для колонки номер 3 буквенное обозначение равно "C". Так вот ниже приведены две замечательные функции, которые вполне справляются с решением данной проблемы. 

// Функция - Имя колонки Excel в номер
//
// Параметры:
//  тИмяКолонки - строка - буквенное обозначение колонки Excel (Пример: A, AB, AAC и т.д.) 
// 
// Возвращаемое значение:
//   - число, порядковый номер колонки
//
Функция ExcelColumnNameToNumber(тИмяКолонки)
   тЛатАлфавит = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  тДлинаНомера = СтрДлина(тИмяКолонки);
 
   тНомерКолонки = 0;
 
   Для тСчет = 1 По тДлинаНомера Цикл
      тПоз = Найти(тЛатАлфавит, Сред(тИмяКолонки, (тДлинаНомера + 1 - тСчет), 1));
      тНомерКолонки = тНомерКолонки + тПоз * Pow(26, тСчет - 1);
   КонецЦикла;
 
   Возврат тНомерКолонки;
КонецФункции

Наоборот, получение буквенного обозначения имени колонки по номеру колонки

// Функция - Номер колонки Excel в буквенное обозначение 
//
// Параметры:
//  тНомерКолонки - число - порядковый номер колонки
// 
// Возвращаемое значение:
//   - строка, буквенное обозначение колонки
// 
Функция NumberToExcelColumnName(Знач тНомерКолонки)
   тЛатАлфавит = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   тИмяКолонки = "";
 
   Пока тНомерКолонки > 0 Цикл
   тОстаток = (тНомерКолонки - 1)%26;
 
   тБуква = Сред(тЛатАлфавит, тОстаток + 1, 1);
      тИмяКолонки = тБуква + тИмяКолонки;
 
      тНомерКолонки = Цел((тНомерКолонки - тОстаток)/26);
   КонецЦикла;
 
   Возврат тИмяКолонки;
КонецФункции
 
 ИСТОЧНИКИ

 

Excel Эксель ячейка выравнивание в ячейке фон ячейки диапазон

См. также

SALE! 10%

Загрузка номенклатуры из Excel в УТ11, КА 2, ERP 2, Розница 2. Дополнительные реквизиты и сведения, характеристики, картинки, цены, остатки

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка из файлов xls, xlsx, ods, csv, mxl в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 9504 руб.

29.10.2014    210149    620    524    

439

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 11.12.2023, версия 9.5 - 9.9)

13200 руб.

20.11.2015    150705    367    375    

501

Маркетплейсный загрузчик для 12-ти маркетплейсов в "БП 3", "УТ 11", "КА 2", ERP, УНФ

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 Бухгалтерский учет 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы сделаете необходимые документы для Wildberries, OZON, ЯндексМаркет, Мегамаркет, Aliexpress, "Детский мир", Казань-Экспресс, "Леруа Мерлен", ЭНФАНТА (Акушерство), ЛаМода, Летуаль, "Твой дом" в документы "Отчет комиссионера (агента) о продажах" и другие, может работать в "Бухгалтерия 3", "Бухгалтерия 3 КОРП", УТ 11, УНФ, КА 2, ERP. Возможность подключить любые маркетплейсы. Анализ продаж ОЗОН. 30 дней БЕСПЛАТНОГО пользования!

1800 руб.

12.08.2021    31890    226    63    

117

SALE! 20%

Загрузка документов и номенклатуры из Excel в 1С "одним нажатием": УПД, ТОРГ-12, отчеты маркетплейсов, заказы, счета, прайсы

Загрузка и выгрузка в Excel Оптовая торговля Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 Конфигурации 1cv8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С. Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С. Вместе с номенклатурой может найти контрагента, номер и дату документа, штрих-коды, серии ГТД, страну и т.д. Распознает документы ЛЮБОЙ ФОРМЫ (УПД, ТОРГ-12, заказ, отчет комиссионера и т.д.). Не требует MS Office. Для поиска таблиц используются методы эвристического поиска. Загружает только то, что нужно, т.е. пропускает повторы шапки таблицы, заголовки, промежуточные итоги, подписи и т.д. Содержит модуль работы с электронной почтой и api-загрузчик отчетов о продажах маркетплейсов.

5000 4000 руб.

09.11.2016    214907    925    886    

939

Загрузка данных отчета о реализации товаров из Excel файла СберМегаМаркет

Загрузка и выгрузка в Excel Маркетплейсы Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Загрузка данных отчета о реализации товаров из сервиса СберМегаМаркет для конфигурации: Бухгалтерия предприятия, редакция 3.0; Управление торговлей, редакция 11 и Управление нашей фирмой, редакция 3.0 в документ "Отчет комиссионера (агента) о продажах".

4800 руб.

07.06.2022    15070    79    0    

60

SALE! 30%

Распознавание и загрузка сканов в 1С "одним нажатием": УПД, ТОРГ-12, накладные, счета, номенклатура, заказы и т.д.

Загрузка и выгрузка в Excel Документооборот и делопроизводство (СЭД) Учет документов Распознавание документов и образов Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная программа для распознавания ЛЮБЫХ СКАНОВ ИЛИ ФОТО ТОВАРНЫХ ДОКУМЕНТОВ в 1С. Не требует указания параметров и предварительной настройки. Просто выбираете файл (PDF, JPG, DOC, XLS, HTML и т.д.) выбираете документ 1С и нажимаете кнопку "Распознать и загрузить".

6000 5520 руб.

04.06.2019    101366    296    173    

312
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. script 128 24.10.17 00:57 Сейчас в теме
Допишите еще один универсальный способ. Через макросы. Включаем запись макроса. Меняем что нужно в таблице. Завершаем макрос. Смотрим код в VB редакторе.
Irwin; RomanMartynenko; sCHTASS; olololeg; gradi; fokses; Михаська; Lem0n; bajiepka; frkbvfnjh; Sitial; Alias; maxdmt; chebser; olbu; zqzq; Xershi; +17 Ответить
5. arakelyan 469 24.10.17 08:01 Сейчас в теме
7. user662672_explorer2000 225 24.10.17 08:04 Сейчас в теме
(1) Тоже всегда считал этот метод 100% работающим, но когда возникла необходимость программно заменить картинку на листе, то запись макроса вернула пустую процедуру (( пришлось много и долго читать интернет
8. arakelyan 469 24.10.17 08:11 Сейчас в теме
(7) Программно заменить картинку можно напрямую из 1С, однако появляется проблема с её позиционированием. Влить картинку ровно в ячейку Excel только средствами 1С у меня не вышло, пришлось добавлять макрос в VBA. Если тема интересна, могу добавить в статью.
jONES1979; +1 Ответить
9. user662672_explorer2000 225 24.10.17 08:39 Сейчас в теме
(8) Задача у меня такого плана: на листе много картинок высокого качества, из-за чего файл вести очень много. Нужно картинки заменить на картинки с качеством пониже. Как понизить качество я представляю, как картинку забрать с листа тоже, но как ее заменить пока не очень понимаю, еще ищу, благо терпит. Буду благодарен если подскажете
19. splxgf 24.10.17 22:58 Сейчас в теме
(9)
(8) Задача у меня такого плана: на листе много картинок высокого качества, из-за чего файл вести очень много. Нужно картинки заменить на картинки с качеством пониже. Как понизить качество я представляю, как картинку забрать с листа тоже, но как ее заменить пока не очень понимаю, еще ищу, благо терпит. Буду благодарен если подскажете

В экселе есть встроенная функция понижения качества всех картинок или выделенной.
При очень большом желании это можно сделать средствами VBA.
https://infostart.ru/public/19977/
20. user662672_explorer2000 225 25.10.17 06:39 Сейчас в теме
(19) Экселевская функция, к сожалению, не дает нужного результата. Пробовал вручную, файл практически не уменьшается в размерах.
28. splxgf 26.10.17 15:00 Сейчас в теме
(20) Если делали вручную, задавали качество для экрана и применяли ко всем картинкам, то уменьшение размера должно было произойти.
Если нет, то маловероятно что достигнете лучших результатов дополнительными скриптами.
Кстати с заменой картинки проблем нет, делал такой код на экселе, но он сильно зависит от версии.
Находите картинку, забираете ее, запоминаете характеристики (положение, размер), и удаляеете...
Затем вставляете уже сжатую через ActiveSheet.Shapes.AddPicture
23. Mi11er 96 25.10.17 13:23 Сейчас в теме
Вставлю свою пять копеек, так как сам намучался с excel

Объединение яйчеек

Лист.Range("E1:F1").MergeCells = Истина; 


Может уже было, но все же
Цвет фона
Лист.Cells(2,3).Interior.ColorIndex = 42;


ГиперСсылки
Лист.Cells(СтрокаЛиста, 2).Hyperlinks.Add(Лист.Cells(СтрокаЛиста, 2), Выборка.МДО_URLТовара,,"Ссылка на товар с сайта www.___.ru",Выборка.Артикул );


Закрепление областей
Эксель.Application.ActiveWindow.SplitRow = 4;
Эксель.Application.ActiveWindow.FreezePanes = 1;


Ширина колонки
Лист.Columns(7).ColumnWidth = "10";
SergeySol-82; arakelyan; Михаська; Il; IgorS; +5 Ответить
15. Alias 176 24.10.17 14:51 Сейчас в теме
Из опыта собственной необходимости:
- к пункту 9: формулы можно задавать также через FormulaR1C1 и FormulaR1C1Local, это бывает много удобнее тем что не нужно постоянно менять буквы в формуле -- она одна и та же для всех ячеек, например расчёт НДС по сумме из предыдущей колонки "=ROUND(RC[-1]*1.18, 2)" для всех строк колонки.
- к пункту 10: заливка фона это Ячейка.Interior.ColorIndex
- Ячейка.Locked = False; это отключить защиту ячейки, после чего Лист.Protect("p@ssw0rd") -- защитить лист от изменений.

Всецело присоединяюсь также к комментарию (1).

P.S. И да, спасибо, отличная шпаргалка :)
e.kogan; Serj1C; +2 Ответить
18. Sitial 24.10.17 18:29 Сейчас в теме
Вставлю свои пять копеек)

Исходные данные:
Excel = Новый COMОбъект("Excel.Application");
ИмяФайлаПолное = ПолучитьИмяВременногоФайла("xlsx");
Книга = Excel.WorkBooks.Open(ИмяФайлаПолное);
Лист1 = Книга.WorkSheets(1);


Странно, что никто не написал про то, чтобы приложение было вообще видно, а не работало как-то там в фоне:
Excel.Application.Visible = Истина;


Вызов функции на листе (на примере функции "ПОИСКПОЗ()", в англ.как "Match"):
// ИмяДляПоиска - то, что ищем
// Лист1.Columns(2) - диапазон поиска
// 0 - первое точное совпадение (может также принимать значения "1" или "-1"
НомерСтроки = Excel.WorksheetFunction.Match(ИмяДляПоиска,Лист1.Columns(2),0);


Поиграем немного с форматом сразу для диапазона ячеек:
Диапазон = Лист1.Range(Лист1.Cells(Строка1,Колонка1), Лист1.Cells(Строка2, Колонка2));
	Диапазон.Font.Italic = 1; // наклонный шрифт
	Диапазон.Font.Bold = 1; // жирный шрифт
	Если Формат = "Текст" Тогда
		Диапазон.NumberFormat = "@"; // текстовый формат
	ИначеЕсли Формат = "Число" Тогда
		Диапазон.NumberFormat = "# ##0,00"; // числовой формат с разделителями групп разрядов
		Диапазон.NumberFormat = "# ##0,00;-# ##0,00;""-"""; // тоже самое, только вместо нуля выводится прочерк + при автосуммировании нет ошибки
	ИначеЕсли Формат = "ЧислоЦелое" Тогда
		Диапазон.NumberFormat = "# ##0;-# ##0;""-"""; // округление до целого
	ИначеЕсли Формат = "ВыделитьЦветом" Тогда
		R = 255;
		G = 255;
		B = 153;
		Диапазон.Interior.Color = ((B*256) + G) * 256 + R; // цвет ячейки
	ИначеЕсли Формат = "ОбщийТекст" Тогда
		Диапазон.Value = ОбщийТекст; // во всех ячейках диапазона устанавливаем данный текст
	КонецЕсли;
Показать


Как получить номер столбца в формате Excel (работает и для колонок вида AAA...ZZZ)
&НаКлиенте
Функция НомерСтолбцаВФорматеExcel(Знач НомерКолонки)
	Алфавит = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	ИмяКолонки = "";
	
	Пока НомерКолонки <> 0 Цикл
		Остаток = (НомерКолонки - 1)%26;
		
		Буква = Сред(Алфавит, Остаток + 1, 1);
		ИмяКолонки = Буква + ИмяКолонки;
		
		НомерКолонки = Цел((НомерКолонки - Остаток)/26);
	КонецЦикла;
	
	Возврат ИмяКолонки;
КонецФункции
Показать


Установка формулы автосуммирования, используя функцию выше:
Диапазон = "" +НомерСтолбцаВФорматеExcel(Колонка1) + (НачальнаяСтрока) + ":" +
					НомерСтолбцаВФорматеExcel(Колонка2) + (КонечнаяСтрока); // Колонка2 = Колонка1 для случая, если это один столбец
		
		Лист1.Cells(Строка, Колонка).FormulaLocal = "=СУММ(" +Диапазон+ ")";
SergeySol-82; panthera; e.kogan; levante90; user811769; gradi; rpgshnik; Il; inf012; +9 Ответить
43. panthera 29.04.22 08:22 Сейчас в теме
(18)
Диапазон.NumberFormat
безмерно благодарна. Не могла проставить формат "Процентный". Взяла за основу твой "Числовой" и добавила знак %. Спасибо.
21. frkbvfnjh 785 25.10.17 07:30 Сейчас в теме
(1) Зачем раскрываешь секреты Масонов?! :)
2. Denis Nsk 24.10.17 05:46 Сейчас в теме
Спасибо за Ваши труды!
Лично для меня, полезная шпаргалка.
Flextor74; Garfild12; chebser; arakelyan; +4 Ответить
3. TrinitronOTV 14 24.10.17 05:49 Сейчас в теме
В пункте 11 почему-то нет примера кода на языке 1С
6. arakelyan 469 24.10.17 08:02 Сейчас в теме
(3)Он, был....но таинственным образом куда-то пропал. Добавлю сегодня.
4. ADirks 186 24.10.17 06:38 Сейчас в теме
ещё в шпору

последняя строка
xlLastCell = 11;
LastRow = Sh.Cells(1,1).SpecialCells(xlLastCell).Row;

чтобы не умничал, пытаясь превращать строки в числа и даты (особенно бесит)
Sh.Cells(Row, i).NumberFormat = "@";
Sh.Cells(Row, i).Value = Value;

иногда и это не помогает, тогда так
Sh.Cells(Row, i).Value = "'" + Value;
e.kogan; arakelyan; +2 Ответить
10. kirillkr 29 24.10.17 08:59 Сейчас в теме
Не хватает информации, в каком формате сохранить книгу, которую как раз искал несколько дней назад.
Если Число(Excel.Version) < 12 Тогда
	// Используется Excel 97-2003
	пРасширение = "xls";
	пФорматФайла = -4143;
Иначе
	Если впИспользуемМакросы Тогда
		пРасширение = "xlsm";
		пФорматФайла = 52;
	Иначе
		пРасширение = "xlsx";
		пФорматФайла = 51;
	КонецЕсли;
КонецЕсли;
Показать
e.kogan; arakelyan; +2 Ответить
11. o.nikolaev 211 24.10.17 09:03 Сейчас в теме
Нет:
- добавления картинок, позиционирования на нужной картинке и установке ее свойств;
- запись, чтение очень больших объемов данных в (из) файла Excel;
- работы с диаграммами.
arakelyan; +1 Ответить
35. kembrik 10 23.11.18 18:51 Сейчас в теме
"Универсальное" получение последней строки выглядит так:

Version	= ОбъектExcel.Version;
	
	Версия = Лев(Version, Найти(Version,".") - 1);
	
	Если Версия = "8" тогда
		ФайлСтрок	= ОбъектExcel.Cells.CurrentRegion.Rows.Count;
		ФайлКолонок = Макс(ОбъектExcel.Cells.CurrentRegion.Columns.Count, 13);
	Иначе
		ФайлСтрок	= ОбъектExcel.Cells(1,1).SpecialCells(11).Row;
		ФайлКолонок = ОбъектExcel.Cells(1,1).SpecialCells(11).Column;
	Конецесли;
Показать
45. user635629_exter 37 29.11.22 16:22 Сейчас в теме
(35) а у меня такое в коде встречается:
xlLastCell = 11;
	ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
	RowCount = ActiveCell.Row;
	ColumnCount = ActiveCell.Column;
36. пользователь 23.11.18 18:55
Сообщение было скрыто модератором.
...
12. gorakh 26 24.10.17 09:17 Сейчас в теме
ДокументExcel = ПолучитьCOMОбъект(ИмяФайла);
//Листы :
				    СписокЛистов = Новый СписокЗначений;					
				Для каждого Лист Из ДокументExcel.Sheets Цикл
				        СписокЛистов.Добавить(Лист.Index,Лист.Name);
				КонецЦикла;	

ЛистExcel= ДокументExcel.Sheets(НомерЛистаКниги);
ПоследняяСтрока = ЛистExcel.UsedRange.Rows.Count;
ЛеваяКолонка = ЛистExcel.UsedRange.Column;
ПоследняяКолонка =  ЛистExcel.UsedRange.Columns.Count;
НомерКолонкиСТекстом=ЛистExcel.UsedRange.Find("text").Column;
//Или
НомерКолонкиСТекстом=ЛистExcel.Cells.Find("text").Column;
//Подчищаем за собой память
ДокументExcel.Application.Quit();
Показать
zarucheisky; +1 Ответить
13. sergalei 24.10.17 10:36 Сейчас в теме
Дамп листа в массив.
Значительно ускоряет обработку больших таблиц.

Функция ПолучитьМассивИзЛистаЭксель(Путь, НомерЛиста)
	
	Попытка
		Эксель = Новый ComОбъект("Excel.Application");
		Эксель.DisplayAlerts = 0;
		Книга = Эксель.Workbooks.Open(Путь);
	Исключение		
		Возврат Неопределено;
	КонецПопытки;
		
	Результат = Эксель.Sheets(НомерЛиста).UsedRange.Value.Выгрузить();
	Эксель.Quit();
	
	Возврат Результат;
	
КонецФункции
Показать
Рамзес; zarucheisky; Новиков; softcom_1c; lishniy; klinval; Михаська; &rew; AtPups000; akR00b; ixijixi; maxdmt; arakelyan; +13 Ответить
14. maxdmt 28 24.10.17 11:16 Сейчас в теме
(13), подробнее
Функция ПрочитатьЛистExcel(ТЗ = Неопределено, ЛистЭксель = Неопределено, НомерПервойСтроки = 1, НомерПервойКолонки = 1, ВсегоСтрок = 0, ВсегоКолонок = 0) Экспорт
	
	Если ЛистЭксель = Неопределено Тогда
		ЛистЭксель = ПолучитьCOMОбъект(,"Excel.Application");
	КонецЕсли;
	Если ВсегоСтрок = 0 Тогда
		ВсегоСтрок = ЛистЭксель.Cells.SpecialCells(11).Row;
	КонецЕсли;
	Если ВсегоКолонок = 0 Тогда
		ВсегоКолонок = ЛистЭксель.Cells.SpecialCells(11).Column;
	КонецЕсли;
	Если ТЗ = Неопределено Тогда
		ТЗ =  Новый ТаблицаЗначений;
		Для Счетчик = 1 По ВсегоКолонок Цикл
			ТЗ.Колонки.Добавить("Колонка"+Счетчик, Новый ОписаниеТипов("Строка"));
		КонецЦикла;
	КонецЕсли;
	Состояние("Заполнение пустой таблицы...");
	Для Счетчик = НомерПервойСтроки По ВсегоСтрок Цикл
		НоваяСтрока = ТЗ.Добавить();
	КонецЦикла;
	
	Состояние("Выгрузка в массив...");
	Область = ЛистЭксель.Range(ЛистЭксель.Cells(НомерПервойСтроки,НомерПервойКолонки), ЛистЭксель.Cells(ВсегоСтрок,ВсегоКолонок));
	Данные = Область.Value.Выгрузить();
	
	Для Счетчик = 0 По ВсегоКолонок-1 Цикл
		Состояние("Загрузка колонки: " + (Счетчик + 1) + " из " + ВсегоКолонок);
		ТЗ.ЗагрузитьКолонку(Данные[Счетчик], Счетчик);
	КонецЦикла;
	//ЛистЭксель = Неопределено;
	Возврат ТЗ;
КонецФункции
Показать
42. e.kogan 1892 18.03.21 13:27 Сейчас в теме
(14) а вот между Range и UsedRange есть разница...
25. &rew 49 26.10.17 05:43 Сейчас в теме
(13) Да и в принципе зачем держать Ексель открытым занимая без дела ресурсы.
16. ArchLord42 83 24.10.17 15:20 Сейчас в теме
Группировка строк, аналогичная табличному документу

Лист.Range("A1:A3").Rows.Group()


Собственно чтобы сгрупиировать колонки нужно обратиться не к Rows, а к Cols

так же можно настроить способ вывода значка с "+", либо сверху, либо снизу

Лист.Outline.SummaryRow = 0;


0 - вверху
1 - внизу (по умолчанию)

и конечно же имеется аналог метода "ПоказатьУровеньГруппировокСтрок/ПоказатьУровеньГруппировокК­олонок"

Лист.Outline.ShowLevels(УровеньГруппировки)
17. vladismi 168 24.10.17 15:37 Сейчас в теме
Хорошая шпаргалка.
Плюс!
22. premierex 204 25.10.17 08:21 Сейчас в теме
(0)
чтобы не искать постоянно на просторах интернета
достаточно в редакторе VBA открыть Object Browser (F2). Он содержит описание объектов MS Office, значения констант VBA, а также встроенную справочную систему. Видимо не зря шутка появилась, что программер нажимает F1, когда других возможностей что-то узнать о программе уже не осталось )))
zarucheisky; RomanMartynenko; +2 Ответить
26. ADirks 186 26.10.17 09:34 Сейчас в теме
(22) так то да, но быстрее в шпаргалку посмотреть. Задачи то обычно весьма однотипные.
37. zarucheisky 26.11.18 18:18 Сейчас в теме
(22) мало того, оно позволяет посмотреть объктную модель класса COM, доступного для данного пользователя.
24. waol 313 25.10.17 18:32 Сейчас в теме
как говорится - на полку в качестве справочного пособия
27. niki295 29 26.10.17 10:20 Сейчас в теме
+1 Спасибо! Пригодится
29. rpgshnik 3631 02.11.17 05:20 Сейчас в теме
Статья хорошая, в закладки.
Предлагаю автору, обновить статью добавив выдержки из комментарий, очень полезно и информативно будет.
arakelyan; +1 Ответить
30. arakelyan 469 07.11.17 11:21 Сейчас в теме
(29)Добавлю обязательно, занят немного на работе. Я ещё не все свои мысли изложить успел)
rpgshnik; +1 Ответить
31. soba 10.12.17 18:02 Сейчас в теме
1С вроде как сечас рекомендует нативные методы платформы. Много юзеров сейчас без exel на компе
32. fly_men 11.12.17 13:11 Сейчас в теме
Флаг чтобы убрать режим защищенного просмотра в сохраненном файле:

Excel.FileValidation = 1;
33. hasp_x 156 09.01.18 15:07 Сейчас в теме
Как можно отключить макросы на время загрузки в Excel?
34. Perfolenta 204 23.11.18 16:42 Сейчас в теме
а я уже больше 10 лет пользуюсь своей внешней компонентой, которая позволяет "как в 1С" создать шаблон-макет документа Эксель, а потом выводить секции вместе с нужными формулами и значениями опять же "как в 1С"...
https://infostart.ru/public/564876/
как по мне, так гораздо удобней, чем писать на VBA
38. starik-2005 3033 27.11.18 14:14 Сейчас в теме
А стоит написать статью о том, как выгрузить табличные документы в Excel на разные листы средствами платформы (ну мало ли нет на сервере 1С офиса от мелкомягких)? Или такая статья уже есть?
39. ImHunter 312 27.11.18 14:48 Сейчас в теме
(38) Возможно, стандартная запись платформы ТабДока в Excel так и делает. При этом в ТабДоке должны быть именованные области строк. Чтение, по-крайней мере, подобным образом происходит - в ТабДоке присутствует несколько областей по именам листов.
40. starik-2005 3033 27.11.18 17:02 Сейчас в теме
(39)
Возможно, стандартная запись платформы ТабДока в Excel так и делает.
Стандартная запись текДока так НЕ делает, но в 1С запись не ограничивается только объектом ТабличныйДокумент...
41. noon 11 18.09.20 10:39 Сейчас в теме
Не нашел тут вроде, копирование диапазона ячеек:
исходныйДиапазон.Copy( диапазонВставки );
Может кому полезно будет.
44. dimalf 28.10.22 20:27 Сейчас в теме
Добрый день!
Если макрос выполнил свою работу, подскажите, как увидеть в 1С результат выполнения макроса?
46. user635629_exter 37 18.12.22 05:54 Сейчас в теме
Добавьте, пожалуйста, отключение пересчета книги xlCalculation из https://forum.mista.ru/topic.php?id=263635

это для семерки, но думаю достаточно для понимания.
//*******************************************
Процедура Сформировать()
   xlCalculationAutomatic = -4105;
   xlCalculationManual = -4135;
   Попытка
       scr = СоздатьОбъект("MSScriptControl.ScriptControl");
       scr.language = "vbscript";
       ExcelApp = scr.eval("CreateObject(""Excel.Application"")");
       ExcelApp.WorkBooks.Add();
       //Вот это, при таком обращении к ехелю нет книг в контексте
   Исключение
       Попытка
           ExcelApp = СоздатьОбъект("Excel.Application");
       Исключение
           Сообщить("Не удалось открыть Excel. " + ОписаниеОшибки());
           Возврат;
       КонецПопытки;
   КонецПопытки;
   ExcelApp.Calculation = xlCalculationManual;
КонецПроцедуры
Показать
Оставьте свое сообщение