Форум » [x]Harbour » Снова EXCEL » Ответить

Снова EXCEL

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

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

Dima: Спасибо Игорь попробую. Надеюсь этот код будет и в XP себя также вести. ЗЫ Проверил. Работает отлично.

Haz: Dima пишет: Надеюсь этот код будет и в XP себя также вести. Да вроде везде одинаково себя ведет. Более того по hWnd можно это окно двигать или менять размеры т.е. можно разделить экран и использовать excel типа для предпросмотра )

Dima: Haz пишет: Более того по hWnd можно это окно двигать или менять размеры т.е. можно разделить экран и использовать excel типа для предпросмотра ) Круто !


Andrey: Haz пишет: hWnd := oExcel:hWnd ShowWindow(hWnd, 3) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6 BringWindowToTop(hWnd) А я долбился года 2 назад, как поверх всех окон выводить Ёксель в Win7 и выше... Спасибо ! А как изменять размеры окна Ёкселя ?

Haz: Andrey пишет: А как изменять размеры окна Ёкселя MoveWindow( hWnd, ...)

Pasha: Пришлось тут заполнять большую форму в экселе: много листов, строки разбиты на множество клеточек Получилось мееееедленно. Строку заполнял традиционным способом: 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, ...}

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

Pasha: Действительно, я прозевал этот трюк. Но пока сам не пощупаешь.. действительно быстрее в разы Еще лучше преобразовывать адрес ячеек сразу в текст: Вместо: 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

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

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

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

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

Haz: 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. Раньше ответить не мог - винда рухнула, пол дня ставил

Dima: Haz пишет: oExcel:ActiveSheet:PageSetup:Orientation := xlLandscape я в портрет хотел вписать , xlLandscape был не вариант ;) Haz пишет: PS. Раньше ответить не мог - винда рухнула, пол дня ставил Беккап не юзаем конечно (типа Acronis True Image) и точки восстановления тоже ? ЗЫ Если винты у тебя Сигейт или WD , есть бесплатный вариант ATI. Научу что надо делать. Вещь не заменимая. Ну или аналог Paragon Домашний Эксперт Там все довольно просто Игорь.

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

Alex_Cher: Например : #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

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

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

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

Andrey: Alex_Cher пишет: oExcel := TOleAuto():New( "Excel.Application" ) oWorkBook := oExcel:WorkBooks:Open( _tec_dir + "\TEST1.DBF" ) А как сделать без открытия базы ? База у меня открывается в другом месте и не все поля нужно перетаскивать в Эксель. Как создать новый документ xls ?



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