On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
Dima
администратор




Пост N: 2372
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.05.12 16:52. Заголовок: Снова EXCEL


Ранее с Excel из Harbour ни когда не работал.
Поставили тут задачу.
У некоторых поставщиков есть определенные формы заказов.
Набраны они в Excel. Сейчас народ руками заполняет эти формы
и шлет по электронке поставщикам.
Задача сводится к тому что бы в этих формах находить
нужные коды товара и в нужной ячейке проставлять заказ.
Может ткнет кто носом с чего начать что бы не напороться на грабли.
Спасибо
Сами формы тут http://zalil.ru/33279066

Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


Dima
администратор




Пост N: 4817
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.05.15 17:14. Заголовок: Спасибо Игорь попроб..


Спасибо Игорь попробую. Надеюсь этот код будет и в XP себя также вести.

ЗЫ
Проверил. Работает отлично.

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 558
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.05.15 17:18. Заголовок: Dima пишет: Надеюсь..


Dima пишет:

 цитата:
Надеюсь этот код будет и в XP себя также вести.



Да вроде везде одинаково себя ведет. Более того по hWnd можно это окно двигать или менять размеры т.е. можно разделить экран и использовать excel типа для предпросмотра )

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 4818
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 22.05.15 17:26. Заголовок: Haz пишет: Более то..


Haz пишет:

 цитата:
Более того по hWnd можно это окно двигать или менять размеры т.е. можно разделить экран и использовать excel типа для предпросмотра )


Круто !

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 4180
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.05.15 19:41. Заголовок: Haz пишет: hWnd := ..


Haz пишет:

 цитата:
hWnd := oExcel:hWnd
ShowWindow(hWnd, 3) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6
BringWindowToTop(hWnd)


А я долбился года 2 назад, как поверх всех окон выводить Ёксель в Win7 и выше...
Спасибо !
А как изменять размеры окна Ёкселя ?

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 559
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.05.15 09:47. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как изменять размеры окна Ёкселя



MoveWindow( hWnd, ...)

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3304
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.07.15 16:44. Заголовок: Пришлось тут заполня..


Пришлось тут заполнять большую форму в экселе: много листов, строки разбиты на множество клеточек
Получилось мееееедленно.

Строку заполнял традиционным способом:
oCell := oSheet:Cells(nRow, nCol)
oCell:Value := c1
oCell := oCell:Next
oCell:Value := c2
...

Как оказалось, допустим такой синтаксис:
aValue := {c1, c2, ...}
oSheet:Range(oSheet:Cells(nRow, nCol), oSheet:Cells(nRow, nCol+len(aValue)-1)):Value := aValue

При этом заполняется значениями сразу вся строка документа, что значительно быстрее.
Некоторые ячейки при этом можно пропускать:
aValue := {c1,, c3, ...}


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 5075
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.07.15 16:55. Заголовок: Pasha Паш об этом у..


Pasha
Паш об этом уже писалось. И про сеточку и про заполнение.

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3305
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.07.15 18:25. Заголовок: Действительно, я про..


Действительно, я прозевал этот трюк. Но пока сам не пощупаешь.. действительно быстрее в разы
Еще лучше преобразовывать адрес ячеек сразу в текст:

Вместо:

oSheet:Range(oSheet:Cells(nRow, nCol), oSheet:Cells(nRow, nCol2))

использовать

oSheet:Range(;
if(nCol>26,Chr(Int((nCol-1)/26)+64),'')+Chr((nCol-1)%26+65) + LTrim(Str(nRow)) + ':' +;
if(nCol2>26,Chr(Int((nCol2-1)/26)+64),'')+Chr((nCol2-1)%26+65) + LTrim(Str(nRow)) )

это минус вызов 2-х методов excel

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 5077
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.07.15 18:37. Заголовок: Там еще одна мелочуш..


Там еще одна мелочушка.
Если присвоение делаем так :={1,2}
А вот если в с того же Range считать данные то получим уже в таком формате {{1},{2}}

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 5084
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.07.15 15:19. Заголовок: В Ёксель задаю отсту..


В Ёксель задаю отступы листа , но иногда бывает что широкая таблица целиком
на страницу не влазит при печати и начинаются авто-переносы.
Что надо сказать Ёкселю что бы он вписал таблицу в нужную ширину скажем
за счет какой то колонки ?


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 5085
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.07.15 15:42. Заголовок: Вроде нашлось ;) .F..


Вроде нашлось ;)
.FitToPagesWide = 1
.FitToPagesTall = 32000

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 5086
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.07.15 16:00. Заголовок: Окончательный вариан..


