|
|
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
помогите скопировать инфу с грида в эксель. мне необходимо вытащить с грида и загнать в эксель, помогите со скриптом, зарание благодарен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2005, 10:51:53 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
Посмотри тут Решения Foxclub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2005, 11:03:40 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
Не мое,и к сожалению не помню чье, но мною подстригалось DEFINE CLASS cmdexcel AS cmdbutton Height = 25 Width = 25 Picture = "..\icon\excel.bmp" StatusBarText = "Экспорт в MS Excel" ToolTipText = "Экспорт в MS Excel" Name = "cmdexcel" gridobject = .F. PROCEDURE cvar LPARAMETER vValue do CASE CASE TYPE("vValue") = "C" RETURN vValue CASE TYPE("vValue") = "N" RETURN STR(vValue,11,4) CASE TYPE("vValue") = "L" RETURN IIF(vValue, 'Да', 'Нет') CASE TYPE("vValue") = "Y" RETURN STR(vValue,LEN(alltrim(STR(vValue))),2) CASE TYPE("vValue") = "D" RETURN DtoC(vValue) CASE TYPE("vValue") = "T" RETURN TtoC(vValue) endCASE ENDPROC PROCEDURE Click IF EMPTY(this.GridObject) OR TYPE(this.GridObject)<>"O" OR EVAL(this.GridObject+'.BaseClass')<>'Grid' OR EMPTY(EVAL(this.GridObject+'.RecordSource')) && Не задан GRID, заданный GRID не существует или у него не указан источник данных && Не забывайте указвать имя GRID полностью - например, thisForm.PageFrame1.Page1.Grid1 messagebox("Неверно заданы параметры кнопки или объекта GRID") RETURN ENDIF local nColumnsNumber, oExcel, oSheet, oGrid, nCurrentRow, nCurrentColumn, nRecNo, cOldSel, cErrorSet cErrorSet = ON("ERROR") on error messagebox(Message()+chr(13)+Program()+chr(13)+'Line '+str(Lineno())) cOldSel = select() && Запоминаем текущую рабочую область nRecNo = RecNo() && и положение указателя в ней oGrid = EVAL(this.GridObject) select (oGrid.RecordSource) && Перешли в нужную область go top && Выводить будем все записи с самого начала nColumnsNumber = oGrid.ColumnCount && Количество колонок в GRID WAIT 'Создается документ Excel. Немного подождите...' WINDOW AT 15, 45 NOWAIT oExcel=create('Excel.Application') && Создаем копию Excel *Проверка существования(установки) Экселя IF TYPE("m.oExcel")!="O" =MESSAGEBOX("Не могу выполнить экспортирование. Возможно у вас не установлен Excel!",16,"Внимание...") on ERROR &cErrorSet RETURN ENDIF oExcel.WorkBooks.add() && и новый документ в нем oSheet = oExcel.Workbooks(1).ActiveSheet && Работать будем с этой страницей **Пропишем заголовки для колонок в таблице. Естественно, это по желанию nCurrentRow = 1 FOR nCurrentColumn = 1 to oGrid.ColumnCount && количество столбцов в этом гриде *Проверка, заменен ли хедер на свой. loCol=oGrid.Columns(nCurrentColumn) FOR EACH loCtl IN loCol.Controls IF UPPER(loCtl.BaseClass)=='HEADER' && Для следующей строки необходимо, чтобы имена заголовков колонок в Grid остались дефолтовыми - Header1 oSheet.Cells(nCurrentRow, nCurrentColumn).Value = loCtl.Caption ENDIF ENDFOR ENDFOR nCurrentRow = 2 && Со второй строки начнем выводить сами данные do while NOT EOF() * oExcel.Documents(1).Tables(1).Rows.Add && Пройдем по всем колонкам FOR nCurrentColumn = 1 to oGrid.ColumnCount oSheet.Cells(nCurrentRow, nCurrentColumn).Value = this.CVar(EVAL(oGrid.Columns(nCurrentColumn).ControlSource)) ENDFOR skip && И так до конца таблицы nCurrentRow = nCurrentRow + 1 enddo oExcel.caption=thisForm.Caption && Заголовок окна Excel возьмем из заголовка этой формы oExcel.ROWS("1:1").SELECT &&выбрали первую строку - это типа названия полей oExcel.SELECTION.HorizontalAlignment = 3 &&горизонтальное выравнивание - по центру oExcel.SELECTION.FONT.Bold = .T. &&жирненьким выделили oExcel.ActiveSheet.Cells.SELECT &&выбрали все ячейкм oExcel.ActiveSheet.Cells.EntireColumn.AutoFit &&да столбцы автоматом подогнали по ширине oExcel.RANGE("A1").SELECT &&выбрали первую ячейку oExcel.visible= .T. && Сделаем окно Excel видимым on ERROR &cErrorSet select (cOldSel) && Восстановим ситуацию *Соответсвенно восстановление указателя записи: SELECT (oGrid.RecordSource) IF nRecNo=0 GO BOTTOM IN (oGrid.RecordSource) IF EOF()=.F. SKIP ENDIF ELSE *проверка если удалена запись IF nRecNo>RECCOUNT() GO BOTTOM IN (oGrid.RecordSource) IF EOF()=.F. SKIP ENDIF ELSE GO nRecNo IN (oGrid.RecordSource) ENDIF ENDIF ENDPROC ENDDEFINE * *-- EndDefine: cmdexcel ************************************************** ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2005, 15:39:22 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
Hi _новичек! > FOR nCurrentColumn = 1 to oGrid.ColumnCount > oSheet.Cells(nCurrentRow, nCurrentColumn).Value = this.CVar(EVAL(oGrid.Columns(nCurrentColumn).ControlSource)) > ENDFOR Вот это ОЧЕНЬ медленно будет. Если есть возможность (фокс хотя-бы 7-й) то стоит переделать на переброску через массив или через буфер обмена - ускорение на ПАРУ ПОРЯДКОВ стоит того :) Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2005, 19:43:44 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
Ох ты..., на пару порядков обещаете!!! Это было бы и вправду лучше, у меня примерно такое же и в ворд, так там вообще медленно, и такое же в html, побыстрее... Не подскажите как?, можно кусочек кода??? Не могу въехать-через массив. Кстати, как же ограничение размерности массива?, (да еще и экселя тоже есть, но это не важно) хотя идеально было бы другой лист экселя припечатать, если больше 65000 строк(ну это в идеале) Да кстати тока заметил-зачем это я проверяю на удаление записи *проверка если удалена запись IF nRecNo>RECCOUNT() ?Когда это злые юзеры успели удалить запись, пока я экспортировал :) Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2005, 20:16:16 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
Hi _новичек! попользуйся поиском тут и на foxclub.ru - разные способы передачи обсуждались - в т.ч. и через массив. Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2005, 02:11:19 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
dimakzпомогите скопировать инфу с грида в эксель. мне необходимо вытащить с грида и загнать в эксель, помогите со скриптом, зарание благодарен Лично я открыл для себя "Тайд" В смысле программу XFRX. Адрес сейчас не помню ... но думаю по форуму можно найти. Условно-бесплатная (все возможности, только на каждом листе о себе напоминает надписью внизу). Есть и крякнутая версия... в форуме можешь попросить... может кто поможет... С ней конечно надо поиграться: сразу выдает полный бред в Ексель... но если немного почитать инструкцию к ней и сделать отчет так как требуют разработчики - то большего и не надо. Сейчас пользуюсь только этой программой... PS: кстати, как побочный эфект - кроме Екселя умеет еще выводить во все мыслимые и немыслимые форматы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2005, 17:27:20 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
dimakzпомогите скопировать инфу с грида в эксель. мне необходимо вытащить с грида и загнать в эксель, помогите со скриптом, зарание благодарен Не надо изобретать велосипед... Есть стандартная команда COPY там есть формат EXCEL5 -> скопировали курсор, вызвали EXCEL, загрузили таблицу, если надо присвоили "умные" имена колонкам... работает мгновенно... Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2005, 22:55:13 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
Hi Sergey! Грид и курсор вещи разные :) Ты ещё попробуй выкинуть данные из грида в котором несколько таблиц по relation связаны :( Или то-же минимальное украшательство - не выводить служебные поля (в гриде их нету), выводить не в физическом порядке, а в том что в гриде, подогнать по возможности ширину полей под то что в гриде - в общем много есть моментов, из-за которых "в лоб" получается плохо... Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2005, 01:13:14 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
У меня есть универсальный класс, который записывает данные в EXCEL-файл из GRID или курсора. Если интересно, могу показать. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2005, 09:13:57 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov Грид и курсор вещи разные :) Ты ещё попробуй выкинуть данные из грида в котором несколько таблиц по relation связаны :( Или то-же минимальное украшательство - не выводить служебные поля (в гриде их нету), выводить не в физическом порядке, а в том что в гриде, подогнать по возможности ширину полей под то что в гриде - в общем много есть моментов, из-за которых "в лоб" получается плохо... Согласен, что зависит от Ваших и Ваших клиентов пристрастий... Но, как правило - я, например, вывожу данные сначала в курсор, а затем в грид (так как много приложений разрабатывается где удаленный источник находится за тысячи километров - VFP Web Service или ASP.NET Web Service)... Таким образом - Grid всего лишь просмотрщик уже готовых и отобранных данных... Ну а подгонка ширины столбцов в Excel - всго одна функция, которая выполняется мгновенно... P.S. Посмотрел я тут на Западе формы, выводимые в Excel серьезными программами (очень долго смеялся) и понал, что мы просто БАЛУЕМ наших клиентов красивыми формами, а нашему МНС и ПФ больше делать нечего как выдумывать зарядку для нашего недетского ума, изобретая высосанные из пальца многоэтажные и многостраничные формы отчетов... Им что 1С взятки платит за такое усложнение отчетности?... Но это так, лирическое отступление - понятно, что у нас очень много чиноваников в стране и всем надо показывать ИМБУРДЭ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2005, 10:42:50 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
Hi Sergey! Желание клиента - закон :) Тем более если оно достаточно просто реализуемо :) Т.к. у меня помимо прочего сохраняются размер формы, ширина и положение колонок в гридах, то грех это дело проигнорировать и при выводе в Excel. Вот собственно код - это метод грида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. Думаю что назначение упомянутых методов понятно из их названия, приведу лишь код "ключевого" метода (остальные можно вообще выкинуть или заменить) - goApp.ArrayPasser, благо он краток: Код: plaintext 1. 2. 3. Скорость вполне приемлемая (по сравнению с "поячеечным" заполнением листа Excel так очень даже быстро :) ), с "хитрыми" типами данных тоже вроде разобрались... P.S. Я не помню, начиная с какой версии появилась возможность "возвращать массив из метода класса" - в VFP8 это точно работает. Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2005, 16:57:55 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
СПАСИБО Игорь у меня был вариант через временную базу то пустые даты были как - - то что мне надо : IF INLIST(VARTYPE(m.paData(m.ln3)), "D", "T") AND ; EMPTY(m.paData(m.ln3)) paData(m.ln3) = [] ENDIF зы reccount понятно лучше заменить на count (под фильтр или set key будет работать ) ззы ну и можно логические поля менять на 'a' с шрифтом 'Webdings' галочка будет как в решении на фоксклубе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2005, 17:26:47 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
Спасибо Игорь Насчет скорости Вы правы Летает точно как ветер!!! Тока проблемка одна небольшая- не соблюдает порядок следоывания столбцов в гриде А так песня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2005, 18:57:48 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
Прошу прощения, все работает нормально, сохраняет порядок следования Виноват Супер, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.05.2005, 19:02:42 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
Hi Федор! Просто когда через массив пытаешься пихать пустую дату - всё валится... Через временную таблицу конечно быстрее, НО приходится как-то формировать SQL команду создания этой самой базы - чтобы как минимум поля в нужном порядке были. А если в качестве источника данных для грида несколько связанных таблиц - то IMHO проще застрелиться, чем делать алгоритм, который может коректный запрос сделать. Заставлять же разработчика для каждой формы каждого грида руками SQL запрос писать - нельзя - ломает это их - особенно после того как есть решение где ничего такого не нужно делать :( Хотя конечно для более "нормальных" отчётов именно так и делаю (ну ещё учитывая использование ActiveXL Report в последнее время :) ). Про Count спасибо, я как противник фильтров и сторонник Views просто забыл про это :( С логическими полями и картинками нужно подумать - там ведь ещё и Null бывают... Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2005, 01:24:24 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
>> как-то формировать SQL команду создания этой самой базы я решал эту проблему - create ,scan и тд были заморочки с полями типа a+b , aa*8/118 - чтобы корректно посчитать их размер >> ActiveXL Report в последнее время :) ). пару слов + ссылки если можно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2005, 17:56:49 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
Hi Федор! > >> ActiveXL Report в последнее время :) ). > пару слов + ссылки если можно Нет у меня ссылок увы, попробуй поискать в Google. В принципе компонент свои задачи решает - т.е. даже по не совсем уж примитивному шаблону работает. Были какие-то глюки, но имея исходники это всё решаемо :) Из существенных минусов - он работает на основе макросов. Т.е. во вновь созданную книгу он напихивает служебные макросы, через них осуществляет практически всю работу, а в конце макросы удаляет. Это требует понижения уровня безопасности Excel и даже включать "доверять доступ к VBProject" для последних версий Excel-я... Также без доработки напильником он никак не мог сделать документ "по тихому" - т.е. всегда его показывал (хотя вроде в последних версиях это и было как-то устранено, но у нас не на базе наисвежайшей версии делают). Posted via ActualForum NNTP Server 1.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2005, 03:03:54 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
To Igor Korolyov. Прошу прощени, что подымаю старую тему. Вы привели код переброски информации с грида в эксель. Как нужно его переработать, чтобы его можно было использовать в VFP6.0? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2005, 15:17:56 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
и кстати Игорь коли уж подняли эту тему, возникает иногда ошибка в строке помоему loRange.Value = m.goApp.ArrayPasser("paData") на МЕМО полях, какая еще обработка требуется???? хочется доуниверсализировать эту процедуру для всех видов полей спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.06.2005, 18:04:04 |
|
||
|
помогите скопировать инфу с грида в эксель
|
|||
|---|---|---|---|
|
#18+
Hi тёзка! Увы, в VFP6 ЭТОТ способ переброса информации работать не будет. По описанной там внизу причине. 2 _новичек Возможно что в этих полях есть что-то что не нравится excel-ю наподобии пустой даты. Не знаю, я с хитрыми Memo не проверял... Попробуй удалять из Memo все CHR(13), CHR(10), CHR(9) (а может и всем скопом - все с кодами < 32) Да я там вроде описался в max размерности и проверку её-же в SCAN не добавил - массив то в фоксе всего 65000 элементов... Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2005, 03:43:48 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=317&tid=1594055]: |
0ms |
get settings: |
6ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 352ms |

| 0 / 0 |
