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 [только новые]


nick_mi



Пост N: 124
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 21.09.13 18:27. Заголовок: 1) Пока пользователь..


1) Пока пользователь не закроет документ в EXCEL, программа будет ждать, если документ закрыт
независимо от того работает EXCEL дальше с другим документом, или полностью из него вышли
программа продолжит свою работу .

2) Разница собственно только в обращению к диску, или проверка объекта в памяти.
Решать вам

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



Пост N: 10
Зарегистрирован: 21.02.13
ссылка на сообщение  Отправлено: 04.10.13 00:55. Заголовок: проблема с сохранением файла


есть такой код - сохраняет сформированную новую книгу в файл
предварительно сформировав имя файла и удалив старый файл
	// сохранить 
cFile:=wReport01.txt_Folder.Value
if RIGHT(cFile, 1)#"\"
cFile:=cFile+"\"
endif
cFile:=cFile+str(wReport01.Spinner_Year.Value,4)+ STRZERO(wReport01.COMBOBOX_MONTH.Value,2)+ ' '+aPDocs[1,5]+'.xls'
if file(cFile)
FILEDELETE(cFile) //--> lDeleted
endif
oBook:SaveAs(cFile)
//oBook:SaveAs(cFile, xlExcel9795) <==== в Excell Office 2007 - падает

проблема в команде сохранения (я отлаживаюсь на Excel 2003).
1. Если не задаю в cFile расширение '.xls' -- Excel действует хитрым образом.
Если в cFile нет точек - то сам приписывает к имени файла '.xls'
Если точки есть - то не приписывает.
Например сохраненые файлы "C:\public\201308 Рахимов А.П" и "C:\public\201308 Склад.xls"
Но первый файл совпадает с cFile и поэтому находится и удаляется.
А второй - не совпадает и поэтому Excel начинает задавать вопросы - что не есть хорошо.
Да и файл без расширения - очень не хорошо.
обязательно приписываю +'.xls'

2.
В Excel 2003 - сохраняет и открывает без вопросов.
В Excel 2007 - сохраняет без вопросов. А при открытии пишет что формат файла не соответствует расширеню.
И действительно - сохраняет в формате .xlsx = (упакованый набор xml-лек) но с расширением xls естесственно.

Попробовал задать формат сохранения так oBook:SaveAs(cFile, xlExcel9795)
в Excell Office 2007 - падает

Посоветуйте
либо как правильно задать формат сохранения (что предпочтительно для совместимости со старыми версиями Excel)
либо как получить от Экселя расширение файла по умолчанию чтобы подставить в имя файла.
либо какой нибудь третий способ решения проблемы



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



Пост N: 125
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 04.10.13 08:05. Заголовок: Может отлючить вывод..


Может отлючить вывод предупреждений в EXCEL? На форуме где-то было, как это сделать.
Касалось, по моему, записи, но может и на открытии прокатит.

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




