On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
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 [только новые]


Andrey
постоянный участник




Пост N: 4421
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.07.15 23:15. Заголовок: Dima пишет: Sh..


Dima пишет:

 цитата:
Sheets("Лист1").Select
Sheets("Лист1").Name = "XXX"



Спасибо ! Получилось !

Почту свою напомни ?



Спасибо: 0 
Профиль
Andrey
постоянный участник




Пост N: 4422
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.07.15 23:24. Заголовок: PSP пишет: А если с..


PSP пишет:

 цитата:
А если создать без номера версии, прочитать версию, закрыть, а потом создать с нужным номером? Понимаю, что не очень красиво, но, имхо, правильней, чем в реестре рыться.



Да не обязательно это делать !
Лист создаётся нормально, только при записи файла вылазит ОКНО-СОВМЕСТИМОСТИ !
Я для себя уже сделал проверку:
IF nVerExcel > 11 // Excel 2003
// проверка совместимости на версиях старше 2003
// нельзя записать файл, так как вылазит ОКНО-СОВМЕСТИМОСТИ
// из-за этого пускай юзер сам пишет файл
lSave := .F.
ENDIF



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




Пост N: 3338
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 21.08.15 10:40. Заголовок: Если при заполнении ..


Если при заполнении строки листа значениями из массива командой

oSheet:Range(oSheet:Cells(nRow, nCol), oSheet:Cells(nRow, nCol2)):Value := aArray

внутри строки есть формулы, то эти формулы сносятся, даже если в соответствующей позиции aArray находится значение nil
Нет ли какой настройки, чтобы формулы сохранялись ? Или без вариантов ?

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





Пост N: 87
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 24.12.15 20:35. Заголовок: В Foxpro есть следую..


В Foxpro есть следующая полезная фишка по быстрому заполнению области листа данными из массива с использованием указателя на него:

aArray[ nRow, nCol ] - массив данных

WITH oEcel 
.WorkBooks.Add
.Range(.Cells(x,y), .Cells(x+nRow-1,y+nCol-1)).Value=GetPtr("aArray")
ENDWITH
. . .
Function GetPtr(cArrName)
Return @&cArrName

Очень удобно и быстро. Как добиться аналогичного результата в Harbour?


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




Пост N: 5429
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.12.15 22:22. Заголовок: Панченко oSheet:Ra..


Панченко
 
oSheet:Range(osheet:cells(i,1),osheet:cells(i,15)):Value:=;
{elem[1],elem[2],elem[3],elem[4],elem[5],elem[6],elem[7],;
elem[8],elem[9],elem[10],elem[11],elem[12],elem[13],elem[14],dtoc(elem[15])}

Выдрал у себя из сырца , думаю понятно.

Впрочем можно и через WITH oEcel

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





Пост N: 88
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 25.12.15 09:17. Заголовок: Dima Может быть я н..


Dima
Может быть я непонятно написал. Речь идет не о применении WITH или заполнении однрй строки. В моем примере заполняется весь прямоугольный диапазон ячеек за один раз за счет передачи в VALUE указателя на массив значений.

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




Пост N: 5430
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.12.15 11:16. Заголовок: Панченко Смотри в э..


Панченко
Смотри в этой теме пост 239 (от fil) и 3304 (от Pasha)
Впрочем я показал тот же подход где VALUE присваивается массив

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





Пост N: 89
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 25.12.15 13:09. Заголовок: Dima Эти сообщения ..


Dima
Эти сообщения я видел. Везде речь идет о заполнении ОДНОЙ строки. В примере на ФОКСе заполняется НЕСКОЛЬКО строк и колонок, что дает значительное сокращение времени.
Т.е.:
oSheet:Range( oSheet:Cells(5,5),oSheet:Cells(10,70)):Value = ...


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





Пост N: 90
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 25.12.15 13:11. Заголовок: Задача сводится к по..


