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

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

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

Ответов - 100, стр: 1 2 3 4 5 All

Sergy: Dima пишет: Что касаемо картинки ....проделывал уже такой эксперимент , результат выше описал. Excel 2000 и 2010 при формате ДД.ММ.ГГ показывает все четко, год двумя цифрами. А вот если задать DD.MM.YY - любую дату преобразует в целое число (видно в строке формул вверху), а внутри ячейки пишет (дословно) "DD.MM.YY"

Oskar_AAA: Добрый день, коллеги. Программа на xHarbour, выгружаю файлы MS Excel, затем собираем в сводный отчет данные из выгруженных файлов MS Excel. Слетают настройки цветов и форматов в сводном отчете... Пробовал на разных версиях MS Excel, закономерности пока не нашел. Но на 1 ПК всегда выгружается без сбоев.Операционные системы на всех ПК - Win7, офис возможно разный... Что может быть в тонкостях настройки MS Excel? Всех со "Старым" Новым Годом!!!

Sadstar2016: Help me pls. Длительное время работает такая схема формирования отчета в Excel 1.Грузится xls-файл - образец с отформатированной шапкой (соответственно - нужные ширины столбцов) Чтобы не портить образец ( юзера всегда умудрятся его перезаписать) 2.Копируется лист 3.Создается новая книга. 4.Вставка в лист новой книги. 5.Добавление строк отчета в новую книгу oExcel:Workbooks:Open(cFile) oBook:=oExcel:ActiveWorkbook() oBook:Worksheets(1):Cells:Copy() oBookN:=oExcel:WorkBooks:Add() //новая пустая книга oSheet:=oBookN:Worksheets(1) oSheet:Paste() Вдруг с некоторых пор на одном рабочем месте перестали копироваться ширины столбцов. Пытался найти отличия в настройках Excel-я влияющие на режим копирования - не нашел. Второй вариант - принудительное копирование ширин столбцов. В макросе это выглядит так Cells.Select Selection.Copy Workbooks.Add ActiveSheet.Paste //вставка ширин столбцов Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Как последнюю строку макроса переписать в терминах Харбора?

Петр: Пробуйте так (не проверял) #define xlPasteColumnWidths 8 #define xlPasteSpecialOperationNone -4142 Paste := oExcel:ActiveSheet():PasteSpecial(xlPasteColumnWidths, xlPasteSpecialOperationNone, False, False)

Sadstar2016: Error 1559948/3 DISP_E_MEMBERNOTFOUND: PASTESPECIAL похоже - не находит метод PASTESPECIAL P.S. без ошибок прошло oSheet:Cells:PasteSpecial(xlPasteColumnWidths, xlPasteSpecialOperationNone, .f., .F.)

Петр: Sadstar2016 пишет: без ошибок прошло oSheet:Cells:PasteSpecial(xlPasteColumnWidths, xlPasteSpecialOperationNone, .f., .F.) Ну да, поскольку PasteSpecial в Excel метод обьекта Range, Cells: там нужен oExcel:ActiveSheet():Cells:PasteSpecial Петр пишет: Пробуйте так (не проверял) Но вы не об этом и спрашивали Как я понял, суть вопроса - как преобразовать вызов метода, а не к чему этот метод применить

MIKHAIL: Sadstar2016 пишет: 1.Грузится xls-файл - образец с отформатированной шапкой (соответственно - нужные ширины столбцов) Чтобы не портить образец ( юзера всегда умудрятся его перезаписать) Может проще скопировать файл шаблона и работать с ним?

Sadstar2016: IMHO - пусть юзер сам решает - где и под каким именем хранить файл - если его вообще нужно хранить

fil: На листе Excel создаю кнопку oExc:Sheets(1):Buttons:Add(120, 20+30*(cnt-1), 350, 22) и указываю макрос, который должен выполниться при клике на этой кнопке oExc:Sheets(1):Buttons(cnt):OnAction:="Макрос1" А как можно сделать вызов этого макроса с параметром ?

fil: Параметр, видимо, передать нельзя. Но можно использовать свойство кнопки Parameter, а в макросе поймать эту кнопку через Caller

TimTim: Нужно из xHarboura при заполнении Excel-файла задать формат поля "Денежный". Офис 2013. При вводе туда числа должен появляться символ ₽ ( Unicode 20BD ). Если сделать в самом Excel формат ячейки "Денежный" то все нормально. Кстати, этот новый символ рубля сидит на Правом Alt + 8. Попробовал вставить формат, который выдает макрос: Selection.NumberFormat = "#,##0.00 $" Переделал под xHarbour: NumberFormat := '# ##0,00 $ ' Добавляется только символ доллара в конце, что навело на мысль попробовать формат '# ##0,00 p.' с английской p, или HB_OemToAnsi( '# ##0,00 руб.' ). Все получилось, буковки появляются, числа можно складывать и т.д. Но все-таки, как быть с символом ₽?

Haz: TimTim пишет: Попробовал вставить формат, который выдает макрос: Selection.NumberFormat = "#,##0.00 $" макрос выдает другой формат при выборе значка рубля Selection.NumberFormat = "#,##0.00 [$?-419]" но OLE это тоже не понимает

Andrey: Всем привет ! Использую Ms Офис 2003 SP3. Периодически появляется дурацкая табличка: Как от неё избавиться ? Есть ли какой то флаг для этого сообщения ?

Dima: Andrey Погугли

Andrey: Dima пишет: Погугли Ничего для себя не нашёл. Методом проб и ошибок выяснил - неправильную работу в МиниГуи функции oBrw:Excel2(...) при вот вот таком формате вывода в Эксель: oBrw:aColumns[nJ]:cDataType := 'N' oBrw:aColumns[nJ]:cPicture := '99:99' Как исправить ?

Andrey: Обрезает нули в Екселе для текстового формата. Вывожу текстовые данные поля бд в ячейку - типа "0000345", указываю в ячейке формат: oSheet:Cells( nLine, nI ):SET( "NumberFormat", '@' ) // текстовая ячейка Как избавиться от обрезания ?

Dima: Поставь формат что то типа 0000000000 Где кол-во нулей равно длине строки в твоем случае 0000000

Andrey: Dima пишет: Поставь формат что то типа 0000000000 Спасибо ! Но тогда разрушается универсальность функции перекодировки Dbf->Xls. Текстовые данные могут быть разными. Я у себя делаю так: ............ cPole := aField[ nI , 1 ] xValue := FIELDGET( FIELDNUM( cPole ) ) // значени полей DBF nDecPole := FieldDec( FIELDNUM( cPole ) ) // для формата числа oSheet:Cells( nLine, nI ):Value := xValue IF FIELDTYPE( cPole ) == "C" oSheet:Cells( nLine, nI ):SET( "NumberFormat", '@' ) // текстовая ячейка ELSEIF FIELDTYPE( cPole ) == "N" IF nDecPole == 0 // значит целое число oSheet:Cells( nLine, nI ):SET( 'NumberFormat', '## ### ###0' ) // числовая ячейка ELSE oSheet:Cells( nLine, nI ):SET( 'NumberFormat', '## ### ###0,00' ) // числовая ячейка ENDIF ELSEIF FIELDTYPE( cPole ) == "D" oSheet:Cells( nLine, nI ):SET( "NumberFormat", 'm/d/yy' ) // дата ячейка ELSE oSheet:Cells( nLine, nI ):SET( "NumberFormat", '@' ) // текстовая ячейка ENDIF .....

Dima: Andrey Тогда читай https://support.office.com/ru-ru/article/%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0-%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85-%D0%BD%D1%83%D0%BB%D0%B5%D0%B9-%D0%B8-%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C-%D1%86%D0%B8%D1%84%D1%80%D0%BE%D0%B2%D1%8B%D1%85-%D0%BA%D0%BE%D0%B4%D0%BE%D0%B2-57f15d52-5c75-4a67-ad35-394ae944d347

Dima: Andrey пишет: IF FIELDTYPE( cPole ) == "C" oSheet:Cells( nLine, nI ):SET( "NumberFormat", '@' ) // текстовая ячейка а вот тут нужна доп проверка а не цифры ли там одни живут и если так то NumberFormat будет другим. PS По ходу не нашел (может искал плохо или еще что ) такой функции "а не цифры ли там одни живут" , так что придется лепить свою.



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