BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Главная  / Поддержка  / Форум  / Публичные форумы  / Программирование приложений  / Требуется работа с EXEL файлами из Б-5

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Требуется работа с EXEL файлами из Б-5
 
Есть файл EXEL. В нем есть 5(n) ячеек от которых зависят значения остальных (Т.е. меняем в какой-либо из этих 5ти ячеек значения в остальных происходят изменения).
Стоит такая задача:
1. Пользователь вводит 5ть(n) параметров.
2. Копируем Exel файл, называем по-новому.
3. Вносим в те 5ть (n) ячеек данные пользователя.
4. Необходимо, чтобы изменения проризошли и в остальных ячейках, зависящих от "главных".
5. По необходимости пользователь из бест открывает файл EXEL в программе Exel для печати.

Подскажите, пожалуйста, каким образом реализовать 3,4 и 5 с условием, что даже если и вызывается EXEL, то пользователь никаких действий, кроме печати не совершает?
(Возможно ли такое?)

Например,
1. ячейки в файле изменяют значения (как я понимаю это произойти должно без привлечения самой программы EXEL)
2. Затем файл открывается в EXEL, запускается макрос, который "заставит" изменить, затем файл сохраняется.
Изменено: Саак Шахламджян - 20.08.2008 21:08:44
 
Не совсем понятно о чем речь.
Вы из плагина открываете Excel ?
Если из плагина, то Excel умеет защищать лист на изменение. Вам в плагине надо только дописать после внесения изменений защиту листа.
Если Вы открываете по-другому, то БЭСТ Вам ничем не поможет....
 
Цитата
nordk пишет:
Вы из плагина открываете Excel ?

Я ничего не открываю, но очень бы хотелось. О каком плагине идет речь?
Просто есть exel-файл. Надо поменять там значения, открыть файл в exel и запустить макрос (сделать это в Б-5 доп функцией)... Я вообще кроме как CreateObject( "Excel.Application" ) не имею представления о том как делать Импор\экспорт данных в\из эксель таблиц. Не отказался бы от информации на эту тему, или хотя бы от конкретных функций\классов, которые мне потребовались бы.
Изменено: Саак Шахламджян - 20.08.2008 23:01:09
 
Там чего-то супер особого нет. В старом форуме есть пример работы из харбора с Excel. Особенности открытия объекта в БЭСТ-5 есть на этом - недавно тема была.
Дальше пишете в харборе на скрипте Visual Basic. Скрипт предполагает несколько отличный синтаксис и принцип написания а так все тоже самое почти...
Есть предложение сначала ознакомиться с материалом и подозреваю Вопросы врядли будут. Макрос прямо в плагин перепишите...А вообще нужен ли Вам именно Excel - может экраны средствами БЭСТа лучше нарисовать ?
Не знаю Вашей задачи...
 
Цитата
nordk пишет:
Там чего-то супер особого нет. В старом форуме есть пример работы из харбора с Excel. Особенности открытия объекта в БЭСТ-5 есть на этом - недавно тема была.
Дальше пишете в харборе на скрипте Visual Basic. Скрипт предполагает несколько отличный синтаксис и принцип написания а так все тоже самое почти...
Есть предложение сначала ознакомиться с материалом и подозреваю Вопросы врядли будут. Макрос прямо в плагин перепишите...А вообще нужен ли Вам именно Excel - может экраны средствами БЭСТа лучше нарисовать ?
Не знаю Вашей задачи...

Было бы просто супер БЕСТом все сделать. Ситуация следущая:
На предприятии уже давным давно чертежи многих типов изделий есть в EXEL. Меняем там ячейки, отвечающие за размер, получаем новый чертеж на новое изделие новых размеров.
 
Ну да - тогда посмотрите как мы открываем и работаем с Exel на старом форуме есть пример.
Потом по образцу и подобию трансформируйте макросы Excel в харбор...
Когда непонятно что вернет та или иная запись ее можно пробовать в отладчике в командном окне - если не отрабатывает (некорректен синтаксис и т.п., то будет писать что не знаю такой объект - что-то типа)
и еще для плагина не забудьте подключить excel.ch
 
Цитата
nordk пишет:
Ну да - тогда посмотрите как мы открываем и работаем с Exel на старом форуме есть пример.Потом по образцу и подобию трансформируйте макросы Excel в харбор...Когда непонятно что вернет та или иная запись ее можно пробовать в отладчике в командном окне - если не отрабатывает (некорректен синтаксис и т.п., то будет писать что не знаю такой объект - что-то типа)и еще для плагина не забудьте подключить excel.ch

Спасибо! Буду ковырять!
 
Пример на старом форуме нашёл (Считать данные из Excel'я), но не получается даже "запустить" Exel :(
На oApp := CreateObject( "Excel.Application" ) ругань, что нет такой функции, явно упускаю что-то важное и простое из виду...
 
Цитата
Саак Шахламджян пишет:
Пример на старом форуме нашёл ( Считать данные из Excel'я ), но не получается даже "запустить" Exel :(
На oApp := CreateObject( "Excel.Application" ) ругань, что нет такой функции, явно упускаю что-то важное и простое из виду...

Вопрос снят, нашёл пример для Б-5 (CreateObject в Б5).
Думается, вопросов будет больше по тому самому скриптовому языку VB (да и вообще по классу Excel.Application), там чистый VB? Можно, в принципе уже начинать искать описание синтаксиса этого языка и пользоваться ими или лучше все же дергать куски из примеров, приведенных на форумах?
Изменено: Саак Шахламджян - 21.08.2008 01:16:43
 
Берите макрос Excel и переписывайте его в БЭСТ, по ходу смотрите в отладчике, что не будет получаться - посмотрим...

Для начала учитывайте всего 2 правила:
- вместо . ставим :
- в конце команд должны быть () - образец объединение ячеек (сравните скрипт макроса EXCEL и БЭСТа по объединению ячеек)
 
Выгрузка данных в Exel.
Очень хочется при выгрузке длинных текстовых строк, чтобы они в одной ячейке переносились.
Поставил символ окнчания строки (как в файле .txt формата), exel переносит, однако там появляется некрасивый символ. (м\б нужен другой символ?)
М\б есть номальный способ "заставить" Exel делать перенос строки, если она не помещается в колонку по ширине?
Код
Local cString1:="Одна маленькая строка",cString,nEnd:=2573
cString:=cString1+W2bin(nEnd)
 cString+=cString1
........
 oAS:Range("A2"):formula:=cString
//Пример из справочника к Б-4. oemtoansi() не пригодилось

Правда, как я понял запись oAS:Range("A2") - это запись в конкретную ячейку.
А запись вида
Код
oAS:Cells(nLine,1):Value:=HB_OEMTOANSI(Dt_Schet) oAS:Cells(nLine,1):NumberFormat:="@"  

Запись в ячейку по номеру столбца, номеру ячейки и определение формата.... М\б Есть способ либо формат определить (во втором случае) или строку по-особому сформировать (как в первом). Подскажите, пожалуйта.
Изменено: Саак Шахламджян - 25.09.2008 11:20:31
 
Не совсем понятно давайте пойдем по другому.
1.Вы сделаете файл с длинной строкой как есть.
2.Включите в Excel создание Макроса
3.Сделаете с ячейкой преобразование, которое Вам надо.
4.Остановите запись макроса.
5.Покажете полученный текст макроса.
 
Цитата
nordk пишет:
Не совсем понятно давайте пойдем по другому.
1.Вы сделаете файл с длинной строкой как есть.
2.Включите в Excel создание Макроса
3.Сделаете с ячейкой преобразование, которое Вам надо.
4.Остановите запись макроса.
5.Покажете полученный текст макроса.

Боюсь, в этом случае долго будет... Если из Бэст сразу выгружать как надо, быстрее будет? Хотя это мне так кажется.
Да нужно чтобы было красиво.. Проще картинку прикрепить, но попробую на пальцах:

№|К1.шир10|К2 шир50...|К3.......
.1|Номер 23 |Название.....|цифра3

.2|Номер 13 |Длинное наз|цифра2
...|...............|вание......... |

.3|Номер 444|Название2...|цифра3

Под символом № - новер ячейки EXEL. Символ "."=" "

"Длинное название" - лежит в одной ячейке номер 2, Колонка 2 широной 50 так и осталась шириной 50, но "Длинное название" перенеслось так, что его видно целиком.
А сейчас, когда выгружаю в Exel, получаю:

№|К1.шир10|К2 шир50...|К3.......
.1|Номер 23 |Название.....|цифра3

.2|Номер 13 |Длинное наз|цифра2

.3|Номер 444|Название2...|цифра3

От "Длинное название" видно только "Длинное наз", хотя, в ячейке оно целиком присутствует. Нужно, как бы высоту ячейки изменить, чтобы "Длинное название" было в несколько строк.
Изменено: Саак Шахламджян - 25.09.2008 16:41:28
 
Добрый день.
Вот сегодня как раз с утра рисовал таблицу в excel. Примерно так:

oWorkSheet:Columns(nCol):HorizontalAlignment = xlRight //весь столбец - прижать к правому краю
oRange:=oWorkSheet:cells(3,nCol) // область - одна ячейка
oRange:activate() // активировать область
oRange:value:=oemtoansi(cName) // наименование колонки
oRange:font:bold:=.T. // жирный шрифт
oRange:HorizontalAlignment:=xlCenter // по горизонтали - в центре
oRange:VerticalAlignment:=xlTop //по вертикали - у верхнего края
oRange:Borders(xlEdgeBottom):LineStyle:=xlContinuous //снизу - граница сплошной линией
oRange:Borders(xlEdgeBottom):Weight:=xlThin //ширина линии - обычная
oWorkSheet:Columns(nCol):ColumnWidth:=25 //Ширина всего столбца - 25 единиц

В итоге для подготовки столбца использовал DEFINE и вызов
Код
#DEFINE PrepColumns(nCol, cName, nWidth) (oRange:=oWorkSheet:cells(3,nCol), oRange:activate(), oRange:value:=oemtoansi(cName), oRange:font:bold:=.T., oRange:HorizontalAlignment:=xlCenter , oRange:VerticalAlignment:=xlTop, oRange:Borders(xlEdgeBottom):LineStyle:=xlContinuous, oRange:Borders(xlEdgeBottom):Weight:=xlThin, oWorkSheet:Columns(nCol):ColumnWidth:=nWidth)

PrepColumns(nColName   , 'Наименование товара', 50)
С уважением, Новиков Алексей.
 
Для того, чтобы текст в ячейке переносился и высота втоматически подбиралась, Вам необходимо установить свойство WrapText в true. примерно так:
oWorkSheet:cells(nLine,nCol):WrapText:=.T.
С уважением, Новиков Алексей.
 
Цитата
Алексей Новиков пишет:
oWorkSheet:cells(nLine,nCol):WrapText:=.T.

У меня что-то не получается. А Вы не могли бы показать, где происходит инициализация объекта oWorkSheet, а то я что-то не очень понял что это такое...
Как я понял:
oWorkBook:=oApp:WorkBooks:Add()//рабочая книга
oWorkSheet:=oWorkBook:Worksheets():Add(),
В этом случае запись oWorkSheet:cells(nLine,2):WrapText:=.T. у меня не работает.

В хелепе к Б-4 написано, что "...методы и свойства Excel, описание которых можно найти
в справочных руководствах по объектной модели Excel." Где бы поискать эти описания?
Изменено: Саак Шахламджян - 26.09.2008 08:55:44
 
Поставил так:
oWorkSheet:Range("B3"):WrapText:=.T.

Т.е. как бы обратился сразу к ячейке B3. Как правильно это назвать не знаю... Так работает!!! Спасибо!!
Но все-таки хотелось бы "правильное" решение :
oWorkSheet:cells(nLine,2):WrapText:=.T.

А оно почему-то не работает. Просто обращаться к ячейкам в цикле так:
Код
While ! Eof()
.....
 oWorkSheet:Range("B"+Var2Char(nLine)):WrapText:=.T. 
.....
enddo


Будет немного дольше....
Изменено: Саак Шахламджян - 26.09.2008 10:24:09
 
Сказать честно, я не проверял работоспособность вызова cells():wraptext
Слепил из известных вызовов в надежде, что заработает. :-)
С уважением, Новиков Алексей.
 
Я тоже сторонник RANGE в своих решениях.
Страницы: 1
Читают тему (гостей: 1)