On-line: tnsr2, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
Dima
администратор




Пост N: 2372
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.05.12 16:52. Заголовок: Снова EXCEL


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

Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]


Pasha
Администратор




Пост N: 3390
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.12.15 13:17. Заголовок: Нашел я в коде это м..


Нашел я в коде это место:

Строки 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 );

и далее заменить присваивание, то будет создаваться двумерный вариантный массив.

Проблема в том, что в каких-то случаях нужен одномерный массив, а в каких-то - двумерный.


Спасибо: 0 
Профиль
Haz
администратор




Пост N: 738
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 29.12.15 14:43. Заголовок: Pasha пишет: Пробле..


Pasha пишет:

 цитата:
Проблема в том, что в каких-то случаях нужен одномерный массив, а в каких-то - двумерный.


Паша, проблема в другом ...
на форуме, почти для всех ( для многих точно ) все что написано выше цитируемой строки это китайская грамота

PS. за упорство - спасибо. Будем хоть знать где это зло живет

Спасибо: 0 
Профиль
Панченко





Пост N: 100
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 29.12.15 18:59. Заголовок: Pasha Так, может бы..


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

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 739
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 29.12.15 20:01. Заголовок: Панченко пишет: Так..


Панченко пишет:

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



Это пол OLE переписать

Спасибо: 0 
Профиль
Панченко





Пост N: 101
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 29.12.15 21:35. Заголовок: Haz пишет: Это пол ..


Haz пишет:

 цитата:
Это пол OLE переписать


Pasha пишет:

 цитата:
Строки 712-720


а остальное (как я понял) без изменений. Хотя не утверждаю, что прав. Если это большие трудозатраты, то действительно нет смысла. Будем продолжать работать через буфер обмена.

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3391
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.12.15 10:32. Заголовок: Чтобы не плодить тем..


Чтобы не плодить темы, задам маленький вопрос здесь:

Open Office Calc

Берем ячейку по номеру строки и столбца
oCell := oSheet:getCellByPosition(nCol-1, nRow-1)

А как теперь выбрать эту ячейку ? Что-то подобное на метод Select() для Excel ?
Хочу затем вставить из буфера обмена фрагмент в данную ячейку.

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 5447
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.12.15 11:09. Заголовок: Паша а там макросы е..


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

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 740
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.12.15 11:21. Заголовок: Open Office Calc П..



 цитата:
Open Office Calc


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


Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3393
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.12.15 11:22. Заголовок: Да там макросы не то..


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

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 5448
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 30.12.15 11:32. Заголовок: Дернул в инете , не ..


Дернул в инете , не оно ?

//позиционируемся на ячейке
Reference< XCell > rCell = rSpSheet->getCellByPosition(x, y);

//устанавливаем значение ячейки
rCell->setValue(val);

Спасибо: 0 
Профиль
Haz
администратор




Пост N: 741
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.12.15 11:46. Заголовок: так работает ..


так работает


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)


Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3394
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.12.15 11:47. Заголовок: Это метод для записи..


Это метод для записи в ячейку, а не для выбора

Вот нашел какой-то пример из Delphi, буду пробовать:

ControlCell := Sheet.getCellByPosition(j, i);
Document.CurrentController.Select(ControlCell);


Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3395
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 30.12.15 11:49. Заголовок: Haz Спасибо, похоже,..


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

Спасибо: 0 
Профиль
Sergy





Пост N: 483
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 02.01.16 12:11. Заголовок: Pasha пишет: И откл..


Pasha пишет:

 цитата:
И отключить автоматическое преобразование типов в Excel никак нельзя.


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

Спасибо: 0 
Профиль
Sergy





Пост N: 484
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 02.01.16 13:09. Заголовок: Панченко пишет: С ин..


Панченко пишет:
 цитата:
С интерпретацией этого значения в харборе вопросов не возникает.

Тоже не совсем так. Имеем массив 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} внутри функции меняет указатель (адрес) массива на новый. Если был переда адрес - вызывающий код не узнает об этом изменении. Если передать указатель на адрес - узнает.


Спасибо: 0 
Профиль
Dima
администратор




Пост N: 5455
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.01.16 11:42. Заголовок: Имеем ячейку с общим..


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

Спасибо: 0 
Профиль
Pasha
Администратор




Пост N: 3399
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.01.16 14:07. Заголовок: Наверное, только изм..


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

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 5456
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.01.16 14:14. Заголовок: Pasha пишет: Эксель..


Pasha пишет:

 цитата:
Эксель умный, знает что надо делать лучше, чем мы.



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

Спасибо: 0 
Профиль
Sergy





Пост N: 485
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 04.01.16 22:19. Заголовок: Dima пишет: Имеем я..


Dima пишет:

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

Dima пишет:

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


В данном случае, на первый взгляд, ничего менять не нужно.
Дата - она в любом случае датой останется. Что в "общем" формате, что в "дате":



Чтобы получить такое отображение, нужно задать формат ячейки "ДД.ММ.ГГ" вместо "ДД.ММ.ГГГГ"
Неужели принимающая сторона сообщает об ошибках ?

Спасибо: 0 
Профиль
Dima
администратор




Пост N: 5457
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.01.16 22:27. Заголовок: Sergy пишет: Неужел..


Sergy пишет:

 цитата:
Неужели принимающая сторона сообщает об ошибках ?


Пока нет , так как тестю :)
Что касаемо картинки ....проделывал уже такой эксперимент , результат выше описал.

PS
Оффис 2003

Спасибо: 0 
Профиль
Ответов - 300 , стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 278
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет