Автор | Сообщение |
|
| |
Пост N: 45
Зарегистрирован: 05.06.07
|
|
Отправлено: 13.12.07 02:49. Заголовок: Команды Excel
Где можно найти полный перечень команд 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
[только новые]
|
|
|
| Администратор
|
Пост N: 666
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.12.07 09:56. Заголовок: > Где можно найт..
> Где можно найти полный перечень команд 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))
|
|
|
|
| |
Пост N: 46
Зарегистрирован: 05.06.07
|
|
Отправлено: 14.12.07 11:23. Заголовок: Pasha пишет: > ..
Pasha пишет: цитата: | > Где найти значения Excel-констант типа xlRight? Я сам кода-то делал такой файл со всеми значениями констант, могу выслать |
| Буду признателен. sadstar@mail.ru А можно их в виде .ch-файла подключать?
|
|
|
|
| |
Пост N: 18
Зарегистрирован: 19.12.06
|
|
Отправлено: 14.12.07 11:55. Заголовок: вот сайтик с констан..
|
|
|
|
| Администратор
|
Пост N: 667
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.12.07 12:09. Заголовок: SADSTAR2 пишет: А ..
SADSTAR2 пишет: цитата: | А можно их в виде .ch-файла подключать? |
| Отправил Конечно, можно использовать Правда, клиппер не мог эти файлы обработать - говорил - слишком много команд, переполнение таблицы Но у харбора все безразмерное, так что скушает и не поперхнется :)
|
|
|
|
| постоянный участник
|
Пост N: 377
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.12.07 15:01. Заголовок: Pasha пишет: Я сам ..
Pasha пишет: цитата: | Я сам кода-то делал такой файл со всеми значениями констант, могу выслать |
| И мне можно тоже выслать ? Мой адрес 30195@mail.ru Спасибо заранее.
|
|
|
|
| Администратор
|
Пост N: 668
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.12.07 17:42. Заголовок: отправил..
отправил
|
|
|
|
| |
Пост N: 47
Зарегистрирован: 05.06.07
|
|
Отправлено: 18.12.07 09:48. Заголовок: Что я делаю неправильно?
Интересный облом. Эксел остается в памяти и держит открытый файл. //================================================================ 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 таких процессов. Что я делаю неправильно?
|
|
|
|
| постоянный участник
|
Пост N: 380
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.12.07 11:41. Заголовок: Надо при открытии фа..
Надо при открытии файла 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
|
|
|
|
| |
Пост N: 41
Зарегистрирован: 27.04.06
|
|
Отправлено: 18.12.07 14:09. Заголовок: oExcel:Quit()..
oExcel:Quit()
|
|
|
|
| |
Пост N: 42
Зарегистрирован: 27.04.06
|
|
Отправлено: 18.12.07 14:16. Заголовок: TRY oExcel ..
TRY oExcel := GetActiveObject( "Excel.Application" ) CATCH TRY oExcel := CreateObject( "Excel.Application" ) CATCH Alert( "ERROR! Excel not avialable. [" + Ole2TxtError()+ "]" ) RETURN END END
|
|
|
|
| |
Пост N: 48
Зарегистрирован: 05.06.07
|
|
Отправлено: 19.12.07 03:13. Заголовок: Чистый эксперимент
Чистый эксперимент ... 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. Результат одинаковый. В чем дело? И как с этим у вас?
|
|
|
|
|
| |
Пост N: 49
Зарегистрирован: 05.06.07
|
|
Отправлено: 19.12.07 07:28. Заголовок: Новые результаты
Новые результаты Перекомпилил "Чистый эксперимент" в версию 46 (было в версии 33) Еще интереснее стало. 1. Выпадает на RunTime-ошибку при выполнении :end() 2. Глушу все :end() Ворд остается открытым, Эксел сам закрывается (но и в памяти процесс тоже исчезает) 3. Добавляю msgbox('Excel') чтоб приостановить и посмотреть ... oExcel := TOleAuto():New( "Excel.Application" ) oExcel:Visible := .T. msgbox('Excel') ... Return Nil Пока висит сообщение - Эксел виден. Закрываю сообщение - Эксел закрывается. И в тоже время Демка работает как положено! Может играют роль какие-то особенности (ключи) компиляции?
|
|
|
|
| Администратор
|
Пост N: 669
Зарегистрирован: 23.05.05
|
|
Отправлено: 19.12.07 10:05. Заголовок: Насколько я понял, т..
Насколько я понял, ты используешь Harbour В xHarbour механизм работы с ole такой Метод :end() у этого класса не существует. При завершении процедуры автоматически вызывается деструктор обьектов TOleAuto, если это переменные Local или Private Дестуктор обьетов, но на самого приложениея (Excel). Чтобы завершить приложение, надо в самой процедуре вызвать метод :Quit() Процедура разумная и удобная В каком состоянии это хозяйство в Harbour, я не знаю. Этот класс Гименеса в xHarbour был очень серьезно переработан, и насколько его функциональность была пересена обратно в Harbour, я не могу сказать
|
|
|
|
| |
Пост N: 50
Зарегистрирован: 05.06.07
|
|
Отправлено: 20.12.07 01:34. Заголовок: Pasha пишет: Наскол..
Pasha пишет: цитата: | Насколько я понял, ты используешь Harbour |
| Я использую то, что идет в дистрибутиве MiniGUI. И номера версий соответственно МиниГУЕвые - (1.33, 1.46) А какой там Харбор идет - не обращал внимания.
|
|
|
|
| |
Пост N: 53
Зарегистрирован: 05.06.07
|
|
Отправлено: 20.03.08 03:28. Заголовок: Возник вопрос
Вернулся к работе с Ехселем после долгого перерыва нарвался на очередную непонятку Почему Харбор из поставки МиниГУИ 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-ричного написания констант?
|
|
|
|
| |
Пост N: 239
Зарегистрирован: 08.04.06
|
|
Отправлено: 14.05.08 14:00. Заголовок: Pasha пишет: у харб..
Pasha пишет: цитата: | у харбора все безразмерное |
| Всё-всё? И проблема длинных значений индексного ключа, которая была в SIX для Clipper 5.2, в xHarbour отсутствует? А то я пока смелых экспериментов на эту тему в xHarbour'е не делал - в Clipper'е ведь было не отследить - то индекс с длинным ключом работает нормально, а то бац - и базу рушит...
|
|
|
|
| Администратор
|
Пост N: 909
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.05.08 15:27. Заголовок: Речь идет о длинных ..
Речь идет о длинных ключах или ключах переменной длины ? Если о длинных, то думаю, индек будет работать. Хотя лучше проэксперементировать
|
|
|
|
| |
Пост N: 248
Зарегистрирован: 08.04.06
|
|
Отправлено: 29.06.08 17:53. Заголовок: Подскажите, есть ли ..
Подскажите, есть ли для ActiveSheet возможность указания в качестве Range сразу всей доступной информации, как для ворда oWord:ActiveDocument:Content ? Или что-нибудь типа этого? А если нет, то как проще всего обнаружить правый край информации и нижний её край, чтобы выделить область?
|
|
|
|
| постоянный участник
|
Пост N: 38
Зарегистрирован: 06.02.07
|
|
Отправлено: 01.07.08 13:10. Заголовок: Я тут в форуме кидал..
Я тут в форуме кидал примерчик (перевод "кучи DBF в кучу XLS с оформлением" - см. сюда) - м.б. поможет?
|
|
|
|
| |
Пост N: 249
Зарегистрирован: 08.04.06
|
|
Отправлено: 05.07.08 16:29. Заголовок: gustow пишет: Я тут..
gustow пишет: цитата: | Я тут в форуме кидал примерчик |
| Там, насколько я понял, нужно открывать DBF-файл, смотреть количество записей... Хотелось бы без этого обойтись...
|
|
|
|
| |
Пост N: 250
Зарегистрирован: 08.04.06
|
|
Отправлено: 05.07.08 16:31. Заголовок: Pasha пишет: Речь и..
Pasha пишет: цитата: | Речь идет о длинных ключах или ключах переменной длины ? Если о длинных, то думаю, индек будет работать. |
| Провёл эксперимент - длинные индексные ключи CDXов в xHarbour работают!
|
|
|
|
|
| |
Пост N: 256
Зарегистрирован: 08.04.06
|
|
Отправлено: 26.09.08 16:17. Заголовок: Лукашевский пишет: ..
Лукашевский пишет: цитата: | Подскажите, есть ли для ActiveSheet возможность указания в качестве Range сразу всей доступной информации, как для ворда oWord:ActiveDocument:Content ? Или что-нибудь типа этого? А если нет, то как проще всего обнаружить правый край информации и нижний её край, чтобы выделить область? |
| Спасибо, подсказали добрые люди: x = oExcel:ActiveSheet:Range("A1"):CurrentRegion:Columns:Count y = oExcel:ActiveSheet:Range("A1"):CurrentRegion:Rows:Count wstr = "A1:" + CHR(ASC("A") + x - 1) + NTRIM(y)
|
|
|
|
| |
Пост N: 63
Зарегистрирован: 05.11.05
|
|
Отправлено: 26.05.10 16:41. Заголовок: А как выделить рамку..
А как выделить рамку на нужный диапазон? Так, например, я поставлю рамку на одну клетку: oSheet:Cells(7,1):BorderAround:=1 А если нужно выделить "D5,D7"?
|
|
|
|
| Администратор
|
Пост N: 1454
Зарегистрирован: 23.05.05
|
|
Отправлено: 26.05.10 16:55. Заголовок: BorderAround - это с..
BorderAround - это свойство Range Range для группы ячеек определяется так: oRange := oSheet:Range(oSheet:Cells(nRow1, nCol1), oSheet:Cells(nRow2, nCol2))
|
|
|
|
| |
Пост N: 47
Зарегистрирован: 09.09.11
|
|
Отправлено: 29.11.11 10:26. Заголовок: Добрый день, как уда..
Добрый день, как удалить строку в файле Excel? oExcel := TOleAuto():New( "Excel.Application" ) oExcel:Visible := .F. oExcel:Workbooks:Open(cFileXls2, 0) oRange := oExcel:ActiveCell:SpecialCells(xlLastCell) cRecno := oRange:Row cColumn:= oRange:Column oAs :=oExcel:ActiveSheet() ?cColumn,cRecno For Ni := 1 To cRecno Xl_Name:=Rtext(oSheet:Cells(Ni+4,2):Value) Ol_Code:=Upper(Alltrim(Hb_AnsiToOem(Xl_Name))) If Ni+4>Rc_OilKol*Rc_OffKol oAs:Rows(Ni+4):Delete Endif Next
|
|
|
|
| Администратор
|
Пост N: 2174
Зарегистрирован: 23.05.05
|
|
Отправлено: 29.11.11 10:54. Заголовок: Oskar_AAA пишет: До..
Oskar_AAA пишет: Запускаете Excel Сервис - Макросы - Начать запись Выполняете необходимые действия, останавливаете запись, изучаете полученный макрос. Повторяете полученный материал в харборе.
|
|
|
|
| постоянный участник
|
Пост N: 253
Зарегистрирован: 06.02.07
|
|
Отправлено: 30.11.11 08:06. Заголовок: вот, к примеру, запи..
вот, к примеру, запись макроса с удалением 2й строки: Sub Макрос1() ' ' Макрос1 Макрос ' ' Rows("2:2").Select Selection.Delete Shift:=xlUp Range("A1").Select End Sub
|
|
|
|
| |
Пост N: 48
Зарегистрирован: 09.09.11
|
|
Отправлено: 30.11.11 13:10. Заголовок: Вчера сделал, пример..
Вчера сделал, пример кода: For Ni = 1 To cRecno oAs:Rows(Ni+4):Select() oAs:Rows(Ni+4):Delete() Next
|
|
|
|
| |
Пост N: 71
Зарегистрирован: 05.11.05
|
|
Отправлено: 14.03.12 16:01. Заголовок: Потребовалось работа..
Потребовалось работать с разными листами. Если нужно создать новый лист, открываю файл и создаю лист так: oExcel:Workbooks:Open(cFile) oExcel:Worksheets:Add() oSheet := oExcel:Get("ActiveSheet") Все работает. Пытаюсь выбрать конкретный лист при открытии файла. Так: oExcel:Workbooks:Open(cFile) oExcel:WorkSheets(3) oSheet := oExcel:Get("ActiveSheet") Или так: oExcel:Workbooks:Open(cFile) oExcel:WorkSheets("G") oSheet := oExcel:Get("ActiveSheet") Не открывается. Т.е. сам файл открывается, но не на том листе. Что я делаю не так?
|
|
|
|
| Администратор
|
Пост N: 2302
Зарегистрирован: 23.05.05
|
|
Отправлено: 14.03.12 17:47. Заголовок: rvu пишет: Что я де..
rvu пишет: Надо так: oBook := oExcel:ActiveWorkBook oSheets := oBook:Sheets oSheets:Item(nSheet):Select() или oSheets[nSheet]: Select() в зависимости от диалекта харбора и затем: oSheet := oExcel:ActiveSheet
|
|
|
|
| |
Пост N: 72
Зарегистрирован: 05.11.05
|
|
Отправлено: 21.03.12 11:49. Заголовок: Спасибо! Заработало...
Спасибо! Заработало. Еще вопрос возник: а как комментарии к ячейке записывать?
|
|
|
|
|
| Администратор
|
Пост N: 2316
Зарегистрирован: 23.05.05
|
|
Отправлено: 21.03.12 16:19. Заголовок: rvu пишет: Еще вопр..
rvu пишет: цитата: | Еще вопрос возник: а как комментарии к ячейке записывать? |
| У меня ms office не установлен, поэтому смотрю по хелпу. Судя по всему, надо для объекта Range выполнить действия: oRange:AddComment() oRange:Comment:Text := "Text" А лучше включите запись макросов, сами добавьте комментарий, и посмотрите, как это делается
|
|
|
|
| |
Пост N: 73
Зарегистрирован: 05.11.05
|
|
Отправлено: 22.03.12 10:50. Заголовок: Работает. Спасибо!..
Работает. Спасибо!
|
|
|
|
| |
Пост N: 49
Зарегистрирован: 09.09.11
|
|
Отправлено: 10.04.12 07:22. Заголовок: Добрый день, возник ..
Добрый день, возник вопрос : Как определить свойство Font:Bold ячеки ? (oAs:Rows(Ni,1):Font:Bold=.t.) т.е мне нужно обрабатывать только строки с выделенным шрифтом или если Font:Bold=.T. Есть ли какая то функция?
|
|
|
|
| постоянный участник
|
Пост N: 310
Зарегистрирован: 06.02.07
|
|
Отправлено: 10.04.12 09:18. Заголовок: Гугльнул на "Exc..
Гугльнул на "Excel bold" - вот, например: http://ask.metafilter.com/105810/Detect-bold-text-in-MS-Excel Q: I have a very large MS Excel spreadsheet in Mac Office 2008 (yuk). I want to find every cell that contains bold text and append an asterisk to it -- i.e. "bold cell text" becomes "bold cell text*". I can probably find a Windows machine if necessary. How can this be done automatically? A: The following macro will do it, though it'll take a while, as it considers every cell on the sheet. If you know the extent of your spreadsheet, you can change "Cells" to "Range("A1:Z10000") or something to speed it up. Sub MarkBold() For Each c In Cells If c.Font.Bold = True Then c.Value = c.Value & "*" Next c End Sub ...alternatively - if you also want to de-boldify as per your example text, use: Sub MarkBold() For Each c In Cells If c.Font.Bold = True Then c.Value = c.Value & "*" c.Font.Bold = False End If Next c End Sub Как понимаю, это (в части детектирования - болд или не болд в ячейке) то, что надо? (вообще-то, как говорил Маргадон: "Я так и думал, господа!" :) )
|
|
|
|
| |
Пост N: 50
Зарегистрирован: 09.09.11
|
|
Отправлено: 10.04.12 09:58. Заголовок: Спасибо, но при комп..
Спасибо, но при компиляции xHarbour консоль - вылетают ошибки: Syntax error: "syntax error at '='" на строку If c.Font.Bold = .T. фрагмент кода oAs :Cells(Ni+0,1):Select() For Each c In Cells If c.Font.Bold = .T. c.Value = c.Value & "*" c.Font.Bold = .F. Endif Next c
|
|
|
|
| постоянный участник
|
Пост N: 759
Зарегистрирован: 27.01.07
|
|
Отправлено: 10.04.12 09:59. Заголовок: А если просто написа..
А если просто написать "If c.Font.Bold"?
|
|
|
|
| постоянный участник
|
Пост N: 1086
Зарегистрирован: 09.10.06
|
|
Отправлено: 10.04.12 10:12. Заголовок: PSP пишет: А если п..
PSP пишет: цитата: | А если просто написать "If c.Font.Bold"? |
| ? Это ведь Harbour - не Basic
|
|
|
|
| |
Пост N: 51
Зарегистрирован: 09.09.11
|
|
Отправлено: 10.04.12 11:07. Заголовок: Так (?c.Font.Bold) т..
Так (?c.Font.Bold) тоже пробовал - ошибка Error E0030 Syntax error: "syntax error at ')'"
|
|
|
|
| |
Пост N: 52
Зарегистрирован: 09.09.11
|
|
Отправлено: 10.04.12 11:27. Заголовок: Нашел решение: oShee..
Нашел решение: oSheet:Cells(Ni,1):Font:Bold Возвращает в xHarbour значение Font:Bold If oSheet:Cells(Ni,1):Font:Bold==.T. wait 'Bold .T.' Endif
|
|
|
|
| постоянный участник
|
Пост N: 311
Зарегистрирован: 06.02.07
|
|
Отправлено: 10.04.12 11:33. Заголовок: Oskar_AAA пишет: c...
Oskar_AAA пишет: ???? А почему пишем свойства через точки??? Через двоеточия вроде как пишется: типа в харборской нотации - вот и весь "syntax error" :) мне каэтца... или неправ? "Копипастенье тоже имеет свои законы" (с)кто-то
|
|
|
|
|
| постоянный участник
|
Пост N: 760
Зарегистрирован: 27.01.07
|
|
Отправлено: 10.04.12 14:23. Заголовок: Петр пишет: Это вед..
Петр пишет: цитата: | Это ведь Harbour - не Basic |
| Конфуз... :) Глаз замылился, не отличил точки от двоеточий. "Стадный рефлекс..." :)
|
|
|
Ответов - 42
, стр:
1
2
3
All
[только новые]
|
|