Что нового

Создание файл (книги) excel с именованными листами

DyadyaGenya

Знающий
Сообщения
308
Репутация
10
Доброго времени суток. Бьюсь над очередной проблемой. Нужно создать файл excel с именованными листами. К сожалению, ни списком, ни циклом у меня не получается. Постоянно лист 37 остается не переименованным. Хотя порядок листов вроде бы получается правильным
Код:
; Добавляем три листа и задаём им имена
    While $oWorkbook.Sheets.Count < 39
        $oWorkbook.Sheets.Add()
    Wend
    $oWorkbook.Sheets(1).Name = "Оглавление"
    $oWorkbook.Sheets(2).Name = "Элементы питания"
    $oWorkbook.Sheets(3).Name = "Дополнительные данные БУ элементов"
    $oWorkbook.Sheets(4).Name = "Диапазоны параметров"
    $oWorkbook.Sheets(5).Name = "Типы ремонта элементов"
    $oWorkbook.Sheets(6).Name = "Новые BMS"
    $oWorkbook.Sheets(7).Name = "Дополнительные данные БУ BMS"
    $oWorkbook.Sheets(8).Name = "Типы ремонта BMS"
    $oWorkbook.Sheets(9).Name = "Корпуса"
    $oWorkbook.Sheets(10).Name = "Дополнительные данные БУ корпусов"
    $oWorkbook.Sheets(11).Name = "Уникальные корпуса"
    $oWorkbook.Sheets(12).Name = "Материалы для корпусов"
    $oWorkbook.Sheets(13).Name = "Холдеры"
    $oWorkbook.Sheets(14).Name = "Типы холдеров"
    $oWorkbook.Sheets(15).Name = "Провода"
    $oWorkbook.Sheets(16).Name = "Клеммы и разъёмы"
    $oWorkbook.Sheets(17).Name = "Термоусадка и изоляция"
    $oWorkbook.Sheets(18).Name = "Прочие комплектующие"
    $oWorkbook.Sheets(19).Name = "Поставщики"
    $oWorkbook.Sheets(20).Name = "Цены"
    $oWorkbook.Sheets(21).Name = "Склад"
    $oWorkbook.Sheets(22).Name = "Местоположения на складе"
    $oWorkbook.Sheets(23).Name = "Движение ресурсов"
    $oWorkbook.Sheets(24).Name = "Резервирование"
    $oWorkbook.Sheets(25).Name = "Заказчики"
    $oWorkbook.Sheets(26).Name = "Заказы"
    $oWorkbook.Sheets(27).Name = "Доставки"
    $oWorkbook.Sheets(28).Name = "Платежи"
    $oWorkbook.Sheets(29).Name = "Варианты сборки"
    $oWorkbook.Sheets(30).Name = "Детали сборки"
    $oWorkbook.Sheets(31).Name = "Элементы сборки"
    $oWorkbook.Sheets(32).Name = "Связь заказов и сборок"
    $oWorkbook.Sheets(33).Name = "Компоновки"
    $oWorkbook.Sheets(34).Name = "Схемы сборки"
    $oWorkbook.Sheets(35).Name = "Список валют"
    $oWorkbook.Sheets(36).Name = "Курсы валют"
    $oWorkbook.Sheets(37).Name = "Типы комплектующих"
    $oWorkbook.Sheets(38).Name = "Лог архивации данных"
    $oWorkbook.Sheets(39).Name = "Единицы измерения"


    ; Удаляем лишние листы, если их больше трёх
    While $oWorkbook.Sheets.Count > 39
        $oWorkbook.Sheets($oWorkbook.Sheets.Count).Delete()
    Wend
и цикл:
Код:
; Массивы с именами листов
Local $aSheetNames[39] = ["Оглавление", "Элементы питания", "Дополнительные данные БУ элементов", "Диапазоны параметров", "Типы ремонта элементов", _
                          "Новые BMS", "Дополнительные данные БУ BMS", "Типы ремонта BMS", "Корпуса", "Дополнительные данные БУ корпусов", _
                          "Уникальные корпуса", "Материалы для корпусов", "Холдеры", "Типы холдеров", "Провода", "Клеммы и разъёмы", _
                          "Термоусадка и изоляция", "Прочие комплектующие", "Поставщики", "Цены", "Склад", "Местоположения на складе", _
                          "Движение ресурсов", "Резервирование", "Заказчики", "Заказы", "Доставки", "Платежи", "Варианты сборки", _
                          "Детали сборки", "Элементы сборки", "Связь заказов и сборок", "Компоновки", "Схемы сборки", "Список валют", _
                          "Курсы валют", "Типы комплектующих", "Лог архивации данных", "Единицы измерения"]

; Добавляем листы и переименовываем их
For $i = 1 To 39
    ; Добавляем лист, если его не хватает
    While $oWorkbook.Sheets.Count < 39
        $oWorkbook.Sheets.Add()
    Wend

    ; Переименовываем лист
    $oWorkbook.Sheets($i).Name = $aSheetNames[$i - 1]
Next
 
Последнее редактирование:

Alecsis

Осваивающий
Сообщения
126
Репутация
45
Привет + с наступившим Старым НГ! :drinks:
Провёл «лаб/работу» и поимел такой же облом с листом №37 т до кучи №30.
Есть подозрение, что у свойства .Name ограничена длина аргумента. Однако в оф/документации (см. также https://learn.microsoft.com/en-us/office/vba/api/excel.worksheet.name) об этом почему-то ни слова.
Возможно, хоть и маловероятно, что у меня «неправильные пчёлы»© :bad:
Рабочая среда лабораторки: M$ Office 2010 на виртуалке Win7 Pro x64 под Win10.
Исходник и скрины в архиве №1

UPD: таки да, имя листа ограничено 31 символом, протокол в архиве №2
PS Наверняка гуру-Excel'исты закидают меня ссаными тряпками, но факт есть факт.:playboy:
 

Вложения

  • xltest-1.7z
    213 КБ · Просмотры: 0
  • xlTest-2.7z
    37.7 КБ · Просмотры: 0
Последнее редактирование:
Верх