Форум » [x]Harbour » Снова EXCEL (продолжение) » Ответить

Снова EXCEL (продолжение)

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

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

Dima: Что то не могу найти на форуме , что бы преобразовывать RC формат к ABCD и тд То есть имею точные координаты строка и колонка (числа) , нужно преобразовать к формату не RC Ткните носом плиз PS Имею цифры в колонках 1 2 и 3 и в 4 нужно подбить сумму , как это сделать имея лишь номера колонок и столбцов через СУММ ?

SergKis: Dima пишет То есть имею точные координаты строка и колонка (числа) , нужно преобразовать к формату не RC http://clipper.borda.ru/?1-4-0-00000749-000-180-0 пост 3305

Dima: SergKis Спасибо


Pasha: Имеется числовая колонка, в ячейках которой может стоять разный формат, например 00000001 или 0000000001 если выбирать oCell:Value, то результат будет одинаковый: 1.00 Можно ли выбрать символьное преставление ячейки, или надо самому выбирать oCell:NumberFormat и дальше его анализировать и самому преобразовывать ?

Pasha: ага, есть еще свойство Text, там как раз то, что нужно Жаль, нельзя выбрать Text для Range, как Value, а там надо выбирать тысячи строк, будет мееедленноооо

Dima: Range......:NumberFormat:="@" не то ?

Pasha: Там в столбце 8700 ячеек, с разными комбинациями NumberFormat есть 00000000 есть 0000000000 и еще много чего есть и строковые. Это грубо говоря код предприятия для налогового отчета. Там и физлица, и юрлица, и паспортные данные встречаются, это будут строки, а не числа Да я уже опрашиваю свойство Text, по скорости намного медленнее будет, но переживут, по другому никак. Ни NumberFormat, ни Text для Range не возвращает массив как Value

SergKis: Pasha пишет по другому никак. "&nbsp;"+"000000000" // т.е. непрерывный пробел добавляем или "000000000"+"&nbsp;" PS можно repl("&nbsp;", 10)+<значение строковое> <значение строковое 1>+repl("&nbsp;", 10)+<значение строковое 2>

Pasha: У меня противоположная задача, не сформировать таблицу в Excel, а выбрать данные из сформированной сторонним ПО, или просто заполненной. А там формат ячеек может быть каким угодно

SergKis: Можно формировать xml файл из excel (делает быстро) и читать его, то же быстро и форматы данных от базы, т.е. свои

Pasha: Передаю объект TBrowse в Excel, имеется колонка типа дата Делаю: oCell:Value := d или oRange:Value := {...} где в массиве ячейки этого столбца имеют тип Date NumberFormat не устанавливаю В это случае Excel сам ставит формат ячейки Дата, и правильно передает и отображает значение Но у одного заказчика после недавно переустановленного Excel 2010 формат ячейки остается Общий, и значение отображается неправильно - там целое число Может в Excel есть какая-то настройка, чтобы он устанавливал формат ? С наверное сотнями пользователей с разными версиями Excel от 2003 до 2019 за десятки лет такой проблемы не было, с одним возникло Может дело в региональных стандартах ? Смотрю в Excel Параметры - Дополнительно - Использовать системные разделители - Галочка стоит. Непонятно

Haz: Проверьте что установлено в стилях ячеек у этого пользователя. Вкладка главная -> стили -> стили ячеек-> обычный-> правый клик-> изменить. Ps Однозначно решает вопрос предварительная установка numberformat в ячейки. Для себя отказался от заполнения через ole, гоню выгрузку сначала в XML, а через ole дорисовываю красоту. Продукты микрософт очень любят подсунуть нежданчик на ровном месте.

Pasha: мозги сломал, когда искал, почему oSheet:Columns(nCol):NumberFormat := "m/d/yyyy" не работает, хотя запись макросов дает такой именно это. надо так: oSheet:Columns(nCol):NumberFormat := "ДД.ММ.ГГГГ"

Dima: Pasha пишет: oSheet:Columns(nCol):NumberFormat := "m/d/yyyy" а я забил на фиг на такой формат и пишу так oSheet:Columns(nCol):NumberFormat :="@" oSheet:Cells( j, a ):Value:=" "+hb_dtoc(i,"DD.MM.YYYY")

Dima: Порча какая то с Excel Было [pre2] oSheet:Range(osheet:cells(j,1),osheet:cells(j,4)):NumberFormat:={"@","@", "# ##0.00","# ##0.00"} Работает [/pre2] Решил отрицательные числа сделать красным и не пашет , падает Excel [pre2] oSheet:Range(osheet:cells(j,1),osheet:cells(j,4)):NumberFormat:={"@","@", "# ##0.00;[Red]# ##0.00","# ##0.00;[Red]# ##0.00"} [/pre2] Как решить вопрос ?

