|
Удаление диапазона колонок в файле Excel программно. | ☑ | ||
|---|---|---|---|---|
|
0
lirt82
19.11.25
✎
09:54
|
Всем привет, есть самописный отчет который выгружает данные из базы 1С в установленный шаблон файла Excel, файл состоит из нескольких листов. Чтобы данные в файл корректно записывались, пользователь перед формированием отчета редактирует файл excel, а именно удаляет ненужные колонки с данными на определенных листах.
В коде формирования отчета есть фрагмент удаления диапазона колонок (нужно удалить колонки начиная с 5 до 20 включительно) с определенных листов файла excel. Код отрабатывает но удаляет колонку через одну, как это исправить? на первом снимке с 5-ой колонки я внес числа по возрастанию, на втором снимке результат выполнения кода. Колонки удалены через одну. Фрагмент кода ВремяНачала = ТекущаяДата(); Состояние("Отчет формируется...", , , БиблиотекаКартинок.ДлительнаяОперация48); Попытка ДанныеОтчета = ПолучитьДанныеНаСервере(); Исключение Сообщить("Произошла ошибка при получении данных: "+ОписаниеОшибки()); Excel.Workbooks.Application.DisplayAlerts = Ложь; Excel.Quit(); Excel = 0; //Закрытие Excel и освобождение памяти Возврат; КонецПопытки; //удаление колонок, для корректности расчета колонки "Всего" МассивЛистовExcel = Новый Массив; МассивЛистовExcel.Добавить(Excel.Sheets(4)); МассивЛистовExcel.Добавить(Excel.Sheets(5)); МассивЛистовExcel.Добавить(Excel.Sheets(6)); МассивЛистовExcel.Добавить(Excel.Sheets(7)); МассивЛистовExcel.Добавить(Excel.Sheets(8)); МассивЛистовExcel.Добавить(Excel.Sheets(9)); МассивЛистовExcel.Добавить(Excel.Sheets(10)); МассивЛистовExcel.Добавить(Excel.Sheets(11)); МассивЛистовExcel.Добавить(Excel.Sheets(12)); МассивЛистовExcel.Добавить(Excel.Sheets(13)); Для Каждого Элемент Из МассивЛистовExcel Цикл Для НомерУдаляемойКолонки = 5 по 20 Цикл Элемент.Columns(НомерУдаляемойКолонки).Delete(); КонецЦикла; КонецЦикла;
|
|||
|
1
maxab72
19.11.25
✎
09:51
|
ты удалил 5-ую колонку, 6-ая стала 5-ой, ее пропускаем, та как теперь удаляем новую 6-ую колонку - бывшую 7-ую.
|
|||
|
2
Мультук
гуру
19.11.25
✎
09:52
|
Наверное, всё же, сверху вниз
Для НомерУдаляемойКолонки = 20 по 5 Цикл Элемент.Columns(НомерУдаляемойКолонки).Delete(); КонецЦикла; Синтаксис поправьте сами |
|||
|
3
arsik
гуру
19.11.25
✎
09:52
|
(0) Иди в цикле от большего к меньшему, тогда ошибки описанной в (1) избежишь.
|
|||
|
4
lirt82
19.11.25
✎
09:59
|
(1) (2) (3) аааааа))) допетрил, благодарствую
|
|||
|
5
Волшебник
19.11.25
✎
10:26
|
(2)
Для НомерУдаляемойКолонкиМинусом = -20 по -5 Цикл НомерУдаляемойКолонки = -НомерУдаляемойКолонкиМинусом; Элемент.Columns(НомерУдаляемойКолонки).Delete(); КонецЦикла; |
|||
|
7
Kigo_Kigo
19.11.25
✎
11:07
|
а нахер это городить?
МассивЛистовExcel = Новый Массив; МассивЛистовExcel.Добавить(Excel.Sheets(4)); МассивЛистовExcel.Добавить(Excel.Sheets(5)); МассивЛистовExcel.Добавить(Excel.Sheets(6)); МассивЛистовExcel.Добавить(Excel.Sheets(7)); МассивЛистовExcel.Добавить(Excel.Sheets(8)); МассивЛистовExcel.Добавить(Excel.Sheets(9)); МассивЛистовExcel.Добавить(Excel.Sheets(10)); МассивЛистовExcel.Добавить(Excel.Sheets(11)); МассивЛистовExcel.Добавить(Excel.Sheets(12)); МассивЛистовExcel.Добавить(Excel.Sheets(13)); а че сразу Элемент.Columns(13).Delete() Элемент.Columns(12).Delete() Элемент.Columns(11).Delete() и т.д. не сделать? нахера эти переборы и массивы? |
|||
|
8
paramedic
19.11.25
✎
12:00
|
А зачем удалять по одной? Удаляете сразу весь требуемый диапазон. Не знаете как - сделайте запись макроса в Экселе и посмотрите как надо делать.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |