Форум » [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

Pasha: Нашел я в коде это место: Строки 712-720 из contrib\hbwin\olecore.c: SAFEARRAYBOUND sabound[ 1 ]; HB_SIZE n, nLen; nLen = hb_arrayLen( pItem ); sabound[ 0 ].lLbound = 0; sabound[ 0 ].cElements = ( long ) nLen; pSafeArray = SafeArrayCreate( VT_VARIANT, 1, sabound ); если заменить на что-то вроде: SAFEARRAYBOUND sabound[ 2 ]; HB_SIZE n, nLen1, nLen2; nLen1 = hb_arrayLen( pItem ); nLen2 = ... sabound[ 0 ].lLbound = 0; sabound[ 0 ].cElements = ( long ) nLen1; sabound[ 1 ].lLbound = 0; sabound[ 1 ].cElements = ( long ) nLen2; pSafeArray = SafeArrayCreate( VT_VARIANT, 2, sabound ); и далее заменить присваивание, то будет создаваться двумерный вариантный массив. Проблема в том, что в каких-то случаях нужен одномерный массив, а в каких-то - двумерный.

Haz: Pasha пишет: Проблема в том, что в каких-то случаях нужен одномерный массив, а в каких-то - двумерный. Паша, проблема в другом ... на форуме, почти для всех ( для многих точно ) все что написано выше цитируемой строки это китайская грамота PS. за упорство - спасибо. Будем хоть знать где это зло живет

Панченко: Pasha Так, может быть, имеет смысл оформить все это дело отдельной функцией?


Haz: Панченко пишет: Так, может быть, имеет смысл оформить все это дело отдельной функцией? Это пол OLE переписать

Панченко: Haz пишет: Это пол OLE переписать Pasha пишет: Строки 712-720 а остальное (как я понял) без изменений. Хотя не утверждаю, что прав. Если это большие трудозатраты, то действительно нет смысла. Будем продолжать работать через буфер обмена.

Pasha: Чтобы не плодить темы, задам маленький вопрос здесь: Open Office Calc Берем ячейку по номеру строки и столбца oCell := oSheet:getCellByPosition(nCol-1, nRow-1) А как теперь выбрать эту ячейку ? Что-то подобное на метод Select() для Excel ? Хочу затем вставить из буфера обмена фрагмент в данную ячейку.

Dima: Паша а там макросы есть в Open Office Calc ? Можно с ним поиграться и посмотреть как выбрать ячейку.

Haz: Open Office Calc Паша, а как в Excel не проходит ? у меня Open не установлен oCell := oSheet:Cells( 10, 2) oCell:Select()

Pasha: Да там макросы не той системы. Фактически в ОО есть 2 структуры объектов, и запись макросов не дает тот результат, как в экселе.

Dima: Дернул в инете , не оно ? //позиционируемся на ячейке Reference< XCell > rCell = rSpSheet->getCellByPosition(x, y); //устанавливаем значение ячейки rCell->setValue(val);

Haz: так работает IF ( oServiceManager := win_oleCreateObject( "com.sun.star.ServiceManager" ) ) != NIL oDesktop := oServiceManager:createInstance( "com.sun.star.frame.Desktop" ) oDoc := oDesktop:loadComponentFromURL( "private:factory/scalc", "_blank", 0, {} ) oSheet := oDoc:getSheets:getByIndex( 0 ) ControlCell := oSheet:getCellByPosition(5, 10) oDoc:CurrentController:Select(ControlCell)

Pasha: Это метод для записи в ячейку, а не для выбора Вот нашел какой-то пример из Delphi, буду пробовать: ControlCell := Sheet.getCellByPosition(j, i); Document.CurrentController.Select(ControlCell);

Pasha: Haz Спасибо, похоже, это то, что нужно

Sergy: Pasha пишет: И отключить автоматическое преобразование типов в Excel никак нельзя. В Экселе всё можно. Сначала для ПУСТЫХ ячеек задать формат. Например, "числовой". Дальше туда пишем что нужно. Например, "07/03" по умолчанию дает у меня "07.мар", если ячейка перед этим была помечена как числовая - 2,33, если как текст - 07/03.

Sergy: Панченко пишет: С интерпретацией этого значения в харборе вопросов не возникает. Тоже не совсем так. Имеем массив r := { 1, 2, 3, 4, 5 } и функции function fun1( arr ) arr[ 5 ] := 9 return nil function fun2( arr ) arr := { 7, 8, 9 } return nil Если fun1( r ) и fun1( @r ) дают одинаковый результат, то fun2( r ) и fun2( @r ) - разный. Несмотря на то, что Pasha пишет: В харборе массивы и так передаются по ссылке. fun2(r) - передача оригинального массива в виде его адреса. fun2(@r) - передача указателя на адрес оригинального массива. Команда arr := {7, 8, 9} внутри функции меняет указатель (адрес) массива на новый. Если был переда адрес - вызывающий код не узнает об этом изменении. Если передать указатель на адрес - узнает.

Dima: Имеем ячейку с общим форматом EXCEL Нужно сложить туда дату в формате DD.MM.YY , собственно так и ложу , но Ёксель преобразует значение к формату DD.MM.YYYY. Как не меняя формат ячейки сложить в нее значение в формате DD.MM.YY ?

Pasha: Наверное, только изменив региональные установки windows. Я искал ответ на этот вопрос: как отключить автоматическое преобразование типов в экселе. Нашел ссылку на страницу ms, где было написано английским по белому: никак. Сейчас я конечно эту ссылку не найду. То есть, надо только прямо указывать формат ячейки. Эксель умный, знает что надо делать лучше, чем мы.

Dima: Pasha пишет: Эксель умный, знает что надо делать лучше, чем мы. Понятно Просто я заполняю чужой бланк из Harbour и затем отсылаю его по почте из той же проги. В нем я должен только заполнять данные , не меняя форматы ячеек. Вероятно у получателя тоже есть автоматическая обработка бланка. На свой страх и риск заменил Общий формат на Текстовый , надеюсь его прога не слетит

Sergy: Dima пишет: Имеем ячейку с общим форматом EXCEL Нужно сложить туда дату в формате DD.MM.YY , собственно так и ложу , но Ёксель преобразует значение к формату DD.MM.YYYY. Как не меняя формат ячейки сложить в нее значение в формате DD.MM.YY ? Dima пишет: Просто я заполняю чужой бланк из Harbour и затем отсылаю его по почте из той же проги. В нем я должен только заполнять данные , не меняя форматы ячеек. Вероятно у получателя тоже есть автоматическая обработка бланка. На свой страх и риск заменил Общий формат на Текстовый , надеюсь его прога не слети В данном случае, на первый взгляд, ничего менять не нужно. Дата - она в любом случае датой останется. Что в "общем" формате, что в "дате": Чтобы получить такое отображение, нужно задать формат ячейки "ДД.ММ.ГГ" вместо "ДД.ММ.ГГГГ" Неужели принимающая сторона сообщает об ошибках ?

Dima: Sergy пишет: Неужели принимающая сторона сообщает об ошибках ? Пока нет , так как тестю :) Что касаемо картинки ....проделывал уже такой эксперимент , результат выше описал. PS Оффис 2003



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