Andrey: Я в 2015 году делал вот так. [pre2] // создаём окно ожидания с потоком WaitThreadCreate( 'Расчёт и вызов Excel ...' ) // Область с заполненными данными oRange := oExcel:ActiveCell:SpecialCells( 11 /*xlLastCell*/ ) nRowXls := oRange:Row // Последняя строка nColXls := oRange:Column // Последний столбец oSheet:Columns( 1 ):Autofit() oSheet:Cells[ 1, nRowXls + 1 ]:HorizontalAlignment := 4 // Выравнивание по правому краю ячейки oSheet:Cells[ 1, nRowXls + 1 ]:Font:ColorIndex := 3 // Шрифт красный oSheet:Cells[ 1, nRowXls + 1 ] := 'Итого сумма с минусом' oSheet:Cells[ 1, nRowXls + 2 ]:HorizontalAlignment := 4 oSheet:Cells[ 1, nRowXls + 2 ]:Font:ColorIndex := 5 // Шрифт синий oSheet:Cells[ 1, nRowXls + 2 ] := 'Итого сумма с плюсом' oSheet:Cells[ 1, nRowXls + 3 ]:HorizontalAlignment := 4 oSheet:Cells[ 1, nRowXls + 3 ] := 'Итого сумма' FOR nCol := 2 TO nColXls xValue := oSheet:Cells( 1, nCol ):Value IF 'OSTAT' $ xValue .OR. 'DOLG' $ xValue oSheet:Cells[ nCol, nRowXls + 1 ] := '=СУММЕСЛИ( R[-' + AllTrim( Str( nRowXls-1, 8) ) + ']C:R[-1]C; "<0" )' oSheet:Cells[ nCol, nRowXls + 1 ]:NumberFormat := '# ##0,00' oSheet:Cells[ nCol, nRowXls + 1 ]:Font:ColorIndex := 3 // Шрифт красный oSheet:Cells[ nCol, nRowXls + 2 ] := '=СУММЕСЛИ( R[-' + AllTrim( Str( nRowXls, 8) ) + ']C:R[-2]C; ">0" )' oSheet:Cells[ nCol, nRowXls + 2 ]:NumberFormat := '# ##0,00' oSheet:Cells[ nCol, nRowXls + 2 ]:Font:ColorIndex := 5 // Шрифт синий oSheet:Cells[ nCol, nRowXls + 3 ] := '=СУММ( R[-' + AllTrim( Str( nRowXls+1, 8) ) + ']C:R[-3]C)' oSheet:Cells[ nCol, nRowXls + 3 ]:NumberFormat := '# ##0,00' ENDIF IF 'DATE' $ xValue oSheet:Columns( nCol ):Autofit() ENDIF NEXT oSheet:Cells[ 2, nRowXls + 4 ]:Select() oExcel:Visible := .T. WaitThreadClose() // закрыть окно "ожидания" hWnd := oExcel:hWnd ShowWindow( hWnd, 3 ) //SW_MAXIMIZE=3 SW_NORMAL=1 SW_MINIMIZE=6 BringWindowToTop( hWnd )[/pre2]

Dima: Andrey Это понятно что и так можно сделать , так и сделал. Не понятно почему Excel выдав в своем же макросе NumberFormat "# ##0.00;[Red]# ##0.00" , отказывается с ним работать через олю в Harbour

PSP: Вот тут https://support.microsoft.com/en-us/office/number-format-codes-5026bbd6-04bc-48cd-bf33-80f18b4eae68 говорят, что надо как-то так: To indicate that a number format will be applied only if the number meets a condition that you have specified, enclose the condition in square brackets. The condition consists of a comparison operator and a value. For example, the following number format will display numbers that are less than or equal to 100 in a red font and numbers that are greater than 100 in a blue font. [Red][<=100];[Blue][>100]

Dima: PSP Спасибо , победить не смог На удачу сделал так [pre2] "# ##0.00;[Красный]# ##0.00" [/pre2] Блин , заработало Но так делать стрёмно , если у кого English Excel стоит. PS По идее в Excel должна быть переключалка языка для макросов , вот только где она живет.......надо поискать

Dima: Есть строка в таблице с группировкой , то есть слева от нее крестик , при нажатии на который раскроется еще скажем 20 строк. Группировка в строке делалась примерно так [pre2] oSheet:Range(.........):Select() WITH OBJECT oExcel:Selection :Rows:Group() ENDWITH [/pre2] Задача вот всю эту строку с группировкой надо бы переместить скажем после 3 строки таблицы Excel Не пойму как это сделать. Кто то делал похожее ?



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