Задача сводится к получению адреса массива. Кто знает С - подскажите, как должна выглядеть эта функция.

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




Пост N: 5431
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.12.15 13:42. Заголовок: Панченко пишет: oSh..


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

 цитата:
oSheet:Range( oSheet:Cells(5,5),oSheet:Cells(10,70)):Value = ...


Думаю и тут чудно сработает
oSheet:Range( oSheet:Cells(5,5),oSheet:Cells(10,70)):Value: =твой массив


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





Пост N: 91
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 25.12.15 13:44. Заголовок: Dima пишет: Думаю и..


Dima пишет:

 цитата:
Думаю и тут чудно сработает


Увы... Уже проверял - не работает, заполнения всего диапазона не происходит.

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




Пост N: 5432
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.12.15 14:06. Заголовок: счас подумаем..


счас подумаем

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




Пост N: 3383
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 25.12.15 14:17. Заголовок: В харборе массив все..


В харборе массив всегда передается по адресу, так что его адрес получать не надо.
Надо просто привоить ячейкам значение:
<obj>:Value := aArray

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





Пост N: 92
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 25.12.15 14:38. Заголовок: И в харборе и в фокс..


И в харборе, и в фоксе при присвоении :VALUE = aArray не заполняются 2, 3 и т.д. строки диапазона.

В фоксе при присвоении :VALUE = <указатель на массив> все заполняется великолепно. Если же применить промежуточное присвоение типа
<переменная> = <указатель на массив>
:VALUE = <переменная>
то получается заполнение то ли только первой строки, то ли все заполняется первым элементом массива - уже не помню.
Кроме того, в функции, возвращающей указатель, массив должен быть виден (например, глобально).

Хотел проверить это в харборе, но как получить указатель на массив? В С я "непонимэ".

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



Пост N: 387
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 25.12.15 17:17. Заголовок: Считать в массив мож..


Считать в массив можно любой ранг из Excel, а вот писать только однострочный массив
(по край мере не получилось) но всегда есть ADO..

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





Пост N: 93
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 25.12.15 18:37. Заголовок: И все-таки, Си-шники..


И все-таки, Си-шники, может кто-нибудь набросать функцию, возвращающую указатель на массив по его имени?

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





Пост N: 94
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 25.12.15 20:58. Заголовок: Может это и бессмысл..


Может это и бессмысленно, но нужна функция на С, на входе получающая массив (скажем R) и заканчивающаяся return &R. Увы, не знаю синтаксиса С.

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




Пост N: 5434
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 26.12.15 14:40. Заголовок: Панченко Хочешь ска..


Панченко
Хочешь сказать что это ты сам реально проверил ?
То есть вот так в Фоксе сработает правильно
.Range(.Cells(x,y), .Cells(x+nRow-1,y+nCol-1)).Value=GetPtr("aArray")
А вот так уже нет
.Range(.Cells(x,y), .Cells(x+nRow-1,y+nCol-1)).Value=aArray

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





Пост N: 95
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 26.12.15 18:32. Заголовок: Dima пишет: Хочешь..


Dima пишет:

 цитата:

Хочешь сказать что это ты сам реально проверил ?


А в чем сомнения? Первый вариант работает во многих моих программах, давно и надежно. Что не так со вторым - я писал выше, что уже не помню. Сегодня специально проверил - весь диапазон заполняется значением первого элемента массива.

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





Пост N: 96
Зарегистрирован: 13.06.12
ссылка на сообщение  Отправлено: 26.12.15 18:43. Заголовок: Именно поэтому и пот..


Именно поэтому и потому, что на практике сталкивался с разными "чудесами" в разных языках, я и прошу пример функции на С, которая принимала бы aArray или "aArray" и возвращала бы (без всяких промежуточных присваиваний) &aArray.
Хочу проверить в харборе вариант присваивания ...:Value := <имя_этой_фунции>(aArray /или "aArray"/).
Можешь написать?

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