Пост N: 102
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 04.10.13 09:30. Заголовок: oExcelTpl:SET( &#..


попробуйте действительно отключить предупреждения

oExcelTpl:SET( "DisplayAlerts", .F. )
...
...
...
oExcelTpl:SET( "DisplayAlerts", .T. )

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



Пост N: 11
Зарегистрирован: 21.02.13
ссылка на сообщение  Отправлено: 07.10.13 06:43. Заголовок: Haz пишет: попробу..


Haz пишет:

 цитата:

попробуйте действительно отключить предупреждения


В своей программе я могу отключить. А как отключить у пользователя когда он будет открывать файл в своей Экселке?


Мое решение такое
 
#define xlExcel9795 43
#define xlExcel8 56
.....
if val(oExcel:get("Version"))<12
oBook:SaveAs(cFile, xlExcel9795)
else
oBook:SaveAs(cFile, xlExcel8)
endif
....

Файлы созданные в Excel2007 и в Excell2013 без вопросов открываются в Excel2003.
потому что
56 = xlExcel8 (Excel 97 through Excel 2003 formatted files used in Excel 2007, .xls)

А xlExcel9795 нужен потому что Excel 2003 не знает о будущем коде формата 56 = xlExcel8


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




Пост N: 3616
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.10.13 14:35. Заголовок: Покажите на примере ..


Покажите на примере плиз как сделать автосумму в определенной ячейке.
Скажем в первой колонке заполнены числами 1 и 2 ячейки а в 3-й нужно сделать автосумму.
Макрос смотрел и синтаксиса не понял.
Спасибо.

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




Пост N: 3618
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.10.13 16:17. Заголовок: вопрос по разделител..


вопрос по разделителям разрядов
в макросе EXCEL тупо пишет NumberFormat:="#,##0" попробовал в Harbour получилось как то криво
и даже перед 0.00 он рисует ,0.00
Переделал так NumberFormat:="# ##0"+GET_SDECIMAL()+"00" , работает нормально но у меня EXCEL 2003
и не факт что такой код сработает на более свежем EXCEL
Вопрос: откуда EXCEL берет этот знак , и корректно ли если я его заменяю на пробел ?

PS
Как считать разделитель групп разрядов ?
Для считывания разделителя дробной и целой части использую
 
#pragma BEGINDUMP

#include "hbapi.h"
#include "windows.h"

HB_FUNC( GET_SDECIMAL )
{
char sDec[2];

GetLocaleInfo(LOCALE_USER_DEFAULT,
LOCALE_SDECIMAL,
(LPTSTR) sDec, 2 );
hb_retclen( sDec, 1 );
}

#pragma ENDDUMP



Dima пишет:

 цитата:
Как считать разделитель групп разрядов ?


Проехали , заюзал LOCALE_STHOUSAND

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





Пост N: 328
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 11.10.13 17:17. Заголовок: Dima пишет: Покажи..


Dima пишет:

 цитата:

Покажите на примере плиз как сделать автосумму в определенной ячейке.
Скажем в первой колонке заполнены числами 1 и 2 ячейки а в 3-й нужно сделать автосумму.
Макрос смотрел и синтаксиса не понял.


Не очень понятна суть вопроса...
Что мешает записать в ячейку содержимое "=RC[-2] + RC[-1]" ? Получится автосумма двух ячеек слева.

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




Пост N: 105
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.10.13 09:09. Заголовок: автосумма


или так

oExcel:ActiveCell:FormulaR1C1 := "=СУММ(R[-" + NTOC(nStart) + "]C:R[-1]C)

сумма колонки со строки nStart по активную строку -1

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




Пост N: 3631
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.10.13 15:03. Заголовок: EXCEL 2003 у меня и ..


EXCEL 2003 у меня и у клиента.
В ячейку цифры я пишу так .........:NumberFormat:="# ##0"+GET_SDECIMAL()+"00"
Он строит у себя отчет и в сформированной таблице видит (для примера одна ячейка)
0,91 наводит на нее курсор и вверху видит 90.65
Когда я у себя строю тот же отчет то в этой же ячейке сразу вижу 90.65
У него разделитель дробной и целой части запятая у меня точка. Почему так по разному
EXCEL выводит данные ? По идее у него в ячейке должно отобразится 90,65

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





Пост N: 350
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 17.10.13 16:04. Заголовок: Dima пишет: EXCEL 2..


Dima пишет:

 цитата:
EXCEL 2003 у меня и у клиента.
В ячейку цифры я пишу так .........:NumberFormat:="# ##0"+GET_SDECIMAL()+"00"
Он строит у себя отчет и в сформированной таблице видит (для примера одна ячейка)
0,91 наводит на нее курсор и вверху видит 90.65
Когда я у себя строю тот же отчет то в этой же ячейке сразу вижу 90.65
У него разделитель дробной и целой части запятая у меня точка. Почему так по разному
EXCEL выводит данные ? По идее у него в ячейке должно отобразится 90,65


Не очень понятно, о чем речь.
NumberFormat - это маска форматирования значения, хранящегося в ячейке. Формат сам по себе - но какое значение туда пишете, что вместо 90,65 получается 0,91 ?
"Хорошо-бы увидеть самодостаточный пример" (с)... :)

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




Пост N: 3633
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.10.13 16:16. Заголовок: Sergy пишет: "Х..


Sergy пишет:

 цитата:
"Хорошо-бы увидеть самодостаточный пример" (с)... :)


Кусочек кода ;)
 
oSheet:Cells( jj, i+1 ):NumberFormat:="# ##0"+GET_SDECIMAL()+"00"
oSheet:Cells( jj, i+1 ):Value :=vtv // число
oSheet:Range(osheet:cells(jj,i+1),osheet:cells(jj,i+1)):BorderAround( xlContinuous, xlThin)
oSheet:Columns(i+1 ):AutoFit()


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




Пост N: 3634
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.10.13 22:47. Заголовок: Проехали , решил воп..


Проехали , решил вопрос.

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





Пост N: 351
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 17.10.13 23:55. Заголовок: Dima пишет: Проехал..


Dima пишет:

 цитата:
Проехали , решил вопрос.


Чтобы не наступить на такие-же грабли - в чем оказалась проблема ?


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




Пост N: 3636
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.10.13 09:08. Заголовок: Sergy Он сделал в E..


Sergy
Он сделал в EXCEL и винде такие же региональные настройки как у меня в плане разделителей ;)

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



Пост N: 124
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 18.02.14 12:11. Заголовок: Помогите решить : Н..


