|
|
|
Как удалить лист Excel через OLE ? | ☑ | ||
|---|---|---|---|---|
|
0
kg2
21.11.04
✎
20:32
|
КолЛистов = Эксель.Worksheets.Count;
Для Инд = 2 По КолЛистов Цикл //удаляем все листы, кроме первого <?????????????> КонецЦикла; |
|||
|
1
miki
21.11.04
✎
20:35
|
(0)Зачем тебе ЭТО???
|
|||
|
2
miki
21.11.04
✎
20:41
|
Вот тебе из help'a VBA:
Worksheets("Sheet3").Delete |
|||
|
3
kg2
21.11.04
✎
20:47
|
Есть бланки заказа в формате Excel с одинаковой структурой, но заполненные разными данными. Формируются из 1С. Первый лист - прайс, остальные - списки товаров(каждый лист - это содержимое 1-ой группы справочника номенклатуры).
Покупатель заполняет, сколько и какого товара он хочет купить. Структура первого листа всегда одинакова(сложная). Задумка в том, чтобы новый бланк заказа формировался на основании любого из старых. |
|||
|
4
kg2
21.11.04
✎
20:49
|
(2)Я это видел, мне нужно по индексу.
Эксель.WorkSheets(Инд).Delete и подобные варианты не прокатывают |
|||
|
5
miki
21.11.04
✎
21:01
|
Странно, что (4) не прокатывает. Попробуй так:
Sheets("Лист3").Select ххх.SelectedSheets.Delete Или Range("B21").Select ххх.SelectedSheets.Delete Или через квадратные скобки, свойство count и т. п. Ща тоже поробую, если что - отпишусь. |
|||
|
6
427
21.11.04
✎
21:05
|
Делал, но не так...
Все заполняется из 1С Файл Экселя - заказ... Первый лист - титул. Там выводится - клиент, доп данные, контактные телефоны и сслыки на другие листы (сумма по данному заказу) + всякая дребедень.. Следующие листы - по группам первого уровня (по факту - до 20 листов). Прайс в виде дерева. товар, единица измерения, цена за единицу. Поле Заказ - доступно клиенту. Сразу же клиент видит сумму по строке. В Шапке листа (программно закреплена страница) сразу же выводится сумма по листу и всему заказу. Листы - закрыты от изменений, доступно только поле ввода - ЗАКАЗ... Клиент просто заполняет ЗАКАЗ, видит при этом сумму, если согласен - отсылает правленый файл назад. Он программно обрабатывается, и на все, что есть в наличии, просто выписывается РН и проводится. Остальное (те позиции, где ЗАКАЗ ненулевой) - в заявку покупателя... Был общий прайс - формировался один раз и рассылался обычным клиентам... И были индивидуальные заказы - прайс с индивидуальными скидками клиенту... Формирование и отправка шли на автопилоте ночью - примерно 1 час... Формирование и отправка индивидуальных прайсов (каждый прайс - примерно 40 секунд), днем в полуручном режиме... Индивидуальных клиентов было сотни 3, прайсы им отсылались по запросу, примерно 30 в день... Заказов возвращалось в среднем штук 10-15... Количество товарных позиций (по остаткам) 5-8 тыс... Строк в формируемом прайсе было до 15 тыс (группы, пустые строки, итоговые по группам) и т.д. Так что проще сформировать первый лист по новой...Чем удалять старые... |
|||
|
7
miki
21.11.04
✎
21:21
|
(4) Пошукал я тут... Пробуй Эксель.WorkSheets[Инд].Delete.
(Скобки - квадратные) |
|||
|
8
miki
21.11.04
✎
21:23
|
(7)На еще:
Worksheets.Item(1) |
|||
|
9
miki
21.11.04
✎
21:36
|
(8) + Люди еще в комплекте юзают "DisplayAlerts":
Application.DisplayAlerts=0;//не выдавать предупреждений Пока WorkBook.Worksheets.Count>1 Цикл WorkBook.Worksheets(1).Delete(); КонецЦикла; Application.DisplayAlerts=-1;//восстановление флага выдачи предупреждений Видел у разных челов. Наверное, не спроста. |
|||
|
10
kg2
21.11.04
✎
21:54
|
(7)Эксель.WorkSheets<<?>>[Инд].Delete;
{(11)}: Неопознанный оператор При проверке модуля обнаружены синтаксические ошибки! ...так при квадратных скобках (пробовал и Delete()) (8)РабочаяКнига.Worksheets(Инд).Delete(); {D:\1CBASES\ВЕРЕКО\EXTFORMS\ВЫГРУЗКАПРАЙСА.ERT(13)}: : ...а так при круглых при открытии(пробовал и Эксель.Worksheets(Инд).Delete()) Я уже сто вариантов перепробовал. |
|||
|
11
База Данных
21.11.04
✎
21:57
|
Напиши код в VB в екселе.
Если эксель не знаешь, напиши макрос автоматом. Потом http://www.snif.ru/pages/vba.htm |
|||
|
12
miki
21.11.04
✎
22:05
|
(11) Макрос автоматом пишет (5).
Пробуй так: Worksheets.Item[1] |
|||
|
13
miki
21.11.04
✎
22:08
|
(12)+ Не все методы, доступные в интерактивном режиме доступны через ОЛЕ/КОМ. Или вызываются иначе. Также имеет место быть несовместимость версий.
|
|||
|
14
База Данных
21.11.04
✎
22:10
|
Worksheets("Sheet3").Delete
перевелось как Excel = СоздатьОбъект("Excel.Application"); Excel.Displayalerts = 0;//отключить встроенные предупреждения Excel Excel.Workbooks.Add();//Создать новую книгу Excel.Worksheets Excel.Visible = 1;//1 - открыть приложение получается Эксель.Worksheets("Sheet3").Delete(); |
|||
|
15
miki
21.11.04
✎
22:11
|
Вот как чел бился с этим в дельфях:
ExcelWorkSheet.ConnectTo(ExcelApplication.ActiveWorkbook.Worksheets[1] as Excel97.ExcelWorksheet); ExcelWorkSheet.Delete; Т. е. можешь попытаться сделать нужный лист активным (текущим), а потом: ExcelWorkSheet.Delete |
|||
|
16
kg2
21.11.04
✎
22:54
|
Для Инд = 2 По КолЛистов Цикл //удаляем все листы, кроме первого
Имя = Эксель.Sheets(Инд).Name; Эксель.Worksheets(Имя).Delete(); КонецЦикла; Если добавить в цикл Сообщить(Имя), то сообщает правильно, если вместо Эксель.Worksheets(Имя).Delete(); написать Эксель.Worksheets("Лист2").Delete() то нужный лист удаляется Но, бл..., если оставить так, то пишет :" Им = Эксель.Sheets(Инд).Name; {D:\1CBASES\ВЕРЕКО\EXTFORMS\ВЫГРУЗКАПРАЙСА.ERT(11)}: :" В чем может быть дело ? |
|||
|
17
miki
21.11.04
✎
22:59
|
(16)О. Что вижу? "Эксель.Sheets(Инд)". Работает?
Попробуй Эксель.Sheets(Инд).Delete. |
|||
|
18
kg2
21.11.04
✎
23:05
|
(17)
1."Эксель.Sheets(Инд).Delete(); {D:\1CBASES\ВЕРЕКО\EXTFORMS\ВЫГРУЗКАПРАЙСА.ERT(11)}: : " 2."Эксель.Sheets(Инд).Delete<<?>>; {(11)}: Неопознанный оператор При проверке модуля обнаружены синтаксические ошибки!" |
|||
|
19
miki
21.11.04
✎
23:19
|
Ну, хз. Попробуй Эксель.Sheets[Инд].Delete.
.Worksheets.Item[Инд] пробывал? |
|||
|
20
kg2
21.11.04
✎
23:27
|
Всё пробывал. Ни чё не помагает. Всё, пошёл вешаться !
|
|||
|
21
miki
21.11.04
✎
23:33
|
(20) Я тоже иссяк. Может все-таки трабла в Displayalerts?
PS. Попробуй в (16) TrimAll(Имя). |
|||
|
22
База Данных
21.11.04
✎
23:35
|
Напиши этот цикл в макросе. И, давай сюда. Я попробую тебе его сконвертировать.
|
|||
|
23
kg22
22.11.04
✎
12:20
|
Вот пример, который должен работать
Эксель = СоздатьОбъект("Excel.Application"); РабочиеКниги = Эксель.WorkBooks; РабочаяКнига = РабочиеКниги.Open(ИмяФайла,0,0); //Эксель.DisplayAlerts = 0; КолЛистов = Эксель.Worksheets.Count; Для Инд = 2 По КолЛистов Цикл //удаляем все листы, кроме первого Эксель.Sheets(Инд).Delete(); КонецЦикла; //Эксель.DisplayAlerts = -1; Эксель.Visible = 1; но выдаёт ошибку "Эксель.Sheets(Инд).Delete(); {D:\...\EXTFORMS\ВЫГРУЗКАПРАЙСА.ERT(13)}: Microsoft Excel: Метод Delete из класса Worksheet завершен неверно". Объясните, что не так, люди добрые ! |
|||
|
24
Бивень
22.11.04
✎
12:47
|
Прикольно ...
23 поста и на детскую ошибку никто не показал ... |
|||
|
25
Бивень
22.11.04
✎
12:51
|
Пока Эксель.Worksheets.Count>1 Цикл //удаляем все листы, кроме первого
Эксель.Sheets(2).Delete(); КонецЦикла; |
|||
|
26
427
22.11.04
✎
13:07
|
.
(25) А зачем? Прикольно ж наблюдать... . |
|||
|
27
Бивень
22.11.04
✎
13:22
|
(26) Пардон, несдержался, уж больно сильно выпендриться захотелось :((
|
|||
|
28
kg22
22.11.04
✎
13:25
|
(25,26)"Эксель.Sheets(2).Delete();
{D:\...\EXTFORMS\ВЫГРУЗКАПРАЙСА.ERT(11)}: Microsoft Excel: Метод Delete из класса Worksheet завершен неверно" Так в чем ошибочка-то умные дяденьки, ну объясните пожалуйста. |
|||
|
29
Прикольно
22.11.04
✎
13:29
|
наблюдать какой Бивень взрослый, а 427 наблЮдательный
|
|||
|
30
Бивень
22.11.04
✎
13:57
|
(28) А давай ты свой вопрос поширше развернёшь.
Я уже догадываюсь, в чем твоя ошибка (кстати, опять же детская), но вдруг я ошибаюсь. (29) Тьфу на тебя! |
|||
|
31
Тьфу
22.11.04
✎
14:05
|
на оба ваших (24),(26) дома.
|
|||
|
32
kg22
22.11.04
✎
14:20
|
(30)
Эксель = СоздатьОбъект("Excel.Application"); РабочиеКниги = Эксель.WorkBooks; РабочаяКнига = РабочиеКниги.Open(ИмяФайла,0,0); //Эксель.DisplayAlerts = 0; Пока Эксель.Worksheets.Count Цикл //удаляем все листы, кроме первого Эксель.Sheets(2).Delete(); КонецЦикла; //Эксель.DisplayAlerts = -1; Эксель.Visible = 1; Всё, заработало ! У меня файл .xls глючный какой-то был оказывается - ошибку, как в (23) выдавал (видимо в экселе - настройки). На другом файле - пашет. В (16) действительно детская ошибка - не выспался ! Всем спасибо ! Тема закрыта. |
|||
|
33
Сдается
22.11.04
✎
14:32
|
мне у тебя файл екселя оставался не закрытым после вылета 1С при неправильном методе Delete. Из-за этого, были траблы уже и при правильном коде.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |