Автор | Сообщение |
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
[только новые]
|
|
Andrey
|
| постоянный участник
|
Пост N: 4421
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.07.15 23:15. Заголовок: Dima пишет: Sh..
Dima пишет: цитата: | Sheets("Лист1").Select Sheets("Лист1").Name = "XXX" |
| Спасибо ! Получилось ! Почту свою напомни ?
|
|
|
Andrey
|
| постоянный участник
|
Пост N: 4422
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.07.15 23:24. Заголовок: PSP пишет: А если с..
PSP пишет: цитата: | А если создать без номера версии, прочитать версию, закрыть, а потом создать с нужным номером? Понимаю, что не очень красиво, но, имхо, правильней, чем в реестре рыться. |
| Да не обязательно это делать ! Лист создаётся нормально, только при записи файла вылазит ОКНО-СОВМЕСТИМОСТИ ! Я для себя уже сделал проверку: IF nVerExcel > 11 // Excel 2003 // проверка совместимости на версиях старше 2003 // нельзя записать файл, так как вылазит ОКНО-СОВМЕСТИМОСТИ // из-за этого пускай юзер сам пишет файл lSave := .F. ENDIF
|
|
|
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 Нет ли какой настройки, чтобы формулы сохранялись ? Или без вариантов ?
|
|
|
Панченко
|
| |
Пост 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?
|
|
|
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
|
|
|
Панченко
|
| |
Пост N: 88
Зарегистрирован: 13.06.12
|
|
Отправлено: 25.12.15 09:17. Заголовок: Dima Может быть я н..
Dima Может быть я непонятно написал. Речь идет не о применении WITH или заполнении однрй строки. В моем примере заполняется весь прямоугольный диапазон ячеек за один раз за счет передачи в VALUE указателя на массив значений.
|
|
|
Dima
|
| |
Пост N: 5430
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.12.15 11:16. Заголовок: Панченко Смотри в э..
Панченко Смотри в этой теме пост 239 (от fil) и 3304 (от Pasha) Впрочем я показал тот же подход где VALUE присваивается массив
|
|
|
Панченко
|
| |
Пост N: 89
Зарегистрирован: 13.06.12
|
|
Отправлено: 25.12.15 13:09. Заголовок: Dima Эти сообщения ..
Dima Эти сообщения я видел. Везде речь идет о заполнении ОДНОЙ строки. В примере на ФОКСе заполняется НЕСКОЛЬКО строк и колонок, что дает значительное сокращение времени. Т.е.: oSheet:Range( oSheet:Cells(5,5),oSheet:Cells(10,70)):Value = ...
|
|
|
Панченко
|
| |
Пост N: 90
Зарегистрирован: 13.06.12
|
|
Отправлено: 25.12.15 13:11. Заголовок: Задача сводится к по..
Задача сводится к получению адреса массива. Кто знает С - подскажите, как должна выглядеть эта функция.
|
|
|
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: =твой массив
|
|
|
Панченко
|
| |
Пост N: 91
Зарегистрирован: 13.06.12
|
|
Отправлено: 25.12.15 13:44. Заголовок: Dima пишет: Думаю и..
Dima пишет: цитата: | Думаю и тут чудно сработает |
| Увы... Уже проверял - не работает, заполнения всего диапазона не происходит.
|
|
|
|
Dima
|
| |
Пост N: 5432
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.12.15 14:06. Заголовок: счас подумаем..
счас подумаем
|
|
|
Pasha
|
| Администратор
|
Пост N: 3383
Зарегистрирован: 23.05.05
|
|
Отправлено: 25.12.15 14:17. Заголовок: В харборе массив все..
В харборе массив всегда передается по адресу, так что его адрес получать не надо. Надо просто привоить ячейкам значение: <obj>:Value := aArray
|
|
|
Панченко
|
| |
Пост N: 92
Зарегистрирован: 13.06.12
|
|
Отправлено: 25.12.15 14:38. Заголовок: И в харборе и в фокс..
И в харборе, и в фоксе при присвоении :VALUE = aArray не заполняются 2, 3 и т.д. строки диапазона. В фоксе при присвоении :VALUE = <указатель на массив> все заполняется великолепно. Если же применить промежуточное присвоение типа <переменная> = <указатель на массив> :VALUE = <переменная> то получается заполнение то ли только первой строки, то ли все заполняется первым элементом массива - уже не помню. Кроме того, в функции, возвращающей указатель, массив должен быть виден (например, глобально). Хотел проверить это в харборе, но как получить указатель на массив? В С я "непонимэ".
|
|
|
fil
|
| |
Пост N: 387
Зарегистрирован: 17.06.10
|
|
Отправлено: 25.12.15 17:17. Заголовок: Считать в массив мож..
Считать в массив можно любой ранг из Excel, а вот писать только однострочный массив (по край мере не получилось) но всегда есть ADO..
|
|
|
Панченко
|
| |
Пост N: 93
Зарегистрирован: 13.06.12
|
|
Отправлено: 25.12.15 18:37. Заголовок: И все-таки, Си-шники..
И все-таки, Си-шники, может кто-нибудь набросать функцию, возвращающую указатель на массив по его имени?
|
|
|
Панченко
|
| |
Пост N: 94
Зарегистрирован: 13.06.12
|
|
Отправлено: 25.12.15 20:58. Заголовок: Может это и бессмысл..
Может это и бессмысленно, но нужна функция на С, на входе получающая массив (скажем R) и заканчивающаяся return &R. Увы, не знаю синтаксиса С.
|
|
|
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
|
|
|
Панченко
|
| |
Пост N: 95
Зарегистрирован: 13.06.12
|
|
Отправлено: 26.12.15 18:32. Заголовок: Dima пишет: Хочешь..
Dima пишет: цитата: | Хочешь сказать что это ты сам реально проверил ? |
| А в чем сомнения? Первый вариант работает во многих моих программах, давно и надежно. Что не так со вторым - я писал выше, что уже не помню. Сегодня специально проверил - весь диапазон заполняется значением первого элемента массива.
|
|
|
Панченко
|
| |
Пост N: 96
Зарегистрирован: 13.06.12
|
|
Отправлено: 26.12.15 18:43. Заголовок: Именно поэтому и пот..
Именно поэтому и потому, что на практике сталкивался с разными "чудесами" в разных языках, я и прошу пример функции на С, которая принимала бы aArray или "aArray" и возвращала бы (без всяких промежуточных присваиваний) &aArray. Хочу проверить в харборе вариант присваивания ...:Value := <имя_этой_фунции>(aArray /или "aArray"/). Можешь написать?
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|