12.09.2007, 16:16 | #1 |
Участник
|
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); |
|
12.09.2007, 16:32 | #2 |
Участник
|
excelDocument.closeDocument?
|
|
12.09.2007, 16:44 | #3 |
Участник
|
выдает ошибку
Ошибка времени выполнения. : 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 А без - работает. Последний раз редактировалось Arahnid; 12.09.2007 в 16:50. |
|
12.09.2007, 17:40 | #4 |
Участник
|
А excelDocument.closeDocument() стоит вместо excelDocument.finalize() или после?
|
|
12.09.2007, 18:35 | #5 |
Участник
|
close заработал.
у меня и openDocement не работает - может вы и это подскажите Последний раз редактировалось Arahnid; 12.09.2007 в 18:38. |
|
12.09.2007, 18:38 | #6 |
Участник
|
Arahnid, а как Вы думаете, что должен делать метод?
X++: excelDocument.finalize(); |
|
12.09.2007, 18:59 | #7 |
Участник
|
Не знаю, в документации не нашла. Это был мой следующий вопрос (я понимаю, плакать хочется над знаниями)
|
|
12.09.2007, 19:08 | #8 |
Участник
|
Если на пальцах:
Когда Вы написали excelDocument = new ComExcelDocument_RU() выделилась память под этот объект когда Вы пишите excelDocument.finalize(); вы сообщаете системе (сборщику мусора), что объект этот не используется и память, для него выделенную, можно освободить. Что он успешно и делает. Поэтому любое обращение к этой переменной приведет к ошибке, так как переменная уже ни на что не ссылается. Одним словом, все действия делайте до этого метода |
|
12.09.2007, 23:09 | #9 |
Участник
|
Вопрос теперь такой: он все делает как я прошу и ожидаю, кроме одного. Одного - он открывает файл и считывает информацию. Затем сам его закрыает, сохраняет изменения. Все хорошо, одно плохо - он в момент того , когда считывает- открывает файл, и пользователь его видит. Хотелось бы, чтобы пользователь не видел , как аксапта открывает файл, как это можно сделать? или сие не поправимо?
Последний раз редактировалось Arahnid; 12.09.2007 в 23:18. |
|
12.09.2007, 23:38 | #10 |
NavAx
|
у ComOfficeDocument_RU смотрите метод visible.
|
|
13.09.2007, 10:36 | #11 |
Участник
|
именно благодаря этому методу он и закрывает в конце открытый для чтения документ, но мне надо, чтобы он даже не показывал открытие файла пользователю
|
|
13.09.2007, 10:43 | #12 |
Участник
|
excelDocument.visible(false) - сразу после создания документа
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
13.09.2007, 10:44 | #13 |
Участник
|
В методе open второй параметр как раз за это отвечает.
open(FileName _fileName, boolean _bVisible = true) Передайте туда false и все должно получиться. |
|
13.09.2007, 11:15 | #14 |
Участник
|
а чем все же отличается open and openDocement?
|
|
13.09.2007, 11:22 | #15 |
Участник
|
Вы ведь сами можете это посмотреть.
Код этих классов полностью доступен Open делает доп. проверки на существование файла и вызывает openDocument |
|
13.09.2007, 14:55 | #16 |
Участник
|
Уже в пору сказать "Простите , что обращаюсь!"
А как сделать так , чтобы поставить защиту с паролем? Я что - то в классе по экселю этого не нашла. И еще, а как поставить фильтр на файлы xls в окне диалога filePathField = dlg.addFieldValue(typeid(Filenameopen),filePath,'Загружаемый файл '); - это я пишу в Dialog Последний раз редактировалось Arahnid; 13.09.2007 в 15:03. |
|
13.09.2007, 15:08 | #17 |
Участник
|
Не нашел оригинальный пост, с которого я содрал код, поэтому просто приведу метод, который использую я у себя:
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"); } } У диалога есть методы filenameLookupFilter и другие. Используются вот так: X++: _filenameLookupFilter = conIns(_filenameLookupFilter,1,"@SYS76040", '*.axc'); X++: _filenameLookupFilter = ['All files','*.*']; |
|
|
За это сообщение автора поблагодарили: Sergey Petrov (1), xfree (1). |
13.09.2007, 15:34 | #18 |
Участник
|
с диалогом разобралась, примеры по функции нашла, спасибо.
А вот пример с protect не получилось, нет такой функции в классе ComExcelDocument_RU, адже похожего нет, но ведь такого не бывает? |
|
13.09.2007, 15:38 | #19 |
Участник
|
Цитата:
Иначе я бы код выше не приводил. Если она вам нужна, добавьте, изменив, чтобы компилировалось |
|
13.09.2007, 16:55 | #20 |
Участник
|
спасибо большое - доделала под себя и все заработало. Еще немного и будет пособие для начинающих )))
|
|