1С: Работа с Excel (1 часть) Получение порядкового номера колонки 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
Эксель.Visible = Видимость;
0 - Excel не виден, 1 - виден.
Книга = Эксель.WorkBooks.Add();
Создание новой книги (файла) Excel.
Книга = Эксель.WorkBooks.Add(ИмяФайлаШаблона);
Создание новой книги (файла) Excel по шаблону «ИмяФайлаШаблона»
Книга.SaveAs(ИмяФайла);
Сохранение книги Excel.
Лист = Книга.WorkSheets.Add();
Добавление нового листа в книгу.
Книга = Эксель.WorkBooks.Open(ИмяФайла);
Открытие существующей книги (файла) Excel.
Лист = Книга.WorkSheets(НомерЛиста);
Установка листа в качестве рабочего с номером НомерЛиста.
Лист.Name = ИмяЛиста;
Задание рабочему листу имени ИмяЛиста
Лист.PageSetup.Zoom = Масштаб;
Задание параметра страницы «Масштаб» (от 10 до 400).
Лист.PageSetup.Orientation = Ориентация;
Ориентация: 1 - книжная, 2 - альбомная.
Лист.PageSetup.LeftMargin = Эксель.CentimetersToPoints(Сантиметры);
Задание левой границы (в сантиметрах).
Лист.PageSetup.TopMargin = Эксель.CentimetersToPoints(Сантиметры);
Задание верхней границы (в сантиметрах).
Лист.PageSetup.RightMargin = Эксель.CentimetersToPoints(Сантиметры);
Задание правой границы (в сантиметрах).
Лист.PageSetup.BottomMargin = Эксель.CentimetersToPoints(Сантиметры);
Задание нижней границы (в сантиметрах).
Лист.Columns(НомерКолонки).ColumnWidth = Ширина;
Задание ширины колонке.
Лист.Cells(НомерСтроки,НомерКолонки).ColumnWidth = 0;
Скрыть всю колонку, в которой расположена ячейка
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;
Ввод данных в ячейку.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Name = ИмяШрифта;
Установка шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Color = ЦветШрифта;
Установка цвета шрифта в ячейке. Тип переменной ЦветШрифта - число десятичное.
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Color = ЦветРамки;
Установка цвета рамки в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Interior.Color = ЦветФона;
Установка цвета фона в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Size = РазмерШрифта;
Установка размера шрифта в ячейке.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Bold = Жирный;
1 - жирный шрифт, 0 - нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Italic = Курсив;
1 - наклонный шрифт, 0 - нормальный.
Лист.Cells(НомерСтроки,НомерКолонки).Font.Underline = Подчеркнутый;
2 - подчеркнутый, 1 - нет.
Лист.Cells(НомерСтроки, НомерКолонки).NumberFormat = Формат;
Установка формата данных ячейки.
Лист.Cells(НомерСтроки,НомерКолонки).Borders.Linestyle = ТипЛинии;
Установка рамок ячейки. 1 - тонкая сплошная.
Лист.Cells(НомерСтроки,НомерКолонки).WrapText = Истина;
Осуществлять перенос по словам в указанной ячейке
Лист.Protect();
Установка защиты на лист
Лист.UnProtect();
Снятие защиты с листа
Лист.Cells(Строка, Столбец).Locked=0;
Ячейка будет доступной (и после установки защиты на лист)
ПолучитьCOMОбъект(<Имя файла>, <Имя класса COM>);
Основное применение функции ПолучитьCOMОбъект - это получение COM-объекта, соответствующего файлу.
Чтение данных из Excel
Лист можно выбрать по имени листа в книге:
Лист = Книга.WorkSheets(ИмяЛиста);
Имя листа в книге можно получить по номеру:
ИмяЛиста = Книга.Sheets(НомерЛиста).Name;
Точно так же можно задать имя листа:
Книга.Sheets(6).Name = "6 Резерв на отпуск";
Итак, мы открыли книгу и выбрали лист, теперь посмотрим, сколько строк и колонок на выбранном листе:
ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
Хитрости Excel
Как выборочно разрешить / запретить редактирование ячеек листа
//Создаем объект EXCEL
Эксель = СоздатьОбъект("Excel.Application");
Книга = Эксель.WorkBooks.Open(ФайлВыгрузки);
Лист =Книга.Worksheets("Список сотрудников"); // Выбор листа
Книга.ActiveSheet.UnProtect(); //делаем шаблон незащищенным
// Заполняем лист
// ...................................
// Снимаем защиту с области ввода сумм
Для Перем = 1 По 10 Цикл
// Прописываем, какие ячейки будут доступными
Книга.ActiveSheet.Cells(Перем, 2).Locked=0;
КонецЦикла;
Книга.ActiveSheet.Protect(); // ставим защиту на лист
Как добавить лист Excel в конец списка листов книги или после конкретного листа (а не в начало книги)
Метод работает для платформ 1С v8.
Файл = Новый COMОбъект("Excel.Application");
Файл.DisplayAlerts = False;
Попытка
ОбщаяКнига = Файл.WorkBooks.Open(Объект.ПутьКОбщемуФайлу);
Исключение
Сообщить("Excel: Неудачная попытка открытия файла Excel" + ОписаниеОшибки());
//ЗаписьЖурналаРегистрации("Excel: Неудачная попытка открытия файла Excel", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
Возврат;
КонецПопытки;
КоличествоЛистов = ОбщаяКнига.Sheets.Count; //2
ПоследнийЛист = ОбщаяКнига.Worksheets(КоличествоЛистов); // необходимо получить сам лист (не его номер)
Если КоличествоЛистов < 8 Тогда // к примеру, нужно сделать так, чтобы в книге было 8 листов, если листов меньше, то добавляем их
Пока 8 - КоличествоЛистов > 0 Цикл
ОбщаяКнига.Sheets.Add(Null,ПоследнийЛист,Null,Null); // добавляем лист в конец книги
КоличествоЛистов = КоличествоЛистов +1;
ПоследнийЛист = ОбщаяКнига.Worksheets(КоличествоЛистов); // получаем ссылку на очередной последний лист книги
КонецЦикла;
КонецЕсли;
Как программно скрыть колонку файла Excel
// ПРИМЕР как скрыть колонку программно - скроется колонка №2:
ЛистОшибок.Cells(ПозицияШапкиФайла, 2).ColumnWidth = 0; // скрыть колонку №2
Создание кнопки в Excel в 7.7
ТекущийЛист.Shapes("CommandButton").Select
ТекущийЛист.OLEObjects("CommandButton").Object.Caption = "Кнопуля";
Процедура открывает Эксель, втавляет на первый лист кнопку «Очистить» и назначает ей макрос,
устанавливающий автофильтр на колонку Е по не нулевым значениям. Текст макроса любой,
главное разделять Симв(13) строки
Попытка
Ex=CreateObject("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки(),"!!!");
Предупреждение("Не удалось запустить MS Excel!");
Возврат;
КонецПопытки;
Состояние("Открытие файла...");
Попытка
Wb=Ex.WorkBooks.Add();
Исключение
Возврат;
КонецПопытки;
Ex.Visible=-1;
Wb.Sheets(1).OLEObjects.Add("Forms.CommandButton.1",,,10, 99.75, 120.75, "Очистить");//27.75
st = "Private Sub CommandButton1_Click()" + Chr(13) +
" ThisWorkbook.Sheets(1).Columns(""E:E"").AutoFilter Field:=1, Criteria1:="">0"",
Operator:=xlAnd" + Chr(13) + "End Sub";
Ex.VBE.ActiveVBProject.VBComponents(Wb.Sheets(1).Name).CodeModule.AddFromString(st)
текст макроса пишется в переменную st.
Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна
Excel = ПолучитьCOMОбъект(, "Excel.Application");
При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) - все равно откроется Excel2, потому что он был активен последним.
Описание команды ПолучитьCOMОбъект
Глобальный контекст
ПолучитьCOMОбъект (GetCOMObject)
Синтаксис:
ПолучитьCOMОбъект(<Имя файла>, <Имя класса COM>)
Параметры:
<Имя файла> (необязательный)
Тип: Строка. Имя файла, включающее полный путь.
<Имя класса COM> (необязательный)
Тип: Строка. Имя класса COM, экземпляр которого должен быть создан или получен. Если расширение имени файла, указанное в первом параметре полностью идентифицирует класс объекта, то параметр может быть опущен.
Возвращаемое значение:
Тип: COMОбъект.
Описание:
Основное применение функции ПолучитьCOMОбъект - это получение COM-объекта, соответствующего файлу. Для этого следует в качестве первого параметра функции задать имя файла, который будет определять COM-объект. Например, фрагмент кода
Таб = ПолучитьCOMОбъект("C:DATADATA.XLS");
создает объект Excel.Application и открывает с его помощью файл документа «C:DATADATA.XLS». Если указанный файл во время выполнения данного фрагмента уже открыт с помощью MS Excel, то будет получена ссылка на уже существующий объект.
Для файлов, указываемых в качестве параметра данной функции, должно быть установлено соответствие расширения имени файла и класса COM.
Если в качестве имени файла указана пустая строка, то будет создан новый экземпляр объекта. В этом случае необходимо указать имя класса COM.
Например, фрагмент кода:
Таб = ПолучитьCOMОбъект("", "Excel.Application");
создает новый документ Excel. В дальнейшем этот документ может быть программно заполнен и сохранен в файл.
Если первый параметр функции пропущен, то будет произведена попытка получить активный объект указанного типа. Если активного объекта указанного типа в настоящий момент не существует, то будет вызвано исключение. Например, в результате выполнения оператора:
П = ПолучитьCOMОбъект( , "Excel.Application");
Переменная П получит значение типа COMОбъект, соответствующее активному приложению MS Excel, если таковое имелось, или будет вызвано исключение, если активных экземпляров MS Excel не было. Пример:
// Получение объекта COM, соответствующего файлу
Таб = ПолучитьCOMОбъект("C:DATADATA.XLS");
// Создание нового экземпляра объекта
Таб = ПолучитьCOMОбъект("", "Excel.Application");
// Получение активного объекта
Таб = ПолучитьCOMОбъект( , "Excel.Application");
Смотрите также:
Электронный учебник по программированию в 1С Рекомендации по изучению программирования 1С с нуля Игра "Кто хочет стать миллионером?" с вопросами на определенную тематику (язык программирования JavaScript, английские, немецкие, французские, испанские, португальские, нидерландские, итальянские слова, электробезопасность, промышленная безопасность, бокс и т.п.), написанная на 1С Программирование в 1С 8.3 с нуля - краткий самоучитель Комплексная подготовка программистов 1С:Предприятие 8.2 Сайты с уроками программирования и со справочниками Youtube-каналы с уроками программирования Сайты для обучения программированию Лекции и уроки