Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Java > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 17.06.2019, 12:39   #1
Lynx_by
Новичок
 
Регистрация: 21.08.2017
Сообщений: 4
Репутация: 10
По умолчанию Удаление объектов с листа Excel

Гугл не помог, поэтому нужен совет более опытных товарищей.
Есть файл .xlsm (excel с макросами и 3 кнопками на листе для их запуска). Есть конвертер из этого .xlsm в XML+Excel_без_части_данных. Требуется получать на выходе Excel_без_части_данных в формате .xlsx (т.е. без макросов). Макросы удаляются без проблем, а вот кнопки для их запуска остаются.
Как удалить кнопки с листа? Приветствуются любые варианты.
Ненавижу чувствовать себя блондинкой
Lynx_by вне форума   Ответить с цитированием
Старый 17.06.2019, 12:48   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,605
Репутация: 5617
По умолчанию

Цитата:
Сообщение от Lynx_by Посмотреть сообщение
Как удалить кнопки с листа?
дык - макросом и удалить.

Цитата:
Сообщение от Lynx_by Посмотреть сообщение
Приветствуются любые варианты.
а какие тут могут быть варианты?
1) изменить код конвертера, который генерирует Excel_без_части_данных
чтобы он лишнего туда не копировал.
2) удалять макросом не нужные объекты
3) удалять ручками (оператор вручную удаляет объекты)

больше вариантов я не вижу.

p.s. приложили бы сюда файл с кнопками...
кнопки - они же вроде как разные объекты бывают.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 17.06.2019, 13:15   #3
Lynx_by
Новичок
 
Регистрация: 21.08.2017
Сообщений: 4
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
дык - макросом и удалить.
К сожалению, это невозможно, т.к. файл выдается на заполнение клиентам и может редактировать очень много раз после конвертации. Так что удалять что-то из него до конвертации не вариант. После конвертации же в файле не должно оставаться ни одного макроса, так что это тоже не вариант.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) изменить код конвертера, который генерирует Excel_без_части_данных
чтобы он лишнего туда не копировал.
Т.е изначально изменить схему создания Excel_без_части_данных? Сейчас он создается удалением данных из исходного Excel, а сделать так, чтобы он создавался копированием данных из исходного Excel? Это хорошая идея, надо попробовать, спасибо.
Update: так не получится, потому что мы не можем быть уверены, что юзер напихает в исходный Excel и не можем знать, что именно надо копировать. Поэтому мы удаляем и скрываем часть информации, оставляя юзеру все остальное.
Может, можно кнопки как-то скрыть? Может, POI что-то такое умеет, но я просто не нашла?

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
2) удалять макросом не нужные объекты
3) удалять ручками (оператор вручную удаляет объекты)
Макрос - не вариант, ручками - учитывая, что конвертировать будут клиенты и получать файл в итоге тоже они - снова же не вариант.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
приложили бы сюда файл с кнопками...
кнопки - они же вроде как разные объекты бывают.
Файл приложить не могу, к сожалению: запрещено выкладывать в общий доступ.
Объект у кнопок: Shape.

Последний раз редактировалось Lynx_by; 17.06.2019 в 13:20.
Lynx_by вне форума   Ответить с цитированием
Старый 17.06.2019, 14:34   #4
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,605
Репутация: 5617
По умолчанию

Цитата:
Сообщение от Lynx_by Посмотреть сообщение
После конвертации же в файле не должно оставаться ни одного макроса, так что это тоже не вариант.
и не одной кнопки.
после конвертации кнопок в файле быть не должно. В чём противоречие то?
в тот момент когда
Цитата:
Сообщение от Lynx_by Посмотреть сообщение
Поэтому мы удаляем и скрываем часть информации, оставляя юзеру все остальное.
удалять и кнопки.

покажите ваш код, которым Вы удаляете из файла макросы.



Цитата:
Сообщение от Lynx_by Посмотреть сообщение
Макрос - не вариант
почему не вариант то?!
Вы не знаете или не понимаете, что макросом можно обрабатывать ДРУГОЙ файл. В котором макросов ВООБЩЕ нет?!

Последний раз редактировалось Serge_Bliznykov; 17.06.2019 в 14:39.
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 17.06.2019, 15:31   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,605
Репутация: 5617
По умолчанию

я сделал набросок программы, пример обработки макросом файла с кнопками.
раз у Вас всё секретно настолько, что Вы не можете сделать файл пример, то оставляю доработку макроса (и алгоритма в целом) — на Вас.

DeleteAllShapesButton.zip

пользоваться так.

1) распаковать и положить два файла
КнигаСМакросом.xlsm
КнигаСКнопками.xlsx
в один каталог

2) открыть книгу с макросом КнигаСМакросом.xlsm
(если надо - то разрешить выполнение макросов)

3) нажать кнопку "Удалить кнопки из файла КнигаСКнопками.xlsx"

4) следовать инструкциям.

примечания.
а) открытый файл после удаления из него всех кнопок не закрывается (это сделано специально, чтобы дать возможность увидеть результат).
Разумеется, его можно закрыть с сохранением изменений прямо из кода макроса.
б) в код окончательного макроса лучше добавить выключение отображения на экран
Application.ScreenUpdating = False
в конце включить
Application.ScreenUpdating = True


ну и последнее.
код макроса примитивный, выглядит так:
Код:
Sub Кнопка3_Щелчок()
Dim wb As Workbook, oShape As Shape, fn$, i&
    'MsgBox "Удаление кнопок"
    fn = "КнигаСКнопками.xlsx"
    On Error Resume Next
    Set wb = Workbooks.Open(Application.ActiveWorkbook.Path & "\" & fn)
    If wb Is Nothing Then
        Err.Clear
        MsgBox "Не удалось открыть файл " & fn
        Exit Sub
    End If
    
    If Not MsgBox("Уверены, что хотите безвозвратно удалить все кнопки из книги " & fn & "?", vbInformation + vbYesNo, "Excel-VBA") = vbYes Then
        wb.Close False
        Exit Sub
    End If
    
    i = 0
    wb.Activate
    wb.Sheets(1).Activate
    If Err Then
        MsgBox "При обращении к книге " & fn & " произошла ошибка!"
        Exit Sub
    End If
    For Each oShape In ActiveSheet.Shapes
        'MsgBox "name = " & oShape.Name
        If Not oShape Is Nothing Then
          If oShape.Type = msoFormControl Then ' Если это кнопка, то удалим её
            i = i + 1
            oShape.Delete
          End If
        End If
        
    Next
    MsgBox "Готово! Найдено и удалено кнопок: " & i
End Sub
Serge_Bliznykov вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление объектов с формы C++ Yriy C++ Builder 0 30.03.2012 15:22
Удаление объектов _-Re@l-_ Общие вопросы Delphi 7 16.06.2010 15:06
Удаление временных объектов Kn793 Общие вопросы C/C++ 4 10.06.2010 23:22
Удаление объектов PARTOS Microsoft Office Excel 2 11.05.2010 10:32
Excel: Удаление графиков и картинок с листа treiber Microsoft Office Excel 5 04.09.2008 13:22


21:28.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru