Форум » [x]Harbour » Команды Excel » Ответить

Команды Excel

SADSTAR2: Где можно найти полный перечень команд Excel, доступных из Харбор через TOleAuto(). В примерах нужных вариантов не нашел. Например Как получить номер строки/столбца текущей ячейки? Как получить номер текущей страницы? Как выбрать нужную страницу? Как управлять рамками? Где найти значения Excel-констант типа xlRight? И т.п. Из доступных источников есть справка по MS Excel Visual Basic из дистрибутива Excel. Думаю что там есть все команды. Но как их преобразовать в Харбор? Например это With Worksheets("Sheet1").Range("B2").Borders(xlBottom) .LineStyle = xlBorderLineStyleContinuous .Weight = xlThin .ColorIndex = 3 End With P.S. Вроде не понимает нотации R1C1. //oSheet:Range('R16C2:R16C8'):Font:Bold := .T. oSheet:Range('B16:H16'):Font:Bold := .T. Или нужно дать команду на переключение нотации?

Ответов - 42, стр: 1 2 3 All

Pasha: > Где можно найти полный перечень команд Excel, доступных из Харбор через TOleAuto(). В документе надо включить запись макросов, проделать действия и посмотреть что записалось > Как получить номер строки/столбца текущей ячейки? Selection:Address > Как получить номер текущей страницы? > Как выбрать нужную страницу? Скажи, как это сделать в экселе, и я скажу как в харборе > Как управлять рамками? Я использую такую функцию: Static func xlCellBorder(oCell, nNSEW) oCell:Borders(nNSEW):LineStyle := 1 // xlContinuous oCell:Borders(nNSEW):Weight := 2 // xlThin // oBorder:Set('ColorIndex', -4105) // xlAutomatic Return nil Пример oRange := oSheet:Cells( nRow, nCol ) xlCellBorder(oRange, 7) // left xlCellBorder(oRange, 8) // top xlCellBorder(oRange, 9) // bottom xlCellBorder(oRange, 10) // right > Где найти значения Excel-констант типа xlRight? Я сам кода-то делал такой файл со всеми значениями констант, могу выслать > Но как их преобразовать в Харбор? Например это With Worksheets("Sheet1").Range("B2").Borders(xlBottom) .LineStyle = xlBorderLineStyleContinuous .Weight = xlThin .ColorIndex = 3 End With oBorder := oExcel:Worksheets(1).Range(2,2).Borders(-4107) затем смотри мою функцию > Вроде не понимает нотации R1C1. //oSheet:Range('R16C2:R16C8'):Font:Bold := .T. oSheet:Range(oSheet:Cells(nRow1, nCol1), oSheet:Cells(nRow2, nCol2))

SADSTAR2: Pasha пишет: > Где найти значения Excel-констант типа xlRight? Я сам кода-то делал такой файл со всеми значениями констант, могу выслать Буду признателен. sadstar@mail.ru А можно их в виде .ch-файла подключать?

k_dima: вот сайтик с константами, делаешь из него ch file http://www.geocities.com/ResearchTriangle/9834/msexcel8.htm


Pasha: SADSTAR2 пишет: А можно их в виде .ch-файла подключать? Отправил Конечно, можно использовать Правда, клиппер не мог эти файлы обработать - говорил - слишком много команд, переполнение таблицы Но у харбора все безразмерное, так что скушает и не поперхнется :)

Andrey: Pasha пишет: Я сам кода-то делал такой файл со всеми значениями констант, могу выслать И мне можно тоже выслать ? Мой адрес 30195@mail.ru Спасибо заранее.

Pasha: отправил

SADSTAR2: Интересный облом. Эксел остается в памяти и держит открытый файл. //================================================================ Static Function PrintAkt2(arCom) LOCAL oExcel, oBook, oSheet, oRange, cFile:=ApplicPath+"Akt2.xls" .... .... .... oExcel := TOleAuto():New( "Excel.Application" ) oExcel:Visible := .T. oExcel:Workbooks:Open(cFile) .... .... oRange:End() oSheet:End() oBook:End() oExcel:End() Return Nil Эксел остается для просмотра и дальнейшей работы потом закрывается вручную. А в памяти висит процесс excel.exe и пока его не грохнешь - Akt2.xls нельзя редактировать (только копию). К тому моменту когда я обратил на это внимание в памяти висело штук 50 таких процессов. Что я делаю неправильно?

Andrey: Надо при открытии файла Akt2.xls проверять открыт ли он ужу или нет ! Если уже открыт то .... function xdtFileCanBeWritten( cFile ) // -> lOk // static nErrNoFile := 2 // File not found // local nFile := fopen( cFile, FO_EXCLUSIVE ) // if ( nFile == F_ERROR ) return ( ferror() == nErrNoFile ) endif // fclose( nFile ) // return .t. // // end procedure xdtFileCanBeWritten

saulius: oExcel:Quit()

saulius: TRY oExcel := GetActiveObject( "Excel.Application" ) CATCH TRY oExcel := CreateObject( "Excel.Application" ) CATCH Alert( "ERROR! Excel not avialable. [" + Ole2TxtError()+ "]" ) RETURN END END

SADSTAR2: Чистый эксперимент ... oWord := TOleAuto():New( "Word.Application" ) oWord:Visible := .T. oWord:end() oExcel := TOleAuto():New( "Excel.Application" ) oExcel:Visible := .T. oExcel:End() ... Ворд и Эксел появляются открытыми. Закрываю вызывающую их Харбор-программу Закрываю вручную Ворд и Эксел. В памяти Ворд-процесс исчезает, Эксел-процесс остается!!! Проверял под WinXP в Оффисе-97 и -2003 и под Win98 в Оффисе-97. Результат одинаковый. В чем дело? И как с этим у вас?

SADSTAR2: Новые результаты Перекомпилил "Чистый эксперимент" в версию 46 (было в версии 33) Еще интереснее стало. 1. Выпадает на RunTime-ошибку при выполнении :end() 2. Глушу все :end() Ворд остается открытым, Эксел сам закрывается (но и в памяти процесс тоже исчезает) 3. Добавляю msgbox('Excel') чтоб приостановить и посмотреть ... oExcel := TOleAuto():New( "Excel.Application" ) oExcel:Visible := .T. msgbox('Excel') ... Return Nil Пока висит сообщение - Эксел виден. Закрываю сообщение - Эксел закрывается. И в тоже время Демка работает как положено! Может играют роль какие-то особенности (ключи) компиляции?

Pasha: Насколько я понял, ты используешь Harbour В xHarbour механизм работы с ole такой Метод :end() у этого класса не существует. При завершении процедуры автоматически вызывается деструктор обьектов TOleAuto, если это переменные Local или Private Дестуктор обьетов, но на самого приложениея (Excel). Чтобы завершить приложение, надо в самой процедуре вызвать метод :Quit() Процедура разумная и удобная В каком состоянии это хозяйство в Harbour, я не знаю. Этот класс Гименеса в xHarbour был очень серьезно переработан, и насколько его функциональность была пересена обратно в Harbour, я не могу сказать

SADSTAR2: Pasha пишет: Насколько я понял, ты используешь Harbour Я использую то, что идет в дистрибутиве MiniGUI. И номера версий соответственно МиниГУЕвые - (1.33, 1.46) А какой там Харбор идет - не обращал внимания.

SADSTAR2: Вернулся к работе с Ехселем после долгого перерыва нарвался на очередную непонятку Почему Харбор из поставки МиниГУИ 1.46 (да и другие тоже) правильно понимает это excel8.ch #define xlHAlignCenter -4108 #define xlHAlignCenterAcrossSelection 7 #define xlHAlignDistributed -4117 #define xlHAlignFill 5 #define xlHAlignGeneral 1 #define xlHAlignJustify -4130 #define xlHAlignLeft -4131 #define xlHAlignRight -4152 и неправильно понимает это Excel97.ch #define xlHAlignCenter 0xffffeff4 #define xlHAlignCenterAcrossSelection 7 #define xlHAlignDistributed 0xffffefeb #define xlHAlignFill 5 #define xlHAlignGeneral 1 #define xlHAlignJustify 0xffffefde #define xlHAlignLeft 0xffffefdd #define xlHAlignRight 0xffffefc8 Т.е. не понимает 16-ричного написания констант?

Лукашевский: Pasha пишет: у харбора все безразмерное Всё-всё? И проблема длинных значений индексного ключа, которая была в SIX для Clipper 5.2, в xHarbour отсутствует? А то я пока смелых экспериментов на эту тему в xHarbour'е не делал - в Clipper'е ведь было не отследить - то индекс с длинным ключом работает нормально, а то бац - и базу рушит...

Pasha: Речь идет о длинных ключах или ключах переменной длины ? Если о длинных, то думаю, индек будет работать. Хотя лучше проэксперементировать

Лукашевский: Подскажите, есть ли для ActiveSheet возможность указания в качестве Range сразу всей доступной информации, как для ворда oWord:ActiveDocument:Content ? Или что-нибудь типа этого? А если нет, то как проще всего обнаружить правый край информации и нижний её край, чтобы выделить область?

gustow: Я тут в форуме кидал примерчик (перевод "кучи DBF в кучу XLS с оформлением" - см. сюда) - м.б. поможет?

Лукашевский: gustow пишет: Я тут в форуме кидал примерчик Там, насколько я понял, нужно открывать DBF-файл, смотреть количество записей... Хотелось бы без этого обойтись...



полная версия страницы