Помогите решить :
Нужно создать несколько файлов EXCELL(таблиц) для дальнейшей рассылки (прайс-листы) . Хочу одновременно создавать несколько листов ( для разных клиентов) в одной книге , а затем эти листы поочередно сохранять в соответствующие файлы . До сего дня подготавливал последовательно ( вызов EXCELL , создание книги , заполнение данными , сохранение книги , закрываем EXCELL ). Но для подготовки большого числа документов я решил делать одновременно :

1) Вызов EXCELL
2) Создание книги
3) Создание Лист 1 , Лист 2 ..... Лиcт N
4) В цикле заполняем листы информацией
5) СОхраняем каждый лист в отдельный файл
Закрываем EXCELL

Знаний команд не хватает КАК :
ДОБАВИТЬ ЛИСТ ?
ПЕРЕКЛЮЧИТЬСЯ НА ЛИСТ ?
СОХРАНИТЬ ТОЛЬКО НУЖНЫЙ ЛИСТ ?

Поможете ?










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




Пост N: 3117
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.02.14 12:28. Заголовок: Хоть у объекта works..


Хоть у объекта worksheet и есть метод SaveAs, я не знаю, как он работает. Обычно сохраняется вся книга, а не отдельный лист. Во всяком случае, надо попробовать, как сработает SaveAs для отдельного листа.

А насчет добавления-переключения листов:

oSheets := oBook:Sheets

Выбор листа по номеру:
oSheet1 := oSheets:Item(1)
oSheet2 := oSheets:Item(2)
Переключение:
oSheet2:Select()
Хотя можно явно не переключаться на лист, а применять методы непосредственно к интересующему листу (oSheet2)

Добавление листа (из справки):

oSheets:Add(<Before>, <After>, <Count>, <Type>)

Before Optional Variant. An object that specifies the sheet before which the new sheet is added.

After Optional Variant. An object that specifies the sheet after which the new sheet is added.

Count Optional Variant. The number of sheets to be added. The default value is one.

Type Optional Variant. Specifies the sheet type. Can be one of the following XlSheetType constants: xlWorksheet, xlChart, xlExcel4MacroSheet, or xlExcel4IntlMacroSheet. If you are inserting a sheet based on an existing template, specify the path to the template. The default value is xlWorksheet.



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




Пост N: 3836
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.02.14 14:45. Заголовок: Softlog86 пишет: Но..


Softlog86 пишет:

 цитата:
Но для подготовки большого числа документов я решил делать одновременно :


Одновременно все равно не получится да и будет ли такой способ быстрее , не факт.
Вот ежели на каждого клиента да в отдельном потоке создавать прайс , тогда другое дело.
Но к сожалению мне не удалось запустить EXCEL в отдельном потоке , вероятно он
работает только в ST режиме.

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




Пост N: 3840
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.02.14 15:46. Заголовок: Помогите с рамкой р..


Помогите с рамкой разобраться.
Обычную сетку(плюс слитие ячеек) делаю так
 
oSheet:Range(osheet:cells(i,1),osheet:cells(i+3,1)):MergeCells:=.t.
oSheet:Range(osheet:cells(i,1),osheet:cells(i+3,1)):BorderAround( xlContinuous, xlThin)


Нужно что бы плюс к этому нижняя часть рамки была утолщенной.
Макросы смотрел и не очень въехал


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



Пост N: 26
Зарегистрирован: 22.03.06
ссылка на сообщение  Отправлено: 24.02.14 16:45. Заголовок: Dima пишет: Нужно ч..


Dima пишет:

 цитата:
Нужно что бы плюс к этому нижняя часть рамки была утолщенной.



так не пробовал?
oSheet:Range(osheet:cells(i,1),osheet:cells(i+3,1)):Borders(xlEdgeBottom):LineStyle( xlContinuous)
oSheet:Range(osheet:cells(i,1),osheet:cells(i+3,1)):Borders(xlEdgeBottom):Weight( xlMedium)

константы
These define the style of the border
xlNone = -4142; Note this is the same as xlLineStyleNone
xlContinuous = 1;
xlDash = -4115;
xlDashDot = 4;
xlDashDotDot = 5;
xlDot = -4118;
xlDouble = -4119;
xlSlantDashDot = 13;

These define the weight of the border
xlHairLine = 1;
xlMedium = -4138;
xlThick = 4;
xlThin = 2;

Thise is handy to make borders have the default color index
xlAutomatic = -4105;

These define the placement of border pieces
xlDiagonalDown = 5;
xlDiagonalUp = 6;
xlEdgeLeft = 7;
xlEdgeTop = 8;
xlEdgeBottom = 9;
xlEdgeRight = 10;
xlInsideVertical = 11;
xlInsideHorizontal = 12;

ps
проверить сейчас не могу.
взял с рабочего софта, но на другом языке


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