Окончательный вариант
oSheet:PageSetup:FitToPagesWide:= 1
oSheet:PageSetup:Zoom:= .f. // это обязательно
oSheet:PageSetup:FitToPagesTall:= 32000


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 602
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 08.07.15 20:32. Заголовок: Dima пишет: oSheet:..


Dima пишет:

 цитата:
oSheet:PageSetup:Zoom:= .f. // это обязательно



все верно делаю так

oExcel:ActiveSheet:PageSetup:Zoom := FALSE
oExcel:ActiveSheet:PageSetup:FitToPagesWide := 1
oExcel:ActiveSheet:PageSetup:FitToPagesTall := 10
oExcel:ActiveSheet:PageSetup:Orientation := xlLandscape

PS. Раньше ответить не мог - винда рухнула, пол дня ставил

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 5088
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 08.07.15 21:22. Заголовок: Haz пишет: oExcel:A..


Haz пишет:

 цитата:
oExcel:ActiveSheet:PageSetup:Orientation := xlLandscape


я в портрет хотел вписать , xlLandscape был не вариант ;)

Haz пишет:

 цитата:
PS. Раньше ответить не мог - винда рухнула, пол дня ставил


Беккап не юзаем конечно (типа Acronis True Image) и точки восстановления тоже ?

ЗЫ
Если винты у тебя Сигейт или WD , есть бесплатный вариант ATI.
Научу что надо делать. Вещь не заменимая. Ну или аналог Paragon Домашний Эксперт
Там все довольно просто Игорь.


Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 4394
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.07.15 12:20. Заголовок: Привет всем. Есть ли..


Привет всем.
Есть ли у кого простой текст программы для переноса dbf в xls ?
База небольшая 30-40 записей. Ну и вверху листа экселя сделать титул и шапку на русском...
Или дайте пожалуйста схему как сделать без всяких наворотов.
А то я до этого делал обратную задачу из xls в dbf.


Спасибо: 0 
Профиль
Alex_Cher





Пост N: 9
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 23.07.15 13:19. Заголовок: Например : #define ..


Например :

#define xlWorkbookNormal -4143

FUNCTION MAIN()

LOCAL oExcel, oWorkBook, _tec_dir := GetCurrentFolder(), _line := 3
SET LANGUAGE TO RUSSIAN

oExcel := TOleAuto():New( "Excel.Application" )
oWorkBook := oExcel:WorkBooks:Open( _tec_dir + "\TEST1.DBF" )

oWorkBook:Cells:Font:Name := "Arial" // Офолрмление колонок, ячеек
oWorkBook:Cells:Font:Size := 10
oWorkBook:Columns( 15 ):Set( "NumberFormat", '@' )
oWorkBook:Cells(3, 3):Borders():LineStyle := 1
oWorkBook:Range("A2:D2"):Borders():LineStyle := 1
oWorkBook:columns(14):columnwidth := 18

oWorkBook:Cells( 1, 3):Value := "Титул"

DO WHILE .NOT.EOF()

oWorkBook:Cells( _line, 1):Value := 1->PU // значени полей DBF
oWorkBook:Cells( _line, 2):Value := 1->KF

oWorkBook:Cells( _line, 4):Value := 1->TV
oWorkBook:Cells( _line, 4 ):Set( "NumberFormat", '@' ) // текстовая ячейка

oWorkBook:Cells( _line, 12):Value := 1->ZU
oWorkBook:Cells( _line, 12 ):Set( 'NumberFormat', '########0,00' ) // числовая ячейка

.......

_line++
SKIP
ENDDO

oWorkBook:SaveAs( _tec_dir + "\NEW.XLS", xlWorkbookNormal )
oExcel:Visible = .T.

RETURN NIL



Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 4395
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.07.15 13:24. Заголовок: Спасибо БОЛЬШОЕ ! :..


Спасибо БОЛЬШОЕ !

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 4397
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.07.15 17:33. Заголовок: Есть цвет из МиниГуи..


Есть цвет из МиниГуи {234,240,207}.
Как сделать заливку ячейки в Экселе этим цветом ?

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 5149
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.07.15 17:43. Заголовок: Как то так ActiveWor..


Как то так
ActiveWorkbook.Colors(1) = RGB(234,240,207)
Затем красим с индексом 1

Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 4398
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.07.15 18:28. Заголовок: Alex_Cher пишет: oE..


Alex_Cher пишет:

 цитата:
oExcel := TOleAuto():New( "Excel.Application" )
oWorkBook := oExcel:WorkBooks:Open( _tec_dir + "\TEST1.DBF" )



А как сделать без открытия базы ?
База у меня открывается в другом месте и не все поля нужно перетаскивать в Эксель.
Как создать новый документ xls ?

Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 50
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет