Автор | Сообщение |
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
[только новые]
|
|
nick_mi
|
| |
Пост N: 124
Зарегистрирован: 19.05.05
|
|
Отправлено: 21.09.13 18:27. Заголовок: 1) Пока пользователь..
1) Пока пользователь не закроет документ в EXCEL, программа будет ждать, если документ закрыт независимо от того работает EXCEL дальше с другим документом, или полностью из него вышли программа продолжит свою работу . 2) Разница собственно только в обращению к диску, или проверка объекта в памяти. Решать вам
|
|
|
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) либо как получить от Экселя расширение файла по умолчанию чтобы подставить в имя файла. либо какой нибудь третий способ решения проблемы
|
|
|
nick_mi
|
| |
Пост N: 125
Зарегистрирован: 19.05.05
|
|
Отправлено: 04.10.13 08:05. Заголовок: Может отлючить вывод..
Может отлючить вывод предупреждений в EXCEL? На форуме где-то было, как это сделать. Касалось, по моему, записи, но может и на открытии прокатит.
|
|
|
Haz
|
| |
Пост N: 102
Зарегистрирован: 20.02.11
|
|
Отправлено: 04.10.13 09:30. Заголовок: oExcelTpl:SET( ..
попробуйте действительно отключить предупреждения oExcelTpl:SET( "DisplayAlerts", .F. ) ... ... ... oExcelTpl:SET( "DisplayAlerts", .T. )
|
|
|
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
|
|
|
Dima
|
| |
Пост N: 3616
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.10.13 14:35. Заголовок: Покажите на примере ..
Покажите на примере плиз как сделать автосумму в определенной ячейке. Скажем в первой колонке заполнены числами 1 и 2 ячейки а в 3-й нужно сделать автосумму. Макрос смотрел и синтаксиса не понял. Спасибо.
|
|
|
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
|
|
|
Sergy
|
| |
Пост N: 328
Зарегистрирован: 08.07.06
|
|
Отправлено: 11.10.13 17:17. Заголовок: Dima пишет: Покажи..
Dima пишет: цитата: | Покажите на примере плиз как сделать автосумму в определенной ячейке. Скажем в первой колонке заполнены числами 1 и 2 ячейки а в 3-й нужно сделать автосумму. Макрос смотрел и синтаксиса не понял. |
| Не очень понятна суть вопроса... Что мешает записать в ячейку содержимое "=RC[-2] + RC[-1]" ? Получится автосумма двух ячеек слева.
|
|
|
Haz
|
| |
Пост N: 105
Зарегистрирован: 20.02.11
|
|
Отправлено: 12.10.13 09:09. Заголовок: автосумма
или так oExcel:ActiveCell:FormulaR1C1 := "=СУММ(R[-" + NTOC(nStart) + "]C:R[-1]C) сумма колонки со строки nStart по активную строку -1
|
|
|
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
|
|
|
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 ? "Хорошо-бы увидеть самодостаточный пример" (с)... :)
|
|
|
|
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()
|
|
|
Dima
|
| |
Пост N: 3634
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.10.13 22:47. Заголовок: Проехали , решил воп..
Проехали , решил вопрос.
|
|
|
Sergy
|
| |
Пост N: 351
Зарегистрирован: 08.07.06
|
|
Отправлено: 17.10.13 23:55. Заголовок: Dima пишет: Проехал..
Dima пишет: Чтобы не наступить на такие-же грабли - в чем оказалась проблема ?
|
|
|
Dima
|
| |
Пост N: 3636
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.10.13 09:08. Заголовок: Sergy Он сделал в E..
Sergy Он сделал в EXCEL и винде такие же региональные настройки как у меня в плане разделителей ;)
|
|
|
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 Знаний команд не хватает КАК : ДОБАВИТЬ ЛИСТ ? ПЕРЕКЛЮЧИТЬСЯ НА ЛИСТ ? СОХРАНИТЬ ТОЛЬКО НУЖНЫЙ ЛИСТ ? Поможете ?
|
|
|
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.
|
|
|
Dima
|
| |
Пост N: 3836
Зарегистрирован: 17.05.05
|
|
Отправлено: 18.02.14 14:45. Заголовок: Softlog86 пишет: Но..
Softlog86 пишет: цитата: | Но для подготовки большого числа документов я решил делать одновременно : |
| Одновременно все равно не получится да и будет ли такой способ быстрее , не факт. Вот ежели на каждого клиента да в отдельном потоке создавать прайс , тогда другое дело. Но к сожалению мне не удалось запустить EXCEL в отдельном потоке , вероятно он работает только в ST режиме.
|
|
|
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) Нужно что бы плюс к этому нижняя часть рамки была утолщенной. Макросы смотрел и не очень въехал
|
|
|
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 проверить сейчас не могу. взял с рабочего софта, но на другом языке
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|