Есть файл EXEL. В нем есть 5(n) ячеек от которых зависят значения остальных (Т.е. меняем в какой-либо из этих 5ти ячеек значения в остальных происходят изменения).
Стоит такая задача:
1. Пользователь вводит 5ть(n) параметров.
2. Копируем Exel файл, называем по-новому.
3. Вносим в те 5ть (n) ячеек данные пользователя.
4. Необходимо, чтобы изменения проризошли и в остальных ячейках, зависящих от "главных".
5. По необходимости пользователь из бест открывает файл EXEL в программе Exel для печати.
Подскажите, пожалуйста, каким образом реализовать 3,4 и 5 с условием, что даже если и вызывается EXEL, то пользователь никаких действий, кроме печати не совершает?
(Возможно ли такое?)
Например,
1. ячейки в файле изменяют значения (как я понимаю это произойти должно без привлечения самой программы EXEL)
2. Затем файл открывается в EXEL, запускается макрос, который "заставит" изменить, затем файл сохраняется.
Не совсем понятно о чем речь.
Вы из плагина открываете Excel ?
Если из плагина, то Excel умеет защищать лист на изменение. Вам в плагине надо только дописать после внесения изменений защиту листа.
Если Вы открываете по-другому, то БЭСТ Вам ничем не поможет....
Я ничего не открываю, но очень бы хотелось. О каком плагине идет речь?
Просто есть exel-файл. Надо поменять там значения, открыть файл в exel и запустить макрос (сделать это в Б-5 доп функцией)... Я вообще кроме как CreateObject( "Excel.Application" ) не имею представления о том как делать Импор\экспорт данных в\из эксель таблиц. Не отказался бы от информации на эту тему, или хотя бы от конкретных функций\классов, которые мне потребовались бы.
Там чего-то супер особого нет. В старом форуме есть пример работы из харбора с 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? Можно, в принципе уже начинать искать описание синтаксиса этого языка и пользоваться ими или лучше все же дергать куски из примеров, приведенных на форумах?
Берите макрос 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") - это запись в конкретную ячейку.
А запись вида
Запись в ячейку по номеру столбца, номеру ячейки и определение формата.... М\б Есть способ либо формат определить (во втором случае) или строку по-особому сформировать (как в первом). Подскажите, пожалуйта.
Не совсем понятно давайте пойдем по другому.
1.Вы сделаете файл с длинной строкой как есть.
2.Включите в Excel создание Макроса
3.Сделаете с ячейкой преобразование, которое Вам надо.
4.Остановите запись макроса.
5.Покажете полученный текст макроса.
nordk пишет:
Не совсем понятно давайте пойдем по другому.
1.Вы сделаете файл с длинной строкой как есть.
2.Включите в Excel создание Макроса
3.Сделаете с ячейкой преобразование, которое Вам надо.
4.Остановите запись макроса.
5.Покажете полученный текст макроса.
Боюсь, в этом случае долго будет... Если из Бэст сразу выгружать как надо, быстрее будет? Хотя это мне так кажется.
Да нужно чтобы было красиво.. Проще картинку прикрепить, но попробую на пальцах:
Под символом № - новер ячейки EXEL. Символ "."=" "
"Длинное название" - лежит в одной ячейке номер 2, Колонка 2 широной 50 так и осталась шириной 50, но "Длинное название" перенеслось так, что его видно целиком.
А сейчас, когда выгружаю в Exel, получаю:
От "Длинное название" видно только "Длинное наз", хотя, в ячейке оно целиком присутствует. Нужно, как бы высоту ячейки изменить, чтобы "Длинное название" было в несколько строк.
Добрый день.
Вот сегодня как раз с утра рисовал таблицу в 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 и вызов
Для того, чтобы текст в ячейке переносился и высота втоматически подбиралась, Вам необходимо установить свойство 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." Где бы поискать эти описания?
Поставил так:
oWorkSheet:Range("B3"):WrapText:=.T.
Т.е. как бы обратился сразу к ячейке B3. Как правильно это назвать не знаю... Так работает!!! Спасибо!!
Но все-таки хотелось бы "правильное" решение :
oWorkSheet:cells(nLine,2):WrapText:=.T.
А оно почему-то не работает. Просто обращаться к ячейкам в цикле так:
Код
While ! Eof()
.....
oWorkSheet:Range("B"+Var2Char(nLine)):WrapText:=.T.
.....
enddo