Автор | Сообщение |
Dima
|
| |
Пост N: 2372
Зарегистрирован: 17.05.05
|
|
Отправлено: 21.05.12 16:52. Заголовок: Снова EXCEL
Ранее с 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
|
| Администратор
|
Пост 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 ); и далее заменить присваивание, то будет создаваться двумерный вариантный массив. Проблема в том, что в каких-то случаях нужен одномерный массив, а в каких-то - двумерный.
|
|
|
Haz
|
| |
Пост N: 738
Зарегистрирован: 20.02.11
|
|
Отправлено: 29.12.15 14:43. Заголовок: Pasha пишет: Пробле..
Pasha пишет: цитата: | Проблема в том, что в каких-то случаях нужен одномерный массив, а в каких-то - двумерный. |
| Паша, проблема в другом ... на форуме, почти для всех ( для многих точно ) все что написано выше цитируемой строки это китайская грамота PS. за упорство - спасибо. Будем хоть знать где это зло живет
|
|
|
Панченко
|
| |
Пост N: 100
Зарегистрирован: 13.06.12
|
|
Отправлено: 29.12.15 18:59. Заголовок: Pasha Так, может бы..
Pasha Так, может быть, имеет смысл оформить все это дело отдельной функцией?
|
|
|
Haz
|
| |
Пост N: 739
Зарегистрирован: 20.02.11
|
|
Отправлено: 29.12.15 20:01. Заголовок: Панченко пишет: Так..
Панченко пишет: цитата: | Так, может быть, имеет смысл оформить все это дело отдельной функцией? |
| Это пол OLE переписать
|
|
|
Панченко
|
| |
Пост N: 101
Зарегистрирован: 13.06.12
|
|
Отправлено: 29.12.15 21:35. Заголовок: Haz пишет: Это пол ..
Haz пишет: Pasha пишет: а остальное (как я понял) без изменений. Хотя не утверждаю, что прав. Если это большие трудозатраты, то действительно нет смысла. Будем продолжать работать через буфер обмена.
|
|
|
Pasha
|
| Администратор
|
Пост N: 3391
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.12.15 10:32. Заголовок: Чтобы не плодить тем..
Чтобы не плодить темы, задам маленький вопрос здесь: Open Office Calc Берем ячейку по номеру строки и столбца oCell := oSheet:getCellByPosition(nCol-1, nRow-1) А как теперь выбрать эту ячейку ? Что-то подобное на метод Select() для Excel ? Хочу затем вставить из буфера обмена фрагмент в данную ячейку.
|
|
|
Dima
|
| |
Пост N: 5447
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.12.15 11:09. Заголовок: Паша а там макросы е..
Паша а там макросы есть в Open Office Calc ? Можно с ним поиграться и посмотреть как выбрать ячейку.
|
|
|
Haz
|
| |
Пост N: 740
Зарегистрирован: 20.02.11
|
|
Отправлено: 30.12.15 11:21. Заголовок: Open Office Calc П..
Паша, а как в Excel не проходит ? у меня Open не установлен oCell := oSheet:Cells( 10, 2) oCell:Select()
|
|
|
Pasha
|
| Администратор
|
Пост N: 3393
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.12.15 11:22. Заголовок: Да там макросы не то..
Да там макросы не той системы. Фактически в ОО есть 2 структуры объектов, и запись макросов не дает тот результат, как в экселе.
|
|
|
Dima
|
| |
Пост N: 5448
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.12.15 11:32. Заголовок: Дернул в инете , не ..
Дернул в инете , не оно ? //позиционируемся на ячейке Reference< XCell > rCell = rSpSheet->getCellByPosition(x, y); //устанавливаем значение ячейки rCell->setValue(val);
|
|
|
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)
|
|
|
|
Pasha
|
| Администратор
|
Пост N: 3394
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.12.15 11:47. Заголовок: Это метод для записи..
Это метод для записи в ячейку, а не для выбора Вот нашел какой-то пример из Delphi, буду пробовать: ControlCell := Sheet.getCellByPosition(j, i); Document.CurrentController.Select(ControlCell);
|
|
|
Pasha
|
| Администратор
|
Пост N: 3395
Зарегистрирован: 23.05.05
|
|
Отправлено: 30.12.15 11:49. Заголовок: Haz Спасибо, похоже,..
Haz Спасибо, похоже, это то, что нужно
|
|
|
Sergy
|
| |
Пост N: 483
Зарегистрирован: 08.07.06
|
|
Отправлено: 02.01.16 12:11. Заголовок: Pasha пишет: И откл..
Pasha пишет: цитата: | И отключить автоматическое преобразование типов в Excel никак нельзя. |
| В Экселе всё можно. Сначала для ПУСТЫХ ячеек задать формат. Например, "числовой". Дальше туда пишем что нужно. Например, "07/03" по умолчанию дает у меня "07.мар", если ячейка перед этим была помечена как числовая - 2,33, если как текст - 07/03.
|
|
|
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} внутри функции меняет указатель (адрес) массива на новый. Если был переда адрес - вызывающий код не узнает об этом изменении. Если передать указатель на адрес - узнает.
|
|
|
Dima
|
| |
Пост N: 5455
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.01.16 11:42. Заголовок: Имеем ячейку с общим..
Имеем ячейку с общим форматом EXCEL Нужно сложить туда дату в формате DD.MM.YY , собственно так и ложу , но Ёксель преобразует значение к формату DD.MM.YYYY. Как не меняя формат ячейки сложить в нее значение в формате DD.MM.YY ?
|
|
|
Pasha
|
| Администратор
|
Пост N: 3399
Зарегистрирован: 23.05.05
|
|
Отправлено: 04.01.16 14:07. Заголовок: Наверное, только изм..
Наверное, только изменив региональные установки windows. Я искал ответ на этот вопрос: как отключить автоматическое преобразование типов в экселе. Нашел ссылку на страницу ms, где было написано английским по белому: никак. Сейчас я конечно эту ссылку не найду. То есть, надо только прямо указывать формат ячейки. Эксель умный, знает что надо делать лучше, чем мы.
|
|
|
Dima
|
| |
Пост N: 5456
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.01.16 14:14. Заголовок: Pasha пишет: Эксель..
Pasha пишет: цитата: | Эксель умный, знает что надо делать лучше, чем мы. |
| Понятно Просто я заполняю чужой бланк из Harbour и затем отсылаю его по почте из той же проги. В нем я должен только заполнять данные , не меняя форматы ячеек. Вероятно у получателя тоже есть автоматическая обработка бланка. На свой страх и риск заменил Общий формат на Текстовый , надеюсь его прога не слетит
|
|
|
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 и затем отсылаю его по почте из той же проги. В нем я должен только заполнять данные , не меняя форматы ячеек. Вероятно у получателя тоже есть автоматическая обработка бланка. На свой страх и риск заменил Общий формат на Текстовый , надеюсь его прога не слети |
| В данном случае, на первый взгляд, ничего менять не нужно. Дата - она в любом случае датой останется. Что в "общем" формате, что в "дате": Чтобы получить такое отображение, нужно задать формат ячейки "ДД.ММ.ГГ" вместо "ДД.ММ.ГГГГ" Неужели принимающая сторона сообщает об ошибках ?
|
|
|
Dima
|
| |
Пост N: 5457
Зарегистрирован: 17.05.05
|
|
Отправлено: 04.01.16 22:27. Заголовок: Sergy пишет: Неужел..
Sergy пишет: цитата: | Неужели принимающая сторона сообщает об ошибках ? |
| Пока нет , так как тестю :) Что касаемо картинки ....проделывал уже такой эксперимент , результат выше описал. PS Оффис 2003
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|