Форум » [x]Harbour » Снова EXCEL (продолжение) » Ответить
Снова EXCEL (продолжение)
Dima: Ранее с Excel из Harbour ни когда не работал. Поставили тут задачу. У некоторых поставщиков есть определенные формы заказов. Набраны они в Excel. Сейчас народ руками заполняет эти формы и шлет по электронке поставщикам. Задача сводится к тому что бы в этих формах находить нужные коды товара и в нужной ячейке проставлять заказ. Может ткнет кто носом с чего начать что бы не напороться на грабли. Спасибо Сами формы тут http://zalil.ru/33279066
Ответов - 90, стр:
1 2 3 4 5 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 пишет по другому никак. " "+"000000000" // т.е. непрерывный пробел добавляем или "000000000"+" " PS можно repl(" ", 10)+<значение строковое> <значение строковое 1>+repl(" ", 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 Не пойму как это сделать. Кто то делал похожее ?
Pasha: Создаю книгу, заполняю строки данными Беру oSheet:HPageBreaks:Count. получаю 4 разделителя страниц Визуально в книге их четыре и есть Затем в цикле их перебираю. От одного до трех все в порядке, получаю адрес и номер строки разделителя А на последний: oSheet:HPageBreaks(4) получаю ошибку: MEMBERNOTFOUND В чем ошибка ? Как получить последний разделитель ?
SergKis: Pasha Может от 0-3 ?
Pasha: Глюк становится еще непонятнее Копаю дальше. Оказывается, неважно сколько получается HPageBreaks, Excel дает только первые три, а с четвертого - ошибка Пересохранил книгу из формата xls в xlsx. Теперь Excel дает только первые два разделителя страниц, а с третьего и дальше - ошибка
Pasha: Может от 0-3 ? Нет, пробовал и так, нумерация всех коллекций в Excel идет с единицы
Pasha: Сбросил пример на файлообменник. Здесь Excel дает только два разделителя страниц, а дальше ошибка https://www.mediafire.com/file/gfo5rok5msncf3y/_pg.7z/file
Dima: Pasha пишет: Копаю дальше. Оказывается, неважно сколько получается HPageBreaks, Excel дает только первые три, а с четвертого - ошибка Пересохранил книгу из формата xls в xlsx. Теперь Excel дает только первые два разделителя страниц, а с третьего и дальше - ошибка у меня на 45-м упало Excel 2010
Pasha: Там всего 7 разделителей страниц
Dima: Pasha пишет: ам всего 7 разделителей страниц
Dima: HPageBreaks Count 211
Pasha: Еще страньше. Я гонял на Excel 2016 и 2007. А предварительный просмотр сколько страниц дает ? Должно быть 8, как раз 7 разделителей
Dima: Да 8
SergKis: PS. Наверно, это не надо (убрал лишнее), смотрим только Sheet2 в примере поставил nCnt := 8 или 10 (строки может надо анализировать) все загрузилось
Dima:
SergKis: Dima Спасибо. Наверно, я Пашу не понял, он про разделитель страниц, а я про Sheet (их тут три) А разве нельзя посчитать nCnt разделители от полученного кол-ва строк Sheet2, пробежав по ним ? Ведь полученное, у меня, HPageBreaks Count 218, явно врет
Pasha: У меня там строки разной высоты, поэтому я и выбираю те разделители, которые Excel поставил. Есть еще и сквозные строки, заголовки на каждой странице. Надо поймать все разделители страниц, и на каждой странице внизу добавить строку - итоги по странице. А разделители собаки такие не работают.
SergKis: Pasha пишет У меня там строки разной высоты, поэтому я и выбираю те разделители, которые Excel поставил. Так я и предлагаю их посчитать, пробежав по всем строкам (получив сначала их кол-во, в LibXL от этого пляшу, Sheet->кол-во строк->...), тут не важно высоты строк. Запомнить номер строки перед символом (получить список) и потом в обратном порядке этого списка добавлять строки итоги на каждый лист Sheet2
Pasha: Поскольку HPageBreaks конкретно глючит, нашел другое решение: В цикле по строкам опрашивать: if oSheet2:Rows(nRow):PageBreak # xlNone значит в этой строке разделитель страницы Медленно будет конечно, но пока по другому не получается
Dima: Паша лови решение oExcel:ActiveWindow:View:= xlPageBreakPreview // 2 nCnt := oSheet2:HPageBreaks:Count() // 7
Dima: Результат [pre2] 1 2 3 4 5 6 7 7: 38 70 102 136 170 202 234 [/pre2]
Pasha: Спасибо, заработало !
alex_II: Как сменить направление текста в ячейке?
Dima: alex_II Если мы про ориентацию то так например oSheet:cells(j,1):Orientation:=90
alex_II: Да, я это и имел в виду, спасибо
Dima: как сделать полноэкранный курсор (каким то цветом) в Excel ? ps я не про мышку
Dima: Проехали поставил FollowCellPointer
Dima: ComboBox кто нибудь делал в Excel средствами Harbour , можно примерчик ?
Andrey: Как в экселе сделать замену ВСЕХ символов ";" на "|" ? И подсчёт кол-ва замены можно сделать ? В Ворде знаю как, а в экселе не делал.
Alex_Cher: Андрей, привет ..... а у меня проблемы с вордом ... как в одной сроке установить разные символы ..? Вариант с поиском и заменой не подходит.
Dima: Andrey гугли )) https://www.excel-vba.ru/forum/index.php?topic=5574.0 https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=99894&TITLE_SEO=99894-makros-zamena-zapyatoy-na-tochku
Andrey: Не пойму как макрос Экселя переделать в Харборовский код ? [pre2] oExcel := win_oleCreateObject( "Excel.Application" ) oExcel:Visible := .F. // .T. показать Excel на экране для отладки oExcel:DisplayAlerts := .F. // убрать предупреждения Excel oExcel:Workbooks:Open( cFile, 0 ) oBook := oExcel:ActiveWorkBook() oSheet := oExcel:ActiveSheet() oRange := oExcel:ActiveCell:SpecialCells( xlLastCell ) nXlsRecno := oRange:Row // количество строк таблицы Excel nXlsColumn := oRange:Column // количество колонок Excel - НЕ всегда РАБОТАЕТ НОРМАЛЬНО ! // если 1-я строка объединена, то не работает //nXlsColumn := oSheet:UsedRange:Columns:Count // количество колонок Excel - РАБОТАЕТ .... // макрос экселя Cells.Replace What:=";", Replacement:="|", LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False[/pre2]
Pasha: Объект Cells - это oSheet:Cells Я тебе в телегу кидал описание метода Replace: expression.Replace(What, Replacement, LookAt, SearchOrder, MatchCase, MatchByte, SearchFormat, ReplaceFormat) expression Required. An expression that returns a Range object. Вместо ключевых параметров в макросе подставляешь позиционные для харбора
Andrey: Pasha пишет: Вместо ключевых параметров в макросе подставляешь позиционные для харбора Не понимаю как это сделать....
Pasha: Внимательно читаем инструкцию expression.Replace(... expression - это Cells, в макросе - Cells.Replace. Cells - это oSheet:Cells т.е. пишем: oSheet:Cells:Replace далее в инструции: expression.Replace(What, параметр What в макросе - это What:=";" т.е. пишем на харборе: oSheet:Cells:Replace(";", затем таким же макаром подставляем остальные параметры
Andrey: Pasha пишет: oSheet:Cells:Replace(";", Вот это и не знал как сделать ! Спасибо БОЛЬШОЕ ! Работает отлично ! [pre2] oSheet:Cells:Replace(";","|",xlPart,xlByRows,.F.,.F.,.F.)[/pre2] Только кол-во замен нет. Хотя это и не особо важно...
Andrey: Что-то совсем забыл как работать с Экселем.... Нужно удалить целиком первую строку в экселе. Макрос такой: [pre2] Rows("1:1").Select Selection.Delete Shift:=xlUp[/pre2] Как его переделать на Харбор ? Заранее БОЛЬШОЕ СПАСИБО за помощь.
Pasha: смотрим пример из minigui: Tsb4csvOle.prg /* * MINIGUI - Harbour Win32 GUI library Demo * * Copyright 2018 Verchenko Andrey <verchenkoag@gmail.com> Dmitrov, Moscow region */ там в самом конце есть цикл с удалением строки: FOR nI := LEN(aLineDel) TO 1 STEP -1 nLine := aLineDel[nI] oSheet:Cells( nLine, 1 ):Value := nI oExcel:Rows(nLine):Delete() NEXT
Andrey: Pasha СПАСИБО БОЛЬШОЕ ! Памяти уже совсем нет...
alex_II: Как заполнить програмно ячейку, значение которой выбирается из выпадающего списка?
Dima: alex_II Макрос что нибудь полезное показывает ?
alex_II: Я ничего кроме автосуммы никогда не использовал
Dima: Какой формат ячейки или функцию какую нужно использовать для отображения штрих кода ? Пока добавляю в самом начале какой то символ что бы Excel не смог сделать ни каких преобразований. Например нужно отобразить вот такой штрих 4820015713872
Andrey: А разве Эксель может делать в ячейке штрих-код ? Наверное нужно делать картинку и потом прикреплять её в ячейку. Штрих-коды, включая Qr-код есть в МиниГуи
Dima: Andrey ты не понял нужно просто в ячейке написать 4820015713872 и все и что бы так и осталось , но Excel начинает что то придумывать и в итоге это число со степенью отображается
Andrey: Поставь знак "_" впереди
Dima: Andrey пишет: Поставь знак "_" впереди Dima пишет: Пока добавляю в самом начале какой то символ кароче вот
SergKis: Dima пишет Пока добавляю в самом начале какой то символ попробуй "не прерывный пробел" ' ', в xml excel отлично понимает, что до, что после нужного текста, держит длину в пробелах
Pasha: Дима, поставь формат ячейки текстовый. Excel воспринимает значение как число, в целый оно не помещается, он преобразует в double, и так и показывает. А так будет строка
Dima: Pasha пишет: Дима, поставь формат ячейки текстовый Конечно я пробовал , не работает. Сделал пока как советует выше M$ , перед таким текстом поставить ' , работает
MIKHAIL: Dima пишет: Конечно я пробовал , не работает. Если формат ячейки установлен текстовый и через VBA вставляешь текст, то и отображает как текст без преобразований А если формат общий, а вставляешь текст, то он приводит значение к числу со степенью и изменение формата после вставки не работает.
Dima: MIKHAIL Так уже разобрались Сохранение начальных нулей и больших чисел И в конце советуют Перед числом можно ввести апостроф ('), и Excel будет обрабатывать его как текст. , в этом случае самого апострофа не видно в ячейке MIKHAIL пишет: Если формат ячейки установлен текстовый и через VBA вставляешь текст, то и отображает как текст без преобразований Насчёт NumberFormat:="@" , мысль понял Что то я прозевал этот момент....
Dima: Добавил примечание к ячейке через AddComment() и заполнил его Шрифт примечания Consolas Текст внутри примечания это таблица рисованная с помощью псевдографики и всё как бы идеально , но есть небольшие но видимые разрывы псевдографики между строк. Каким образом уменьшить межстрочный интервал , программно.
Oskar_AAA: Всех с наступающим Новым Годом! Здоровья и благополучия!!! Нужно при открытии файла проверить на: 1- наличие пароля на книгу 2- наличие пароля на лист и снять пароли (пароли занесем в справочник) и как пароль передать в момент открытия файла Excel oExcel :Workbooks:Open(FileInput) необходимость снятия пароля обусловлена тем что, функция oRange :=oExcel:ActiveCell:SpecialCells(xlLastCell) cRecno :=oRange:Row cColumn :=oRange:Column не возвращает значения количество строк и количество столбцов на листе а нам нужны эти значения... Или есть функция, которая возвращает количество строк /столбцов/ на закрытом паролем листе /книге/?
Dima: Oskar_AAA пишет: oExcel :Workbooks:Open(FileInput) Попробуй так Workbooks:Unprotect:="твой пасс" ну или так Osheet:Unprotect:="твой пасс"
Oskar_AAA: При коде: oExcel :Workbooks:Open(FileInput) oExcel :Workbooks:Unprotect:="111" Ошибка: |Error Excel.Application:WORKBOOKS/14 DISP_E_BADPARAMCOUNT: _UNPROTECT Arguments| |: ( [ 1] = Type: C Val: 111)
Oskar_AAA: При коде: cSheets :=oExcel:WorkSheets:Count oSheet :=oBook :Sheets(cSheets-1) oBook :=oExcel:ActiveWorkBook oAs :=oExcel:ActiveSheet() oSheet :=oBook :Sheets(cSheets-1):Select() oSheet :=oBook :Sheets(cSheets-1) oSheet :=Unprotect:="111" oRange :=oExcel:ActiveCell:SpecialCells(xlLastCell) тут ошибка: |Error Excel.Application:ACTIVECELL/0 S_OK: SPECIALCELLS Arguments: ( [ 1] = Type: N Val: 11)
Oskar_AAA: пост 1762 от Andrey было oSheet:UsedRange:Columns:Count // количество столбцов сделал у себя аналогично: cRecno :=oSheet:UsedRange:Rows:Count cColumn:=oSheet:UsedRange:Columns:Count возвращает количество строк и столбцов на листе не зависимо от наличия пароля на листе.... то что нам нужно вместо oRange :=oExcel:ActiveCell:SpecialCells(xlLastCell)
Dima: Oskar_AAA А так ? oAS := oExcel:ActiveSheet() oAs:UnProtect( "password" )
Oskar_AAA: Спасибо, на днях попробуем ...
Oskar_AAA: Добрый день, требуется создать XML файл по заданной структуре. Данные мы формируем из БД с последующей записью в XLSX файл, меняем имена столбцов как требуется в XML.... Что и как дальше делать (желательно все преобразования провести в программе, консольный xHarbour)? Не хотелось бы нагружать Пользователя в премудрости конвертации в диалоговом режиме Excel. или есть конвертор, который по заданной схеме преобразует XLS(x) в XML?
Dima: Oskar_AAA Если есть структура XML , не вижу проблем сделать на уровне Harbour , нужное преобразование из XLS XML это текст (расширяемый язык разметки)
Oskar_AAA: Dima структура XML файла Формирование XML файла 1. При формировании файла все теги должны иметь открывающий и закрывающий тег <Products></Products> 2. В случае необязательных полей, тег можно удалить либо оставить пустым <WriteOffReasonCode></WriteOffReasonCode> 3. Поля необходимо заполнить согласно следующему порядку. • FacilityId • WriteOffReasonCode • Comment • AccountingSystemId o ProductId o UnitCode o Amount o Price MarkCode
SergKis: Oskar_AAA Поищите на форуме "xml по схеме" может что найдете для себя
Dima: Oskar_AAA Должно быть нормальное описание а не абы что Например вот от Пан Агента , описание XML (PLIST) https://fex.net/ru/s/4lampmp
Oskar_AAA: копия описания из MS Word Электронный формат документа ЭТТН по списанию I. ОБЩИЕ СВЕДЕНИЯ Настоящий документ описывает структуру XML файла (далее - файлам обмена) передачи сведений документа ЭТНН по списанию II. ОПИСАНИЕ ФАЙЛА ВЫГРУЗКИ Таблица 1 Элемент XML (Writeoff) Наименование элемента Сокращенное наименование (код) элемента Значение Версия файла FileVer Последняя версия элемента Тип файла InfoType Значение документа - Writeoff Документы ЭТТН оприходования Writeoffs Состав элемента представлен в табл. 2. Таблица 2 Элемент XML (Writeoff) Наименование элемента Сокращенное наименование (код) элемента Дополнительная информация Склад списания FacilityId GUID склада списания Код вида поставки DeliveryTypeCode Код из справочника “Виды поставок” Причина списания WriteOffReasonCode Код из справочника “Причина списания” Комментарий Comment Статус Status Числовое значение статуса Статус StatusText Текстовое значение статуса Номер документа в учетной системе AccountingSystemId GUID учетной системы Дата создания Created Дата подтверждения ConfirmDate Отображается, если статус “Подтвержден” Номер документа DocumentNumber Товары Products Состав элемента представлен в табл. 3 Таблица 3 Сведения о товарах для оприходования (WriteoffProduct) Наименование элемента Сокращенное наименование (код) элемента Дополнительная информация Идентификатор товара ProductId Код единицы измерения товара UnitCode Код из справочника “Единиц измерения” Количество товара Amount Цена товара Price Коды маркировки MarkCodes Список кодов маркировок Таблица 4 Сведения о кодах маркировки (MarkCodes) Наименование элемента Сокращенное наименование (код) элемента Дополнительная информация Код маркировки MarkCode Код маркировки
Dima: сомневаюсь что можно сделать XML из такого скудного описания формата
Sergy: Судя по всему, перед Oskar_AAA, стоит задача по формированию ЭДО из учетной системы. Предлагаю обсудить совместно в отдельной теме, тк задача актуальная и для меня тоже, да и к MS Excel имеет мало отношения, нужен чистый XML.
Dima: Sergy Я так понимаю должно быть нормальное описание структуры XML , каким оно примерно должно быть , я выложил выше ссылочку на доку из Пан Агента. Там все ясно и понятно и делал стыковку с этой прогой юзая ихнее руководство. Sergy пишет: Предлагаю обсудить совместно в отдельной теме, тк задача актуальная и для меня тоже, да и к MS Excel имеет мало отношения, нужен чистый XML. Заводи раз надо
Dima: Всем привет. Хотел разобраться с рядом контролов , но что то лыжи не едут. Может кто юзал и подскажет. Все вопросы в коментах сырца [pre2] #include "excel.ch" #translate CRLF => hb_OsNewLine() #define RGB( nR,nG,nB ) ( nR + ( nG * 256 ) + ( nB * 256 * 256 ) ) Local oExcel Local oSheet, oRange local btn local lb local macros:="" local cb REQUEST HB_CODEPAGE_RU1251 hb_cdpSelect( "RU1251" ) oExcel := win_OleCreateObject( "Excel.Application" ) oExcel:WorkBooks:Add() oSheet := oExcel:ActiveSheet oExcel:Visible := .t. oRange := oSheet:Range(oSheet:Cells(1,1), oSheet:Cells(2,3)) btn:= oExcel:ActiveSheet:Buttons:Add(oRange:Left,oRange:Top,oRange:Width,oRange:Height) WITH OBJECT btn :Caption:= "Кнопочка" :Name:= "Btn" :OnAction:="Btns" ENDWITH macros:='Private Sub btns()'+CRLF+'MsgBox("Hello Word")'+CRLF+'End Sub' /* пробую зашить макрос , ни чего не выходит , что не так делаю ? oSheet:VBProject:VBComponents("Лист1"):CodeModule:InsertLines(1, macros) oExcel:VBProject:VBComponents:Item("ThisWorkbook"):CodeModule:AddFromString (macros) */ lb:=oExcel:ActiveSheet:ListBoxes:Add(40, 42.6, 159.6, 54) WITH OBJECT lb :Name:="Test" :AddItem("111111") :AddItem({"222222","3333333"}) ENDWITH /* Как добраться к Properties контрола LB Например цвет фона сменить BackColor ? */ cb:=oExcel:ActiveSheet:DropDowns:Add(100, 100, 150, 15) WITH OBJECT cb :Caption:="Test 2" :AddItem({"11133333","33333333333","Проверка","Колбаса","8888888888"}) // :DropDownLines:=3 // кол-во видимых пунктов при нажатии // :Enabled:=.f. // lock ENDWITH * тут нет вопросов [/pre2]
Dima: Dima пишет: /* пробую зашить макрос , ни чего не выходит , что не так делаю ? oSheet:VBProject:VBComponents("Лист1"):CodeModule:InsertLines(1, macros) oExcel:VBProject:VBComponents:Item("ThisWorkbook"):CodeModule:AddFromString (macros) */ Вот так работает :) [pre2] owb:=oExcel:WorkBooks:Add() macros:='Private Sub btns()'+CRLF+'MsgBox("Hello Word")'+CRLF+'End Sub' hb_memowrit(hb_dirbase()+"test.bas",macros) owb:VBProject:VBComponents:import(hb_dirbase()+"test.bas") [/pre2] Правда в безопасности Excel надо включить Доверять доступ к объектной модели проектов VBA
Dima: Dima пишет: Как добраться к Properties контрола LB Например цвет фона сменить BackColor ? Нет там такого , смотрел не ту доку
полная версия страницы