AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.07.2005, 09:36   #21  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Цитата:
Если в появившемся документе скопировать группу ячеек, затем открыть новый документ, то информация вставится успешно, это два.
А вы не забыли написать такой код?
PHP код:
        activeSheet.enableSelection(-4142);  //xlNoSelection 
PS У меня Office версии 2002
Старый 26.07.2005, 10:18   #22  
Ak!ro is offline
Ak!ro
Участник
 
17 / 10 (1) +
Регистрация: 10.02.2004
нет не забыл... но в любом случае спасибо Вам огромное!
Старый 26.07.2005, 11:25   #23  
maximus is offline
maximus
Участник
 
153 / 10 (1) +
Регистрация: 16.03.2005
2Ak!ro
В скрипте есть маленькая неточность - sheet надо выбирать через workbook. Так работает.

com app,workbook, activeSheet, activeWindow, sheets;
...
;
app = this.getApplication();
workbook = app.workbooks.item(1);
sheets = workbook.sheets();
...
activeSheet.enableSelection(-4142);

PS Хотя, нет, первый вариант тоже работает. Попробуйте в Екселе поставить защиту листа вручную, создать пустой макрос, вставить туда

Sheets.Item(1).EnableSelection = xlNoSelection

и исполнить его. Работает.
Старый 26.07.2005, 14:29   #24  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
870 / 637 (23) +++++++
Регистрация: 14.10.2004
Получается, версия Excel имеет большое значение.
Тот скрипт, что я привел, работает для Excel 2002.
Для других версий нужно записывать макрос и переносить его в Аксапту.
Старый 02.04.2007, 11:02   #25  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
А вы не забыли написать такой код?
PHP код:
        activeSheet.enableSelection(-4142);  //xlNoSelection 
PS У меня Office версии 2002
Хотел защитить лист.
Сделал
protect и enableSelection(xlNoSelection)

При visible(true) получаем лист, все ОК. Редактировать, копировать и т.д. нельзя - только распечатать.

НО.
Сохраняем документ, открываем заново - копировать уже можно. (редактировать так и нельзя)

Так вот - это глюк? или так и должно быть?
И, в любом случае? Как этого избежать? Возможно запретить сохранение файла? Если это возможно, то может у кого код уже есть?
Старый 02.04.2007, 15:41   #26  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Для запрета сохранения и распечатки могу предложить такой подход
X++:
static void ExcelMacroEvent(Args _args)
{
    ComExcelDocument_Ru excel = new ComExcelDocument_Ru();
    COM Doc;
    COM app;

    COM Workbook;
    COM prj;
    COM comp;
    COM module;
    COM code;
    Com sheet;
    int Beg;
    Com VBE;
    Com Wnd;
    Com Wnds;
    int i;
    ;
    excel.newFile("", false);
    doc = excel.getComDocument();
    app = doc.Application();
    Workbook = app.ActiveWorkbook();
    prj = Workbook.VBProject();
    VBE = prj.Vbe();
    Wnd = Vbe.MainWindow();
    Wnd.Visible(false);

    comp = prj.VBComponents();
    module = comp.item(1);

    module = comp.item(1);
    code = module.CodeModule();
    Beg = code.CreateEventProc(ComVariant::createFromStr("BeforeSave"), ComVariant::createFromStr("Workbook"))+1;
    Wnd.Visible(false);

    code.InsertLines(Beg+1, "Cancel = True");

    Beg = code.CreateEventProc(ComVariant::createFromStr("BeforePrint"), ComVariant::createFromStr("Workbook"))+1;
    Wnd.Visible(false);
    code.InsertLines(Beg+1, "Cancel = True");

    sheet = app.ActiveSheet();
    sheet.protect();
    Wnds  = Vbe.Windows();
    for (i=1;i<=Wnds.count();i++)
    {
        Wnd  = wnds.item(i);
        Wnd.Close();
    }

    app.DisplayAlerts(false);

    Wnd.Visible(false);

    Workbook.Activate();

    Sheet.enableSelection(-4142);
    excel.visible(true);

/*    app.OnKey("%{F11}");
    app.SendKeys("%{F11}%TE^{TAB} {TAB}1{TAB}1~");
    Wnd.Visible(false);

    Workbook.Activate();

    Workbook.SaveAs("c:\\Книга1.xls");*/
}
В результате сохранить или распечатать будет нельзя, но, если пользователь знает о VBA, то можно открыть проект и удалить эти строки из кода.
В закомментареной части - попытка обхода этой возможности (установка пароля на VBA). Но, к сожалению, для того, чтобы это работало надо сохранить и открыть книгу заново (сохранение выключено из кода, да и добивались обратного)
Ну и повторюсь:
Для того, что бы этот код выполнился, необходимо включить в Excel параметр "Доверять доступ к Visual Basic Project" в форме управления безопасностью макросов (можно поискать на эту тему исследования Gustav)
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: kashperuk (5).
Старый 02.04.2007, 15:47   #27  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А более "изящного" способа что, нет?
Тогда уж проще для листа при открытии просто каждый раз проставлять
X++:
activeSheet.enableSelection(-4142);  //xlNoSelection
пусть себе сохраняют на здоровье.

Правда изначально хотелось обойтись без макросов.
Ладно, спасибо, AndyD, буду что-то пробовать.
Старый 25.06.2015, 08:49   #28  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
У меня сработало в оригинальном варианте. Наверное, зависит от версии офис. У меня Office 365 (Сейчас это 2013)
Мне надо было защищать по листам, переделал:
X++:
void ProtectWorkSheet(int _worksheetid = 1)
{
    com     activeSheet;
    ;
        activeSheet = this.getWorkSheet(_workSheetID);
        activeSheet.protect(
            "12345",  //password
            true,               //DrawingObjects
            true,               //Contents
            true,               //Scenarios
            true,               //UserInterfaceOnly
            true,               //AllowFormattingCells
            true,               //AllowFormattingColumns
            true,               //AllowFormattingRows
            true,               //AllowInsertingColumns
            true,               //AllowInsertingRows
            true,               //AllowInsertingHyperlinks
            true,               //AllowDeletingColumns
            true,               //AllowDeletingRows
            true,               //AllowSorting
            true,               //AllowFiltering
            true                //AllowUsingPivotTables
            );

        activeSheet.enableSelection(-4142);  //xlNoSelection
}

Последний раз редактировалось gefr; 25.06.2015 в 08:52. Причина: уточнение
Старый 26.06.2015, 09:31   #29  
gefr is offline
gefr
Участник
Аватар для gefr
MCBMSS
 
147 / 17 (1) ++
Регистрация: 01.11.2004
Адрес: МО, Котельники
В итоге обошелся более простым методом, который меня устроил:
1. Уровень защиты не такой жесткий, но достаточный
2. Мне надо было блокировать все, кроме одного столбца (заказ-проформа).
В итоге:
X++:
void ProtectSheet_WO_Range(str _pass, MSOfficeBookMark_RU _bookMark, str _rangename, int _worksheetid = 1)
{
    com range,worksheet, protection, allow;
    ;
    worksheet = this.getWorkSheet(_worksheetid);
    range = worksheet.Range(_bookMark);
    protection=worksheet.Protection();
    allow = Protection.AllowEditRanges();
    allow.Add(_rangename,range);
    worksheet.protect(_pass);

}
Теги
excel

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
фильтр на копировании в буфер обмена Nikolaich DAX: Программирование 15 26.02.2009 21:10
Блокировка ключа индекса Sequel DAX: Программирование 4 06.07.2006 16:08
Системный буфер обмена LiSA DAX: Программирование 15 01.04.2006 13:00
Буфер обмена novic DAX: Программирование 1 06.06.2005 08:11
Вот - про быстр. Ексель, буфер обмена, и т.д. POS DAX: Программирование 22 01.03.2004 18:42
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:53.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.