Конвертация нумерации столбцов Excel

28.03.24

Разработка - Универсальные функции

При организации работы пользователей с Excel (загрузка данных из, выгрузка в) бывает удобно предоставить пользователям возможность настройки - в какой области находятся одни данные, в какой другие. В областях, естественно, могут упоминаться столбцы. Excel предлагает 2 варианта нумерации столбцов: буквами английского алфавита: "A", "B", "C", и т.д. или числами по порядку: 1, 2, 3 и так далее. С нумерацией числами всё просто, а вот с буквами дело обстоит чуть сложнее. После столбца "Z" пойдёт столбец "AA", за ним "AB" и так далее. В этой публикации предлагаю готовые функции для 1С, которые и преобразуют один вид нумерации в другой, и наоборот.

Идея - использовать преобразования, аналогичные преобразованию чисел из десятичной системы счисления в, например, шестнадцатиричную и обратно. В таких системах счисления, где часть цифр, обозначающих значения, эквивалентные десятичной десятке и более - обозначаются буквами. Ну просто цифра должна быть единичным знаком.

Особенность преобразования числового формата номера столбца в буквенный для Excel в том, что нет "перехода через ноль". Если мы рассмотрим привычную нам десятичную систему счисления, то при переходе от одной десятки к следующей мы начинаем каждый раз с "нулевого" элемента этой десятки. 9 -> 10, 19 ->20, 99 -> 100 и так далее. А буквенный формат нумерации столбцов Excel ведёт себя несколько иначе - каждый новый "ряд" начинается с буквы "A" в "младшем разряде", обозначающей изначально единицу, а не ноль. И переход из ряда в ряд формируется по правилу: "<х>Z" -> "<следующий символ после x>A". Т.е. преобразования будут похожи на преобразования между различными системами счисления, где каждый разряд обозначает множитель основания системы счисления, возведённый в степень основания, в соответствии с номером разряда. Но только с учётом отсутствия этого "перехода через ноль".

Итак, сами функции приведены ниже. Применять можно в любом месте программного кода, смотря по обстоятельствам.   

 

Как из числовой нумерации получить буквенную.

// Преобразует номер столбца в буквенный формат Excel
// Примеры: 1 -> "A", 26 -> "Z", 28 -> "AB", 53 -> "BA", 2081 -> "CBA" и т.д.
//
// Параметры:
//  НомерСтолбца - Число -
// 
// Возвращаемое значение:
//  Строка - 
//
Функция БуквыСтолбцаExcel(Знач НомерСтолбца)

	СоответствиеБаза = Новый Соответствие;
	
	СоответствиеБаза.Вставить(1, "A");
	СоответствиеБаза.Вставить(2, "B");
	СоответствиеБаза.Вставить(3, "C");
	СоответствиеБаза.Вставить(4, "D");
	СоответствиеБаза.Вставить(5, "E");
	СоответствиеБаза.Вставить(6, "F");
	СоответствиеБаза.Вставить(7, "G");
	СоответствиеБаза.Вставить(8, "H");
	СоответствиеБаза.Вставить(9, "I");
	СоответствиеБаза.Вставить(10, "J");
	СоответствиеБаза.Вставить(11, "K");
	СоответствиеБаза.Вставить(12, "L");
	СоответствиеБаза.Вставить(13, "M");
	СоответствиеБаза.Вставить(14, "N");
	СоответствиеБаза.Вставить(15, "O");
	СоответствиеБаза.Вставить(16, "P");
	СоответствиеБаза.Вставить(17, "Q");
	СоответствиеБаза.Вставить(18, "R");
	СоответствиеБаза.Вставить(19, "S");
	СоответствиеБаза.Вставить(20, "T");
	СоответствиеБаза.Вставить(21, "U");
	СоответствиеБаза.Вставить(22, "V");
	СоответствиеБаза.Вставить(23, "W");
	СоответствиеБаза.Вставить(24, "X");
	СоответствиеБаза.Вставить(25, "Y");
	СоответствиеБаза.Вставить(26, "Z");
	
	БуквыСтолбца = "";
	
	КоличествоВАлфавите = СоответствиеБаза.Количество();
	
	Пока НомерСтолбца > 0 Цикл
		НомерБуквы = НомерСтолбца % КоличествоВАлфавите;
		КодБуквы = ?(НомерБуквы = 0, КоличествоВАлфавите, НомерБуквы);
		БуквыСтолбца = СтрШаблон("%1%2", СоответствиеБаза[КодБуквы], БуквыСтолбца);
		НомерСтолбца = Цел(НомерСтолбца / КоличествоВАлфавите);
		НомерСтолбца = НомерСтолбца - ?(НомерБуквы = 0, 1, 0);
	КонецЦикла;
	
	Возврат БуквыСтолбца;

