AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 12.09.2007, 16:16   #1  
Arahnid ist offline
Arahnid
Участник
 
880 / 60 (4) ++++
Registriert seit: 09.08.2005
Ort: Moscow
Excel: закрыть файл
Задача тривиальная: загрузить данные из Ex. Заранее скажу, что поиском уже искала, может конечно и проглядела.

пишу простой код

X++:
private void fileData()
{
    ComExcelDocument_RU  excelDocument = new ComExcelDocument_RU();
    ;

    info (time2str(timenow(),2,2));
    excelDocument.open(filePath);
    workSheet = 1;

    ttsbegin;

    _budget.AccountNum = excelDocument.getCellValue(ComExcelDocument_RU::numToNameCell(2,20), workSheet);
    _budget.insert();
    ttscommit;

    excelDocument.deleteRow(_excelRow+1);
    excelDocument.visible(false);
    excelDocument.finalize();
    info (time2str(timenow(),2,2));

}
В результате все работает, но вот сам файл фактически не закрывается. Что надо добавитьв код, чтобы файл закрылся.


И еще вопрос, что такое excelDocument.OpenDocement(dsfadf);
Alt 12.09.2007, 16:32   #2  
Lemming ist offline
Lemming
Участник
Benutzerbild von Lemming
 
1.144 / 343 (14) ++++++
Registriert seit: 20.04.2004
Ort: Москва, Чайнатаун в Люблино
Blog-Einträge: 10
excelDocument.closeDocument?
Alt 12.09.2007, 16:44   #3  
Arahnid ist offline
Arahnid
Участник
 
880 / 60 (4) ++++
Registriert seit: 09.08.2005
Ort: Moscow
выдает ошибку

Ошибка времени выполнения. : ComExcelDocument_RU Объект не инициализирован.
Трассировка стека:
\Classes\ComExcelDocument_RU\closeDocument
\Reports\Cat_BudgetImport\Methods\fileData - line 37
\Reports\Cat_BudgetImport\Methods\run - line 5
\Classes\SysReportRun\run - line 18
\Classes\RunBaseReport\run - line 32
\Classes\SysReportRun\run - line 8

А без - работает.

Geändert von Arahnid (12.09.2007 um 16:50 Uhr)
Alt 12.09.2007, 17:40   #4  
_scorp_ ist offline
_scorp_
Участник
Benutzerbild von _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Registriert seit: 25.07.2007
Ort: Москва
А excelDocument.closeDocument() стоит вместо excelDocument.finalize() или после?
Alt 12.09.2007, 18:35   #5  
Arahnid ist offline
Arahnid
Участник
 
880 / 60 (4) ++++
Registriert seit: 09.08.2005
Ort: Moscow
close заработал.
у меня и openDocement не работает - может вы и это подскажите

Geändert von Arahnid (12.09.2007 um 18:38 Uhr)
Alt 12.09.2007, 18:38   #6  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: Atlanta, GA, USA
Arahnid, а как Вы думаете, что должен делать метод?
X++:
excelDocument.finalize();
Alt 12.09.2007, 18:59   #7  
Arahnid ist offline
Arahnid
Участник
 
880 / 60 (4) ++++
Registriert seit: 09.08.2005
Ort: Moscow
Не знаю, в документации не нашла. Это был мой следующий вопрос (я понимаю, плакать хочется над знаниями)
Alt 12.09.2007, 19:08   #8  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: Atlanta, GA, USA
Если на пальцах:

Когда Вы написали
excelDocument = new ComExcelDocument_RU()
выделилась память под этот объект

когда Вы пишите
excelDocument.finalize();
вы сообщаете системе (сборщику мусора), что объект этот не используется и память, для него выделенную, можно освободить. Что он успешно и делает.

Поэтому любое обращение к этой переменной приведет к ошибке, так как переменная уже ни на что не ссылается.

Одним словом, все действия делайте до этого метода
Alt 12.09.2007, 23:09   #9  
Arahnid ist offline
Arahnid
Участник
 
880 / 60 (4) ++++
Registriert seit: 09.08.2005
Ort: Moscow
Вопрос теперь такой: он все делает как я прошу и ожидаю, кроме одного. Одного - он открывает файл и считывает информацию. Затем сам его закрыает, сохраняет изменения. Все хорошо, одно плохо - он в момент того , когда считывает- открывает файл, и пользователь его видит. Хотелось бы, чтобы пользователь не видел , как аксапта открывает файл, как это можно сделать? или сие не поправимо?

Geändert von Arahnid (12.09.2007 um 23:18 Uhr)
Alt 12.09.2007, 23:38   #10  
raz ist offline
raz
NavAx
Benutzerbild von raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1.500 / 1098 (40) ++++++++
Registriert seit: 22.07.2003
Ort: МО
у ComOfficeDocument_RU смотрите метод visible.
Alt 13.09.2007, 10:36   #11  
Arahnid ist offline
Arahnid
Участник
 
880 / 60 (4) ++++
Registriert seit: 09.08.2005
Ort: Moscow
именно благодаря этому методу он и закрывает в конце открытый для чтения документ, но мне надо, чтобы он даже не показывал открытие файла пользователю
Alt 13.09.2007, 10:43   #12  
Weez ist offline
Weez
Участник
Axapta Retail User
 
250 / 89 (3) ++++
Registriert seit: 18.01.2006
Ort: Moscow city
excelDocument.visible(false) - сразу после создания документа
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
Alt 13.09.2007, 10:44   #13  
_scorp_ ist offline
_scorp_
Участник
Benutzerbild von _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Registriert seit: 25.07.2007
Ort: Москва
В методе open второй параметр как раз за это отвечает.
open(FileName _fileName, boolean _bVisible = true)
Передайте туда false и все должно получиться.
Alt 13.09.2007, 11:15   #14  
Arahnid ist offline
Arahnid
Участник
 
880 / 60 (4) ++++
Registriert seit: 09.08.2005
Ort: Moscow
а чем все же отличается open and openDocement?
Alt 13.09.2007, 11:22   #15  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: Atlanta, GA, USA
Zitat:
Zitat von Arahnid Beitrag anzeigen
а чем все же отличается open and openDocement?
Вы ведь сами можете это посмотреть.
Код этих классов полностью доступен

Open делает доп. проверки на существование файла и вызывает openDocument
Alt 13.09.2007, 14:55   #16  
Arahnid ist offline
Arahnid
Участник
 
880 / 60 (4) ++++
Registriert seit: 09.08.2005
Ort: Moscow
Уже в пору сказать "Простите , что обращаюсь!"

А как сделать так , чтобы поставить защиту с паролем? Я что - то в классе по экселю этого не нашла.

И еще, а как поставить фильтр на файлы xls в окне диалога

filePathField = dlg.addFieldValue(typeid(Filenameopen),filePath,'Загружаемый файл '); - это я пишу в Dialog

Geändert von Arahnid (13.09.2007 um 15:03 Uhr)
Alt 13.09.2007, 15:08   #17  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: Atlanta, GA, USA
Не нашел оригинальный пост, с которого я содрал код, поэтому просто приведу метод, который использую я у себя:

X++:
void protectWorkBook(boolean _displayGridLines = true, boolean _protect = true, str _password = date2str(SystemDateGet(), 123, 2, 0, 2, 0, 4) + time2str(timeNow(), 0, 0))
{
    COM comWorkBook;
    COM comWorkSheets;
    COM comWorkSheet;
    COM comActiveWindow;
    int iCount, workSheetCount;
    int applVersion;
    ;

    if (prmIsDefault(_protect) && !this.doProtectWorkBook())
        return;

    if (!_protect)
        return;

    try
    {
        applVersion = str2int(m_comApplication.version());
        comWorkBook = m_comApplication.activeWorkBook();
        comWorkSheets = comWorkBook.workSheets();
        workSheetCount = comWorkSheets.count();
        for (iCount = 1; iCount <= workSheetCount; iCount++)
        {
            comWorkSheet = comWorkSheets.Item(iCount);
            if (applVersion >= 10)
            {
                comWorkSheet.protect(
                                    _password,          //password
                                    true,               //DrawingObjects
                                    true,               //Contents
                                    true,               //Scenarios
                                    true,               //UserInterfaceOnly
                                    true,               //AllowFormattingCells
                                    true,               //AllowFormattingColumns
                                    true,               //AllowFormattingRows
                                    false,              //AllowInsertingColumns
                                    false,              //AllowInsertingRows
                                    false,              //AllowInsertingHyperlinks
                                    false,              //AllowDeletingColumns
                                    false,              //AllowDeletingRows
                                    true,               //AllowSorting
                                    true,               //AllowFiltering
                                    true                //AllowUsingPivotTables
                                    );
            }
            else
            {
                comWorkSheet.protect(
                                    _password,          //password
                                    true,               //DrawingObjects
                                    true,               //Contents
                                    true,               //Scenarios
                                    true                //UserInterfaceOnly
                                    );
            }
            comWorkSheet.enableSelection(-4142);    //xlNoSelection
        }
        comActiveWindow = m_comApplication.activeWindow();
        comActiveWindow.displayGridLines(_displayGridLines);
    }
    catch
    {
        this.throwError(@"Произошла ошибка при блокировании редактирования рабочей книги Excel");
    }
}
Про диалог и xls
У диалога есть методы filenameLookupFilter и другие.
Используются вот так:
X++:
    _filenameLookupFilter = conIns(_filenameLookupFilter,1,"@SYS76040", '*.axc');
или просто вот так:
X++:
    _filenameLookupFilter = ['All files','*.*'];
This post has been rated by: Sergey Petrov (1), xfree (1).
Alt 13.09.2007, 15:34   #18  
Arahnid ist offline
Arahnid
Участник
 
880 / 60 (4) ++++
Registriert seit: 09.08.2005
Ort: Moscow
с диалогом разобралась, примеры по функции нашла, спасибо.

А вот пример с protect не получилось, нет такой функции в классе ComExcelDocument_RU, адже похожего нет, но ведь такого не бывает?
Alt 13.09.2007, 15:38   #19  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: Atlanta, GA, USA
Zitat:
Zitat von Arahnid Beitrag anzeigen
нет такой функции в классе ComExcelDocument_RU, адже похожего нет, но ведь такого не бывает?
Конечно нету там такой функции.
Иначе я бы код выше не приводил.

Если она вам нужна, добавьте, изменив, чтобы компилировалось
Alt 13.09.2007, 16:55   #20  
Arahnid ist offline
Arahnid
Участник
 
880 / 60 (4) ++++
Registriert seit: 09.08.2005
Ort: Moscow
спасибо большое - доделала под себя и все заработало. Еще немного и будет пособие для начинающих )))
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Вызов Item() для коллекций Excel Владимир Максимов DAX: Программирование 15 17.08.2006 19:47
Как из Ax увидеть Excel файл? NJD DAX: Программирование 3 04.06.2004 14:06
Есть файл Excel по расчеты стоимости модулей Аксапты DDA DAX: Администрирование 9 06.03.2003 16:09

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 17:27 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.