КонецФункции // БуквыСтолбцаExcel()

 

Как из буквенной нумерации получить числовую.

// Преобразует буквы - обозначения столбца Excel к номеру в виде числа
// Примеры: "A" -> "1", "Z" -> "26", "AB" -> "28", "BA" -> "53", "CBA" -> "2081" и т.д.
//
// Параметры:
//  БуквыСтолбца - Строка
// 
// Возвращаемое значение:
//  Строка - форматированный (без группировок разрядов) номер столбца
//
Функция НомерСтолбцаExcel(Знач БуквыСтолбца) Экспорт

	СоответствиеБаза = Новый Соответствие;
	
	СоответствиеБаза.Вставить("A", 1);
	СоответствиеБаза.Вставить("B", 2);
	СоответствиеБаза.Вставить("C", 3);
	СоответствиеБаза.Вставить("D", 4);
	СоответствиеБаза.Вставить("E", 5);
	СоответствиеБаза.Вставить("F", 6);
	СоответствиеБаза.Вставить("G", 7);
	СоответствиеБаза.Вставить("H", 8);
	СоответствиеБаза.Вставить("I", 9);
	СоответствиеБаза.Вставить("J", 10);
	СоответствиеБаза.Вставить("K", 11);
	СоответствиеБаза.Вставить("L", 12);
	СоответствиеБаза.Вставить("M", 13);
	СоответствиеБаза.Вставить("N", 14);
	СоответствиеБаза.Вставить("O", 15);
	СоответствиеБаза.Вставить("P", 16);
	СоответствиеБаза.Вставить("Q", 17);
	СоответствиеБаза.Вставить("R", 18);
	СоответствиеБаза.Вставить("S", 19);
	СоответствиеБаза.Вставить("T", 20);
	СоответствиеБаза.Вставить("U", 21);
	СоответствиеБаза.Вставить("V", 22);
	СоответствиеБаза.Вставить("W", 23);
	СоответствиеБаза.Вставить("X", 24);
	СоответствиеБаза.Вставить("Y", 25);
	СоответствиеБаза.Вставить("Z", 26);
	
	БуквыСтолбца = ВРег(СокрЛП(БуквыСтолбца));
	
	НомерСтолбца = 0;
	Для Сч = 1 По СтрДлина(БуквыСтолбца) Цикл
		ТекБуква = Сред(БуквыСтолбца, СтрДлина(БуквыСтолбца) - Сч + 1, 1);
		НомерСтолбца = НомерСтолбца + Pow(26, Сч-1) * СоответствиеБаза[ТекБуква];
	КонецЦикла;
	
	Возврат Формат(НомерСтолбца, "ЧГ=0");

КонецФункции // НомерСтолбцаExcel()

 

Вступайте в нашу телеграмм-группу Инфостарт

Excel загрузка выгрузка

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    4706    Abysswalker    11    

46

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    8792    DeerCven    15    

63

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    57109    dimanich70    85    

174

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    8040    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    71679    atdonya    31    

73

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    10042    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. HectorPrima 01.05.24 00:15 Сейчас в теме
Вот покороче:
Функция БуквыСтолбцаExcel(Знач НомерСтолбца) Экспорт
	
	НомерСтолбца = НомерСтолбца - 1;
	НомерСтрокой = "";
	Пока НомерСтолбца >= 0 Цикл           
		НомерСтрокой = Символ(65 +  НомерСтолбца % 26) + НомерСтрокой;
		НомерСтолбца = НомерСтолбца / 26 - 1
	КонецЦикла;
	Возврат НомерСтрокой;
	
КонецФункции
Показать
Для отправки сообщения требуется регистрация/авторизация