On-line: Oskar_AAA, гостей 1. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 4144
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.04.15 22:50. Заголовок: Вопрос по Excel ?


Всем привет.
Вопрос к знатокам Excel-я, как подсчитать сумму ВСЕХ значений с минусом и с плюсом ?
Вот есть таблица из многих столбцов. Как сделать формулу для расчёта этих значений по 2-му столбцу ?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 153 , стр: 1 2 3 4 5 6 7 8 All [только новые]





Пост N: 309
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 28.04.15 23:20. Заголовок: Вытащи нужный столбе..


Вытащи нужный столбец в массив, суммируй(или чего там) и вставь результат. Быстрее будет

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4145
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.04.15 01:11. Заголовок: fil пишет: Вытащи н..


fil пишет:

 цитата:
Вытащи нужный столбец в массив, суммируй(или чего там) и вставь результат. Быстрее будет



Их 10 штук (столбцов) которые нужно считать и вдобавок по 50-60 тыс.записей...

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 4
Зарегистрирован: 28.11.14
ссылка на сообщение  Отправлено: 29.04.15 06:35. Заголовок: =СУММЕСЛИ(C3:C9;"..


=СУММЕСЛИ(C3:C9;"<0";C3:C9)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4783
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.04.15 09:32. Заголовок: Andrey Таблицу из H..


Andrey
Таблицу из Harbour создаешь (заполняешь) ?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 325
Зарегистрирован: 16.12.08
ссылка на сообщение  Отправлено: 29.04.15 09:46. Заголовок: суммирование положит..


суммирование положительных и отрицательных чисел:

http://www.cyberforum.ru/vba/thread118931.html

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4146
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.04.15 11:57. Заголовок: Dima пишет: Таблицу..


Dima пишет:

 цитата:
Таблицу из Harbour создаешь (заполняешь) ?


DBF создаю хХарбором. Потом показываю в FastReport/
Ну и еще отдельное меню вызова EXCEL с этим DBF.
Вот и хотелось бы макрос прикрутить, или написать какую формулу писать.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4147
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.04.15 12:00. Заголовок: santy пишет: суммир..


santy пишет:

 цитата:
суммирование положительных и отрицательных чисел:

http://www.cyberforum.ru/vba/thread118931.html



Спасибо !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4148
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.04.15 12:02. Заголовок: SadStar3333 пишет: ..


SadStar3333 пишет:

 цитата:
=СУММЕСЛИ(C3:C9;"<0";C3:C9)



А здесь такого нет:
http://www.cyberforum.ru/vba/thread118931.html
Можно посчитать формулой непосредственно на листе:
=СУММЕСЛИ(A1:A20;"<0")
=СУММЕСЛИ(A1:A20;">0")


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 549
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 29.04.15 12:09. Заголовок: Andrey пишет: А зде..


Andrey пишет:

 цитата:
А здесь такого нет:



Андрей , в самом Excel отличная справка по функциям
СУММЕСЛИ(диапазон;условия;диапазон_суммирования)

Диапазон — диапазон ячеек, оцениваемый по условиям. Ячейки в каждом диапазоне должны содержать числа, имена, массивы или ссылки, содержащие числа. Пустые ячейки и ячейки, содержащие текстовые значения, не учитываются.

Условия — критерий в форме числа, выражения или текста, определяющий, какие ячейки должны суммироваться. Например, аргумент «условие» может быть выражен как 32, "32", ">32" или "яблоки".

Диапазон_суммирования — фактические ячейки, которые необходимо просуммировать, если соответствующие им ячейки в диапазоне отвечают условиям. Если аргумент «диапазон_суммирования» опущен, ячейки диапазона и оцениваются по условиям, и суммируются в том случае, если они им соответствуют


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4784
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.04.15 12:42. Заголовок: Haz пишет: Андрей ,..


Haz пишет:

 цитата:
Андрей , в самом Excel отличная справка по функциям


Он их не читает

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4149
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.04.15 14:20. Заголовок: Dima пишет: Он их н..


Dima пишет:

 цитата:
Он их не читает


Лучше попробовать, если не получается то спросить...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5516
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.09.17 18:34. Заголовок: Как на Харборе в Экс..


Как на Харборе в Экселе сделать - сохранение файла в формате CVS ?
Т.е. файл открыл через ОЛЮ, а как дальше сделать - сохранение файла ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1551
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 16.09.17 20:16. Заголовок: Функция Excel VBA Sa..


Функция Excel VBA SaveAs(..)

Параметр #2 - FileFormat := xlCSV





Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6582
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 16.09.17 21:28. Заголовок: Петр пишет: Парамет..


Петр пишет:

 цитата:
Параметр #2 - FileFormat := xlCSV


Как обычно Andrey обломился просто погуглить

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5517
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.17 17:03. Заголовок: Петр пишет: Парамет..


Петр пишет:

 цитата:
Параметр #2 - FileFormat := xlCSV


Спасибо !
Но как я и подозревал - Эксель опять сопротивляется...
Открываю Эксел в скрытом режиме - oExcel:Visible := .F. // НЕ Показывать EXCEL
Сделал запись в файл, а просто так Эксел не закрывается.
Вот такая табличка появляется:

Как этот диалог убрать, чтобы юзера не пугались ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6587
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.09.17 17:05. Заголовок: oExcel:DisplayAlerts..


oExcel:DisplayAlerts:=.F.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5518
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.17 17:08. Заголовок: Dima СПАСИБО ! :sm3..


Dima СПАСИБО !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5519
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.17 20:21. Заголовок: Что-то иногда вылета..


Что-то иногда вылетает программа вот с такой ошибкой:


Перед тем как записывать файл, я удаляю существующий.
   IF FILE( cFileSave ) 
DELETEFILE( cFileSave ) // Чтобы Excel не приставал в вопросом "Такой файл уже существует"
ENDIF
INKEYGUI(500)
oBook:SaveAs( cFileSave, xlCSV ) // строка 97

Что за ошибка такая и как убрать вылет ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1558
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 17.09.17 21:11. Заголовок: Andrey пишет: Что з..


Andrey пишет:

 цитата:
Что за ошибка такая и как убрать вылет ?



1. У обьекта oBook нет метода SaveAs
2. Быть внимательным и хоть как-нибудь обработывать ошибки (проверка возращаемых значений, BEGIN SEQUENCE ) - тормоза придумали не трУсы

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5520
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.17 22:40. Заголовок: Петр пишет: Быть вн..


Петр пишет:

 цитата:
Быть внимательным и хоть как-нибудь обработывать ошибки (проверка возращаемых значений, BEGIN SEQUENCE )


Точно... Нашёл ошибку. Повис в памяти скрытый Эксель с файлом, т.е. файл заблокирован на запись.

Вот так работает:
    
....
cFileName := cPath + "\" + cFileXls
cFileSave := cPath + "\" + cFileCsv
.....
oExcel := TOleAuto():New( "Excel.Application" )
oExcel:Visible := .F. // НЕ Показывать EXCEL
oExcel:DisplayAlerts := .F. // не приставать с запросами
oExcel:Workbooks:Open( cFileName, 0 )
oBook := oExcel:ActiveSheet()

IF FILE( cFileSave )
// Чтобы Excel не приставал в вопросом "Такой файл уже существует"
nErr := DELETEFILE(cFileSave)
IF nErr == 0
oBook:SaveAs( cFileSave, xlCSV )
lRet := .T.
ELSE
cMsg := REPLICATE( "-._.", 16 ) + ";;"
cMsg += "Ошибка удаления файла: "+cFileSave+" !; Ошибка: "+HB_NtoS(nErr)+";;"
cMsg += "Файл занят другим процессом в памяти !;;"
cMsg += REPLICATE( "-._.", 16 ) + ";;"
cMsg := AtRepl( ";", cMsg, CRLF )
MsgStop( cMsg , "Ошибка!" )
lRet := .F.
ENDIF
ELSE
oBook:SaveAs( cFileSave, xlCSV )
lRet := .T.
ENDIF

oExcel:Quit()


Петр пишет:

 цитата:
1. У обьекта oBook нет метода SaveAs


А как тогда писать правильно ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6589
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.09.17 23:00. Заголовок: Andrey пишет: Петр ..


Andrey пишет:

 цитата:
Петр пишет:

цитата:
1. У обьекта oBook нет метода SaveAs


А как тогда писать правильно ?


oExcel:SaveAs( cFileSave, xlCSV )

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5521
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 17.09.17 23:07. Заголовок: WinXP) Версия: Exce..


WinXP) Версия: Excel 2003 (11.0) - открывает файлы нормально, без ошибок.
Xin7) Версия: Excel 2014 (16.0) - при открытии этих же файлов, вылетает с ошибкой:


   oExcel := TOleAuto():New( "Excel.Application" ) 
oExcel:Visible := .F. // НЕ Показывать EXCEL
oExcel:DisplayAlerts := .F. // не приставать с запросами
oExcel:Workbooks:Open( cFileName, 0 ) // строка 90
oBook := oExcel:ActiveSheet()

Почему ?

При открытии этого файла напрямую в Экселе - вот такое окно:


Пока не щёлкнешь по кнопке "Разрешить редактирование" для этого файла, программа на МиниГуи будет вылетать.
Т.е. ОЛЕ в МиниГуи (для Экселя-2014) не может открыть такой файл ?
Как тогда добиться совместимости, чтобы программа на всех ОФИСАХ работала ?
Можно ли у себя в программе ввести параметр для разрешения редактирования таких файлов ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1124
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.09.17 08:53. Заголовок: Andrey пишет: Можно..


Andrey пишет:

 цитата:
Можно ли у себя в программе ввести параметр для разрешения редактирования таких файлов ?


Почитай в msdn про параметры метода open.
Уверен там есть ответ.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3592
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.09.17 12:58. Заголовок: Опыт показывает, что..


Опыт показывает, что параметрами метода Open не обойдешься. Excel последних версий стал слишком "умный", и теперь сам решает, стоит ли ему открывать файл, или не стоит. То ему папка не нравится, то файл не такой.
Иногда можно подшаманить настройки самого Excel, иногда надо удалять определенные ветки реестра. Но в общем случае для произвольного Office заранее неизвестно, согласится ли сей капризный продукт открыть файл, или его надо специально уговаривать.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5522
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.09.17 15:08. Заголовок: Haz пишет: Почитай ..


Haz пишет:

 цитата:
Почитай в msdn про параметры метода open.
Уверен там есть ответ.



Нашел это - https://msdn.microsoft.com/en-us/vba/excel-vba/articles/workbooks-open-method-excel
Ничего подходящего нет...

Pasha пишет:

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


Да фиг бы сним, нельзя открыть - так нельзя !
Главное чтобы моя программа не сваливалась по ОЛЕ-ошибке и юзеру окошко читаемое выдать !
Что только ему написать то пока не знаю.



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1125
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.09.17 15:20. Заголовок: Andrey пишет: Ничег..


Andrey пишет:

 цитата:
Ничего подходящего нет...



Это не то ? IgnoreReadOnlyRecommended
Если не помогла , то в параметрах безопасности экселя нужно запретить эти предупреждения.
Как сделать руками знаю, как из VBA не видел

Хотя есть такое , попробуй
http://getadmx.com/?Category=Office2016&Policy=excel16.Office.Microsoft.Policies.Windows::L_TrustedLoc01&Language=ru-ru

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1559
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 18.09.17 15:50. Заголовок: Andrey пишет: Главн..


Andrey пишет:

 цитата:
Главное чтобы моя программа не сваливалась по ОЛЕ-ошибке


Я вам про BEGIN SEQUENCE от нефиг делать писал?
Организуйте обработку ошибок и будет вам счастье.

К тому же

 цитата:
IF FILE( cFileSave )
// Чтобы Excel не приставал в вопросом "Такой файл уже существует"
nErr := DELETEFILE(cFileSave)


- это очень "детский" код, под DOS - все нормально, в Win может быть источником трудноотлавливаемых ошибок.


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5523
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.09.17 17:30. Заголовок: Haz пишет: Если не ..


Haz пишет:

 цитата:
Если не помогла , то в параметрах безопасности экселя нужно запретить эти предупреждения.


Я писал выше, что ручное разрешение на этот файл позволяет избавиться от ошибки.
Но хочется сделать открытие файла по максиму - без ошибок !
Самое лучшее конечно предложение от Петра, сделать BEGIN SEQUENCE на открытие файла.
Кстати проверял и Эксель 2014 и 2016 - файлы нормально открываются/конвертируются.
У меня два файла в тесты записаны, вообще на диске лежат с 2014 года, может битые какие-то.
Хотя Эксель 2003 их просто на ура конвертирует....
Чем дальше в лес, тем больше дров.

Нашел кто создаёт такие хитро-битые файлы, вот один в качестве примера - https://cloud.mail.ru/public/Fd2b/kTZEAo8Nj


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6590
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.09.17 17:45. Заголовок: Haz пишет: как из ..


Haz пишет:

 цитата:
как из VBA не видел


да полно ссылок если погуглить.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5525
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.09.17 17:49. Заголовок: Dima попробуй у себя..


Dima попробуй у себя открыть этот файл - https://cloud.mail.ru/public/Fd2b/kTZEAo8Nj !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6591
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.09.17 18:29. Заголовок: Andrey пишет: Dima ..


Andrey пишет:

 цитата:
Dima попробуй у себя открыть этот файл


у меня Excel 2003

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1126
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 18.09.17 22:48. Заголовок: Dima пишет: да полн..


Dima пишет:

 цитата:
да полно ссылок если погуглить.


Может и полнно, но мне не надо. Давно листал, и для себя запомнил, что эта гадость без танцев не отключается. И надо все валить на админа.
Если с тех времен ссылок накидали то это талько хорошо.
Ps. Вспоминается анекдот :
Тяжело спорить с товарищем сталиным, ты ему цитату, а он тебе ссылку

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3593
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 19.09.17 09:47. Заголовок: По поводу открытия ф..


По поводу открытия файлов в последних версиях Office: 2010 с обновлениями, 2013, 2016.
Иногда помогают такие танцы с бубном, причем бубен обязательно должен быть изготовлен из шкур священных животных из Тибета, а шаман должен иметь сертификат от далай-ламы.

Вот рецепты, которые я находил:

Отключение проверки файлов офиса при открытии: Создайте в реестре ключ
EnableOnLoad типа DWORD со значением 0 по пути
HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\<Версия вашего Офиса,
например 14.0 для 2010>\<Приложение, например
Excel>\Security\FileValidation\
или
HKEY_CURRENT_USER\Software\Microsoft\Office\<Версия вашего Офиса,
например 14.0 для 2010>\<Приложение, например
Excel>\Security\FileValidation\
Откройте вкладку Файл, чтобы переключиться в представление Microsoft Office
Backstage. В меню Справка выберите пункт Параметры; отобразится диалоговое
окно Параметры. Щелкните элемент Центр управления безопасностью и нажмите
кнопку Параметры центра управления безопасностью. В центре управления
безопасностью щелкните пункт Параметры блокировки файлов. Установите флажок
Открывать выбранные типы файлов в режиме защищенного просмотра и разрешить
редактирование. На приведенном ниже рисунке показана область Параметры
блокировки файлов центра управления безопасностью.
Было слелано следующее на компьютере: 1. Microsoft Office 2010 x32 был
удален с компьютера, и установлен Microsoft Office 2013 x64 2. В реестре
изменен след. параметр
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager\SubSystems] на SharedSection=1024,20480,1024 согласно ссылке
http://www.commix.ru/settings/desktop-heap.html Смотреть
- http://www.pixic.ru/i/2030R7U3V8X797r4.jpg В результате работы с большим
количеством открытых экслевских, вордовских документов, вышеописанная
проблема с зависанием приложений не появляется.

и еще:


На некоторых файлах строка Documents.Open последовательно зависает, причем никаких бросающихся в глаза различий между этими файлами и остальными нет. Ворд 2007, хотя файлы в формате doc. Раньше была проблема с длинными именами файлов - файл с длинным именем зависал, но проходил нормально после его переименования в нечто более короткое. Сейчас весь path включая имя файла - порядка 20 символов.

http://www.sql.ru/forum/1135099/servis-zavisaet-pri-popytke-otkryt-vord

Нашел!
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Word\Resiliency\DisabledItems
Вот это если почистить, то оно начинает работать. Буду чистить программно. Всем спасибо!

Иногда помогает, иногда нет.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5526
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.09.17 11:09. Заголовок: Pasha СПАСИБО ! :sm..


Pasha СПАСИБО !

Петр пишет:

 цитата:
1. У обьекта oBook нет метода SaveAs



Делаю так:
   oExcel := TOleAuto():New( "Excel.Application" ) 
oExcel:Visible := .F.
oExcel:DisplayAlerts := .F.
oExcel:Workbooks:Open( cFileName, 0 )
oExcel:SaveAs( cFileSave, xlCSV ) // строка 111
oExcel:Quit()

Вылет по ошибке:
Error Excel.Application/0 S_OK: SAVEAS
Called from TOLEAUTO:SAVEAS(0)
Called from XLSTOCSV(111) in module: Form_convert.prg


Если делаю так:
   oExcel := TOleAuto():New( "Excel.Application" ) 
oExcel:Visible := .F.
oExcel:DisplayAlerts := .F.
oExcel:Workbooks:Open( cFileName, 0 )
oBook := oExcel:ActiveSheet()
oBook:SaveAs( cFileSave, xlCSV ) // строка 111
oExcel:Quit()

Вылета по ошибке НЕТ.

И как тогда правильно писать ? Может ещё что-то нужно добавить/исправить в коде


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3594
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 19.09.17 11:19. Заголовок: Метод SaveAs есть у ..


Метод SaveAs есть у объекта WorkBook, и Chart и WorkSheet
Так что правильно как раз:

oBook:SaveAs( cFileSave, xlCSV )

для таких вопросов есть хелп по Excel VBA, а еще такая классная вещь, как поисковик в браузере.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5527
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.09.17 11:47. Заголовок: Pasha пишет: для та..


Pasha пишет:

 цитата:
для таких вопросов есть хелп по Excel VBA, а еще такая классная вещь, как поисковик в браузере.



Спасибо ! На них не надеюсь, важно как на форуме у нас напишут !

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3595
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 19.09.17 12:45. Заголовок: А набрать в яндексе ..


А набрать в яндексе "Excel SaveAs" влом ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5529
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.09.17 13:32. Заголовок: Pasha пишет: А набр..


Pasha пишет:

 цитата:
А набрать в яндексе "Excel SaveAs" влом ?


Да смотрел я. Просто засомневался, из-за этого и спрашивал...

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3596
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.09.17 07:50. Заголовок: Andrey пишет: oBook..


Andrey пишет:

 цитата:
oBook := oExcel:ActiveSheet()



Мне одному кажется, что в этом коде что-то не так ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6592
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.09.17 08:49. Заголовок: В ячейке имеем QWERT..


В ячейке имеем QWERTYASDEFG , нужно ASDEFG сделать жирным шрифтом.
Руками получается и макрос смотрел , но не пойму как сделать на Harbour.
Делал кто такие вещи ?


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3597
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.09.17 09:14. Заголовок: oRange:Characters(1,..


oRange:Characters(1, 6):Font:Bold := .t.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6593
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.09.17 09:23. Заголовок: Pasha Работает, спа..


Pasha
Работает, спасибо !
Попробовал на удачу еще так
oSheet:Cells( 1, 2 ):Characters(1, 6):Font:Bold := .t.
тоже пашет

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5540
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.09.17 15:07. Заголовок: Вот опять нашёл бяку..


Вот опять нашёл бяку для Экселя в МиниГуи - если имена папки на русском, то записать книгу в файл не может !
Ошибка:
Error 8919500/-2147352573 DISP_E_MEMBERNOTFOUND: SAVEAS
Called from TOLEAUTO:SAVEAS(0)
Called from MYCREATEONEXLS(97) in module: util_xls.prg


Строка 97: oWorkBook:SaveAs( cFileName, xlWorkbookNormal )

Блин, а нельзя ли как то ОЛЕ это исправить ?
А то получаются программы на МиниГуи (терминалку не пробовал)
урезанного профиля, папки на русском не создавать .. и т.д.

Во всех других языках - каталоги и файлы давно на русском языке используют.



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3608
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.09.17 16:46. Заголовок: Если дело в кодировк..


Если дело в кодировке, тогда вопрос: в поставке минигуи уникодный харбор или нет ?

Содержание ошибки: объект oWorkBook не содержит метода SaveAs
Какого класса объект oWorkBook - фиг его знает. При правильном присваивании должен быть класса WorkBook, а правильным ли оно было ?

На прошлой странице попадался код:
oBook := oExcel:ActiveSheet()

объект oBook оказывается класса WorkSheet, что приводит к непоняткам при анализе кода.
А что насчет oWorkBook ?


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5542
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.09.17 17:10. Заголовок: Pasha пишет: А что ..


Pasha пишет:

 цитата:
А что насчет oWorkBook ?


Вот про это я и спрашивал, код был из разных источников, под 2003-2007 везде работает, а на 2014-2016 уже вылетает.
Как правильно написать код (чтобы и другие ориентировались на это) ?
#include "excel.ch" 
....
oExcel := TOleAuto():New( "Excel.Application" )
oExcel:Visible := .F. // НЕ Показывать EXCEL
oExcel:DisplayAlerts := .F. // не приставать с запросами
oExcel:Workbooks:Open( cFileName, 0 )
oBook := oExcel:ActiveSheet()

IF FILE( cFileSave )
// Чтобы Excel не приставал в вопросом "Такой файл уже существует" или захвачен другим Excel
nErr := DELETEFILE(cFileSave)
IF nErr == 0
oBook:SaveAs( cFileSave, xlCSV ) // xlCSV - см. #include "excel.ch"
lRet := .T.
ELSE
cMsg := "Ошибка удаления файла: "+cFileSave+" !; Ошибка: "+HB_NtoS(nErr)+";;"
cMsg += "Файл занят другим процессом в памяти !;;"
cMsg += REPLICATE( "-._.", 16 ) + ";;"
cMsg := AtRepl( ";", cMsg, CRLF )
MsgStop( cMsg , "Ошибка!" )
lRet := .F.
ENDIF
ELSE
oBook:SaveAs( cFileSave, xlCSV ) // xlCSV - см. #include "excel.ch"
lRet := .T.
ENDIF

oExcel:Quit()
Return lRet


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3609
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.09.17 18:26. Заголовок: Ээ, Андрей, ты переп..


Ээ, Андрей, ты перепутал лист и книгу, и до сих пор не заметил, что ли ?

oBook := oExcel:ActiveSheet()

это лист. Только имя переменной надо давать что-то вроде oSheet

oBook := oExcel:ActiveWorkBook()

а это книга

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5543
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.09.17 18:37. Заголовок: Pasha пишет: Ээ, Ан..


Pasha пишет:

 цитата:
Ээ, Андрей, ты перепутал лист и книгу, и до сих пор не заметил, что ли ?


Не заметил...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5544
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.09.17 19:30. Заголовок: Но все равно дело не..


Но все равно дело не в этом... А в русских буквах ....

Протестировал следующее:
WinXP - {12.0, "Excel 2007"} - папка: XLS_to_CSV
Win7 - {16.0, "Excel 2014"} - папка: XLS_to_CSV
Функция записи работает без ошибок !!!

WinXP - {12.0, "Excel 2007"} - папка: XLS_to_CSV_русские_буквы
Win7 - {16.0, "Excel 2014"} - папка: XLS_to_CSV_русские_буквы
Вылетает с ошибкой:
Error 2201828/-2147352573 DISP_E_MEMBERNOTFOUND: SAVEAS
Called from TOLEAUTO:SAVEAS(0)
Called from MYCREATENEWXLS(105) in module: util_xls.prg


Вот сама функция:
Скрытый текст


Может в коде что-то нужно добавить ? Или не будут работать ПАПКИ с русскими именами ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3610
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.09.17 19:53. Заголовок: В харборе допускаютс..


В харборе допускаются русские имена файлов и папок.
Андрей, нужен контекст.
Кодовая страница, как я понимаю, выставлена RU1251 ?
cFileSave в какой кодовой странице ?
Далее, еще раз. Харбор в поставке minigui уникодный ?
Далее. Насколько я помню, в поставке minigui идет своя версия библиотеки hbole, которая по сути есть очень устаревший на много-много лет вариант оригинальной библиотеки харбора. Лучше использовать не ее, а оригинальную библиотеку.
А самым лучшим решением было бы исключить эту библиотеку из поставки minigui, и использовать оригинальную.

Кстати, если выполнить этот код с харбором не из поставки minigui, думаю, проблем не возникнет. Во всяком случае, у меня проблем с передачей русских имен файлов в продукты office через ole нет.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5545
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 27.09.17 20:28. Заголовок: Pasha пишет: Кодова..


Pasha пишет:

 цитата:
Кодовая страница, как я понимаю, выставлена RU1251 ?
cFileSave в какой кодовой странице ?


1) Да !
2) если файл в RU1251 тогда cFileSave тоже должна быть в RU1251 или надо как то по другому задавать ?

Pasha пишет:

 цитата:
Далее, еще раз. Харбор в поставке minigui уникодный ?


Не знаю. Нужно у Григория спрашивать...
Залез в папку с Харбором - Version: 3.2.0dev (r1709261254)

Pasha пишет:

 цитата:
Далее. Насколько я помню, в поставке minigui идет своя версия библиотеки hbole, которая по сути есть очень устаревший на много-много лет вариант оригинальной библиотеки харбора. Лучше использовать не ее, а оригинальную библиотеку.
А самым лучшим решением было бы исключить эту библиотеку из поставки minigui, и использовать оригинальную.



Нет сейчас в поставке hbole.lib в папке MiniGUI\Lib
Берется из стандартой поставки MiniGUI\Harbour\lib\hbole.lib
В папке Харбора такое написано:
- hbole.lib: Harbour OLE Library. Part of xHarbour core
Copyright 2002 Jose F. Gimenez <jfgimenez@wanadoo.es>
Source code available in the folder \source\HbOLE.

Вот у SergKis цифирьки ошибки немного другие: Error 8198764/-2147352573 DISP_E_MEMBERNOTFOUND: SAVEAS

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3611
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.09.17 20:41. Заголовок: Ну как бы из приведе..


Ну как бы из приведенного примера не видно, как заполняется cFileSave. Лучше проверить, и убедиться, что кодировка та, что надо.
А в харборе модуль работы с ole находится в библиотеке hbwin, так что hbolе наверняка его устаревшая версия из поставки minigui.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3612
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 27.09.17 21:34. Заголовок: Немного разобрался. ..


Немного разобрался. Харбор из поставки минигуи уникодный, но сам минигуи не уникодный.

Библиотека hbole.lib собрана из модуля 2009 года. Однако, 8(!) лет прошло.
/*
* $Id: win_ole.c 11529 2009-06-26 01:11:11Z vszakats $
*/

Но в поставку харбора также включена уникодная библиотека hbwin со свежим модулем ole. Лучше конечно использовать его.
Надо убрать hbole.lib из батников сборки проекта, добавить вместо нее hbwin.lib, и вместо

oExcel := TOleAuto():New( "Excel.Application" )

вызывать

oExcel := win_oleCreateObject("Excel.Application")

и ПРОВЕРИТЬ (три, а лучше семь раз), кодировку переменной cFileSave

Дополню: hbole.lib из сборки убрать не получится, так как этот класс использует TSBrowse. Тогда пусть в сборке будут обе библиотеки.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5546
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.09.17 00:00. Заголовок: Pasha пишет: Надо у..


Pasha пишет:

 цитата:
Надо убрать hbole.lib из батников сборки проекта, добавить вместо нее hbwin.lib, и вместо
oExcel := TOleAuto():New( "Excel.Application" )
вызывать
oExcel := win_oleCreateObject("Excel.Application")



Да мне Петр давно советовал уйти с hbole.lib, а я всё никак не решусь.
Код перестаёт работать... Как делать - не знаю...

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3613
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.09.17 12:57. Заголовок: Скачиваю hmg-17.09.7..


Скачиваю hmg-17.09.7z
Собираю пример из samples\applications\DBFview\source
Запускаю dbfview, открываю файл dbf.
Жму File - SaveAs/Export
Выбираю формат xls, ввожу имя файла по русски
Файл успешно сохраняется.
Смотрю сырцы. Там маленькая процедура:

Static Procedure SaveToXls( cAlias, cFile )
*--------------------------------------------------------*
Local oExcel, oSheet, oBook, aColumns, nCell := 1

oExcel := TOleAuto():New( "Excel.Application" )
if Ole2TxtError() != 'S_OK'
MsgStop('Excel is not available!', PROGRAM )
RETURN
endif
oExcel:Visible := .F.
oExcel:WorkBooks:Add()
oSheet := oExcel:Get( "ActiveSheet" )

Aeval( (cAlias)->( DBstruct(cAlias) ), { |e,i| oSheet:Cells( nCell, i ):Value := e[DBS_NAME] } )
do while !(cAlias)->( EoF() )
nCell++
aColumns := (cAlias)->( Scatter() )
aEval( aColumns, { |e,i| oSheet:Cells( nCell, i ):Value := e } )
(cAlias)->( DBskip() )
enddo

oBook := oExcel:Get("ActiveWorkBook")
oBook:Title := cAlias
oBook:Subject := cAlias
oBook:SaveAs(cFile)
oExcel:Quit()

Return

Вывод: все работает и с библиотекой hbole.lib. Только надо не лажануться и все правильно сделать.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5547
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.09.17 13:27. Заголовок: Pasha пишет: Вывод:..


Pasha пишет:

 цитата:
Вывод: все работает и с библиотекой hbole.lib. Только надо не лажануться и все правильно сделать.



Сделал папку D:\TEMP2_Русские_Буквы\Проверка букв\Тест новый - запускаю Xls_to_Csv.exe, xls-файл создаёт...
В папке где собраны все мои проекты подключаю через SUBST - вот там эта программа xls-файл НЕ СОЗДАЁТ !!!
Блин... Опять Win8.1 ставит подножку на пустом месте...



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3614
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.09.17 13:28. Заголовок: Комментирую фрагмент..


Комментирую фрагмент в этой функции
/*
oExcel := TOleAuto():New( "Excel.Application" )
if Ole2TxtError() != 'S_OK'
MsgStop('Excel is not available!', PROGRAM )
RETURN
endif
*/
вместо него добавляю:

oExcel := win_oleCreateObject( "Excel.Application" )

собираю, делаю тоже самое. Работает.
И со старой библиотекой hbole, и с новой hbwin. Ну хоть ты тресни, никак сломать не получается.


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3615
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.09.17 13:33. Заголовок: А сам Excel сохраняе..


А сам Excel сохраняет файлы на сабстнутый диск ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5548
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.09.17 13:39. Заголовок: Pasha пишет: А сам ..


Pasha пишет:

 цитата:
А сам Excel сохраняет файлы на сабстнутый диск ?



Да. Даже если обозвать папку \PROJECT\XLS_to_CSVII_Русские_буквы

А функция MyCreateNewXls(cFileName) - вылетает, хотя код и там и там почти одинаковый....
Короче что-то с доступом к папке...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5549
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.09.17 13:45. Заголовок: Вот так поставил: ..


Вот так поставил:
  
cTitle := "Тестовая таблица для конвертирования Xls в Csv"
......
oWorkBook := oExcel:Get("ActiveWorkBook")
oWorkBook:Title := cTitle
oWorkBook:Subject := cTitle
oWorkBook:SaveAs( cFileName, xlWorkbookNormal ) // #include "excel.ch"
oExcel:Quit()

и стал записываться xls-файл в папку \PROJECT\XLS_to_CSVII_Русские_буквы где SUBST назначен.
Не хватало 3-х строчек кода !

СЛЕДУЮЩИЙ ВЫВОД ПРАВИЛЬНЫЙ :
Pasha пишет:

 цитата:
Вывод: все работает и с библиотекой hbole.lib. Только надо не лажануться и все правильно сделать.



Спасибо БОЛЬШОЕ за наводку !


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3616
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 28.09.17 13:48. Заголовок: Буквально позавчера ..


Буквально позавчера делал заполнение бланка в Excel.
Там всего лишь вставляется табличка, после которой идут подписи.
Так вот, после заполнения таблички высота нескольких строк в подписи сама собой увеличилась, и стала где-то на полметра.
Почему Excel решил так сделать - фиг его знает. Я так и не разобрался.

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 552
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 29.09.17 11:41. Заголовок: Pasha пишет: Так во..


Pasha пишет:

 цитата:
Так вот, после заполнения таблички высота нескольких строк в подписи сама собой увеличилась, и стала где-то на полметра.


У меня такое бывает на Office начиная с версии 2010, если выполнены два условия:
1) зафиксирована (заморожена) часть строк, например, шапка таблицы
.AND.
2) удаляется несколько строк, как выше (в заголовке), так и ниже "заморозки" (в теле таблицы).

В версиях до Excel 97 включительно все работает без проблем, как победить это на более современных версиях - так и не понял пока, из шаманств помогло: сначала удалять все что нужно, а только потом "морозить". Но иногда и не помогает...

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6600
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.09.17 16:22. Заголовок: Pasha пишет: Так во..


Pasha пишет:

 цитата:
Так вот, после заполнения таблички высота нескольких строк в подписи сама собой увеличилась, и стала где-то на полметра.


Была такая штука когда загонял в ячейку MEMO а в нем переводы строки жили , поэтому чикаю их через Memotran

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3617
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.09.17 17:42. Заголовок: У меня все-таки друг..


У меня все-таки другой случай. Самопроизвольно увеличилась высота пустых строк, в ячейки которых ничего не заносилось. Заполнялась таблица перед этими строками.
Почему - непонятно. Бланк скачал из инета, он совсем простой. Макросов нет.
Я как-то выкрутился и уже забыл. От современного софта почти каждый день какое-то чудо узнаешь. Ну или каждую неделю.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6601
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.09.17 21:33. Заголовок: Pasha а выложи прос..


Pasha
а выложи простой примерчик , хочу у себя чекануть + скрин где у тебя лажа с высотой

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3618
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 02.10.17 16:24. Заголовок: Уже и не получается ..


Уже и не получается воспроизвести строки полуметровой высоты. Бланк то я поправил, удалением и добавлением тех строк, которые портятся, и документ, который давал тот эффект, не сохранил.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3630
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.11.17 11:59. Заголовок: Excel 2010. В книге ..


Excel 2010. В книге два листа.
Выдаю:

oSheets:Item(2):Delete()

DisplatAlerts не выключал. Запрос на удаление листа не выдается. Метод Delete возвращает значение .t.. Лист из книги не удаляется, как был, так и остался. В чем может быть дело ?
Непонятный глюк ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3631
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 07.11.17 12:43. Заголовок: Вопрос снят. Оказало..


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

http://www.sql.ru/forum/114247/pochemu-ne-udalyautsya-listy-v-excel

и лист стал удаляться так:

oExcel:DisplayAlerts := .f.
oSheets:Item(2):Delete()
oExcel:DisplayAlerts := .t.

Смутило поведение сего продукта, отличное от его же доки.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 540
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 01.12.17 18:40. Заголовок: Всем привет ! Вопро..


Всем привет !

Вопрос несколько не в тему - не писал ли кто макроса загрузки DBF в Excel. Только грузить
этот DBF надо через ADO

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 304
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 02.12.17 10:31. Заголовок: fil пишет: Только г..


fil пишет:

 цитата:
Только грузить
этот DBF надо через ADO



Так в сырцах FW посмотри. Например FW_AdoToExcel может на мысль натолкнет

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 541
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 02.12.17 21:43. Заголовок: Посмотрю, спасибо. ..


Посмотрю, спасибо.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 120
Зарегистрирован: 09.09.11
ссылка на сообщение  Отправлено: 04.12.17 14:26. Заголовок: Добрый день, коллеги..


Добрый день, коллеги. Мы просто открываем в Excel файл DBF и потом записываем с нужным расширением (Xls/Xlsx)
Dbf_F1 - имя файла DBF
Xls_F1 - имя файла Excel

Function Format_Exl1(Dbf_F1,Xls_F1)
Local oExcel,oSheet,oBook,oAs,oRange
oExcel :=ToleAuto():New( "Excel.Application" )
oExcel :Visible:=.F.
oExcel :Workbooks:Open(Dbf_F1)
oExcel :Set("DisplayAlerts",.F.)
oBook :=oExcel:ActiveWorkBook
oSheet :=oExcel:ActiveSheet
oRange :=oExcel:ActiveCell:SpecialCells(xlLastCell)
oAs :=oExcel:ActiveSheet()
cRecno :=oRange:Row
cColumn:=oRange:Column
oAs:Range(oAs:Cells(1,1),oAs:Cells(cRecno,cColumn)):Font:Name='Calibri'
oAs:Range(oAs:Cells(1,1),oAs:Cells(cRecno,cColumn)):Font:Size=12
oAs :Columns(2):Font:Bold:=.T.
*** другие манипуляции с файлом
***
oBook :SaveAs(Xls_F1)
oExcel:Set("DisplayAlerts",.T.)
oExcel:Quit()
oAs :=Nil
oExcel:=Nil
oRange:=Nil
oSheet:=Nil
Release oExcel,oSheet,oBook,oAs,oRange
Return(Nil)



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 306
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 05.12.17 10:46. Заголовок: ММК пишет: Так в сы..


ММК пишет:

 цитата:
Так в сырцах FW посмотри.



Или в примерах -
* adoxl.prg
* Author: G.N.Rao, India
function Main()

local oWnd

oCn := FW_OpenAdoConnection( TrueName( "xbrtest.mdb" ) )

DEFINE WINDOW oWnd
DEFINE BUTTONBAR oWnd:oBar SIZE 100,32 2007
DEFINE BUTTON OF oWnd:oBar PROMPT "Export To Excel" CENTER ACTION ExportToExcel()
DEFINE BUTTON OF oWnd:oBar PROMPT "Link To Excel" CENTER ACTION LinkToExcel()

ACTIVATE WINDOW oWnd CENTERED

return (0)


static function ExportToExcel()

local oRs, oBook, oSheet, n

CursorWait()

oRs := FW_OpenRecordSet( oCn, "CUSTOMER" )
if oExcel == nil
oExcel := ExcelObj()
endif
oExcel:ScreenUpdating := .f.
oBook := oExcel:WorkBooks:Add()
oSheet := oExcel:ActiveSheet

for n := 1 to oRs:Fields:Count()
oSheet:Cells( 1, n ):Value := oRs:Fields( n - 1 ):Name
next

// THIS ONE LINE OF CODE EXPORTS ENTIRE RECSET TO EXCEL
n := oSheet:Cells( 2, 1 ):CopyFromRecordSet( oRs )
//
oRs:Close()

CursorArrow()
MsgInfo( "Exported " + cValToChar( n ) + " Rows to Excel" )
oExcel:ScreenUpdating := .t.
oExcel:visible := .t.
ShowWindow( oExcel:hWnd, 3 )
BringWindowToTop( oExcel:hWnd )

return nil



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6713
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 31.01.18 20:44. Заголовок: Как сменить размер ш..


Как сменить размер шрифта комментария к ячейке таблицы ?
Макрос молчит как партизан

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 771
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 01.02.18 11:07. Заголовок: А у меня общается ..


А у меня общается

 цитата:

Sub Макрос1()
'
' Макрос1 Макрос
' Макрос записан 01.02.2018 (Vl)
'

Range("M196").AddComment
Range("M196").Comment.Visible = False
Range("M196").Comment.Text Text:="Vl:" & Chr(10) & "два"
Range("N203").Select
End Sub





Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6714
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.02.18 11:10. Заголовок: Vlad04 У меня тоже ..


Vlad04
У меня тоже , но я хочу увеличить шрифт комента и вот тут макрос молчит , хотя я руками его могу поменять

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 772
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 01.02.18 11:13. Заголовок: не то..


не то

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 773
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 01.02.18 11:28. Заголовок: шрифт изменение не п..


шрифт изменение не пишется в макрос

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6715
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.02.18 11:51. Заголовок: Vlad04 пишет: шрифт..


Vlad04 пишет:

 цитата:
шрифт изменение не пишется в макро


я про это сразу и написал

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1170
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 01.02.18 16:25. Заголовок: Через Shape


Шрифт меняется через пропертю Shape
вот пример из VB
 
Dim ws As Worksheet
Dim cmt As Comment
For Each ws In ActiveWorkbook.Worksheets
For Each cmt In ws.Comments
With cmt.Shape.TextFrame.Characters.Font
.Name = "Times New Roman"
.Size = 12

End With
Next cmt
Next ws


Ну если совсем в лоб то так
 
oSheet:Range("A1"):AddComment()
oSheet:Range("A1"):Comment:Visible = .T.
oSheet:Range("A1"):Comment:Text("Same text",1, 1 )
oSheet:Range("A1"):Comment:Shape:TextFrame:Characters:Font:Name = "Times New Roman"
oSheet:Range("A1"):Comment:Shape:TextFrame:Characters:Font:Size = 14




Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6716
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 01.02.18 16:32. Заголовок: Haz Да получилось ,..


Haz
Да получилось , в лоб так сказать.
oSheet:cells(j,3):Comment:Shape:TextFrame:Characters:Font:Size:=12

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 372
Зарегистрирован: 03.12.08
ссылка на сообщение  Отправлено: 05.02.18 22:54. Заголовок: Как красиво :) ..


Как красиво :)

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 72
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 17.12.19 15:02. Заголовок: Мужики... кто нибуд..


Мужики... кто нибудь пробовал из Harbor создавать графики в Excel ..?

Подскажите пару команд ....

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7151
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 17.12.19 15:45. Заголовок: Alex_Cher C:\Mi..


Alex_Cher
C:\MiniGUI\SAMPLES\BASIC\OLE\

+
http://clipper.borda.ru/?1-2-0-00000033-000-0-0-1179749939

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 73
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 20.12.19 08:53. Заголовок: Наткнулся на "гр..


Наткнулся на "грали" .... помогите...

вводим в ячейку excel данные

oWorkBook:Cells( line, massiv[_i]) := 135

Можно ли из Harbor определить адрес данной ячейки в формате excel для использования фомулах,
допустим =СУММ(N8: .....) или как это можно оботи ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3908
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.12.19 10:42. Заголовок: Function ExcelAdr(nR..


Function ExcelAdr(nRow, nCol)
Return if(nCol>26,Chr(Int((nCol-1)/26)+64),'')+Chr((nCol-1)%26+65) + StrTrim(Int(nRow))

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 74
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 20.12.19 12:33. Заголовок: Pasha, спасибо тебе..


Pasha, спасибо тебе большое ... не думал что так все просто.

Только в конце команды я немножко подправлю. Вместо + StrTrim(Int(nRow))
.... + Allrtim( Str( Int( nRow)))

Функция StrTrim() по моему была в Clipper, в Harbor ее нет...

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7152
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.12.19 12:39. Заголовок: Alex_Cher пишет: + ..


Alex_Cher пишет:

 цитата:
+ Allrtim( Str( Int( nRow)))


Hb_ntos(nRow)

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3909
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.12.19 13:36. Заголовок: Alex_Cher пишет: Фу..


Alex_Cher пишет:

 цитата:
Функция StrTrim() по моему была в Clipper, в Harbor ее нет...



Прошу прошения, это моя функция

Function StrTrim(n)
Local c := AllTrim(Str(n))
if At('.', c) # 0
c := RemRight(c, '0')
c := RemRight(c, '.')
endif
Return c

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 75
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 28.01.20 15:01. Заголовок: Мужики, кто плотно с..


Мужики, кто плотно с excel работает через Harbor?
Над элементарной хренью бьюсь часами... Документации нет, из макросов нихрена ничего не понятно...
Короче ячейку обвести рамкой все понятно -

oWorkBook:Ceels( 3,12):Borders():Weight := 3

А как обвести группу ячеек одной рамкой ?

oWorkBook:Range( oWoorkBook:Ceels( 3,12), ......... ):Borders():Weight := 3 обводит рамкой каждую ячейку, не подходит...

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7157
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 28.01.20 17:06. Заголовок: как то так oSheet:Ra..


как то так
oSheet:Range(osheet:cells(i,1),osheet:cells(i+3,2)):BorderAround( xlContinuous, xlThin)

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 76
Зарегистрирован: 18.06.15
ссылка на сообщение  Отправлено: 29.01.20 12:25. Заголовок: Dima, спасибо за пом..


Dima, спасибо за помощь... Поделись где копаешь документацию?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7158
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 29.01.20 12:31. Заголовок: Alex_Cher пишет: По..


Alex_Cher пишет:

 цитата:
Поделись где копаешь документацию?


на форуме ищу и гуглю

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 158
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 19.11.21 18:47. Заголовок: Как переименовать книгу?


Печатая отчёты через Excel потребовалось поменять имя книги Книга1 на своё,
но так и не разобрался как.
Подскажите, кто сталкивался с этой задачей.

oExcel := TOleAuto():New('Excel.Application')
oExcel:Visible := .F.
oBook := oExcel:WorkBooks:Add()
oSheet := oExcel:Get('ActiveSheet')
...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7130
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.21 00:11. Заголовок: В этой же теме я дав..


В этой же теме я давал как работать с книгами...
Как их скрывать от пользователя и т.д.
Читай предыдущие темы, я уже не помню где это, но тот же вопрос задавал ранее в этой теме.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7483
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.11.21 10:11. Заголовок: Andrey Ты очень пом..


Andrey
Ты очень помог человеку

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7131
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.21 11:55. Заголовок: Dima пишет: Ты очен..


Dima пишет:

 цитата:
Ты очень помог человеку


Ну занят очень пока.
А я с таким разбирался и писал в этой теме чуть раньше.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1808
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.11.21 15:27. Заголовок: Не пойму


что то туплю
Вопрос в том как сделать :Save() или :SaveAs() ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7484
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.11.21 15:39. Заголовок: Haz пишет: Вопрос в..


Haz пишет:

 цитата:
Вопрос в том как сделать :Save() или :SaveAs() ?


Да это понятно с Save...
Имелось в виду следующее: создали новую книгу EXCEL , так вот в заловке
сразу торчит Книга1 - Microsoft Excel , вот там и хочет поменять и чую спинным
мозгом что не получится и только через сохранение

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1809
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.11.21 15:54. Заголовок: Dima пишет: чую сп..


Dima пишет:

 цитата:
чую спинным
мозгом что не получится и только через сохранение


Согласен с твоим спинным мозгом, не поспоришь

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3945
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 20.11.21 16:03. Заголовок: Dima пишет чую спинн..


Dima пишет
 цитата:
чую спинным мозгом что не получится и только через сохранение


Так может исп. hbxlsxml.lib для создания Sheet, а потом работать OLE
У Игоря был, где то выкладывал, пример простой с dbf получение xml, сделать Книги сколько надо и загрузить в OLE.
кусочек из своего варианта с Sheet ... Скрытый текст

aSheet - массив названий книг и Len(aSheet) - их кол-во

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1810
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.11.21 16:33. Заголовок: Haz пишет: Согласен..


Haz пишет:

 цитата:
Согласен с твоим спинным мозгом, не поспоришь


Забыл написать.
Свойство NAME у объекта книга только чтение

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7132
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.21 19:22. Заголовок: alex_II пишет: Печа..


alex_II пишет:

 цитата:
Печатая отчёты через Excel потребовалось поменять имя книги Книга1 на своё,
но так и не разобрался как.
Подскажите, кто сталкивался с этой задачей.



Тема Снова EXCEL (продолжение)
http://clipper.borda.ru/?1-4-0-00001115-000-260-0-1628243986
Вот с этим я разобрался:
 
Сделал тест, кому будет интересно:
oExcel:WorkBooks:Add()
oExcel:Visible := .T.
oBook := oExcel:ActiveWorkBook
oSheet := oExcel:ActiveSheet()

oSheet := oBook:Sheets(2)
oSheet:name := "МОЁ_НЕ_ТРОГАТЬ!" // имя листа изменить

nCnt := oBook:Sheets:Count // количество листов в книге
cMsg := "Количество листов в книге = " + HB_NtoS(nCnt) + ";"

FOR EACH oSheet IN oBook:WorkSheets
cMsg += oSheet:Name + ";"
NEXT

cMsg := StrTran(cMsg, ";", CRLF )
MsgInfo(cMsg)

oSheet:Cells:Font:Name := "Arial"
oSheet:Cells:Font:Size := 12

oSheet:Cells( 3, 1 ):Value := "City:"
oSheet:Cells( 3, 2 ):Value := "Moskow"
....... // далее запись во 2 лист

oSheet:Visible := .F. // скрыть лист 2

oBook:Sheets(3):Select() // перейдём на 3 лист
oSheet := oExcel:ActiveSheet()
oSheet:Visible := .F. // скрыть лист 3

oBook:Sheets(1):Select() // вернутся на 1 лист
oSheet := oExcel:ActiveSheet()
oSheet:name := "Мой_отчёт" // имя листа изменить
...........


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7485
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.11.21 19:47. Заголовок: Haz пишет: Свойство..


Haz пишет:

 цитата:
Свойство NAME у объекта книга только чтение


Но если хочется сменить заголовок окна Excel то можно сделать так.
 
local oExcel, oWorkBook, oWindows
local nI, nCount, w , oSheet
REQUEST HB_CODEPAGE_RU1251
hb_cdpSelect( "RU1251" )

oExcel := win_oleCreateObject( "Excel.Application" )

if !empty(oExcel)

? oExcel:version
oSheet := oExcel:ActiveSheet()
? oExcel:hwnd
oWindows := oExcel:Windows()
oWorkBook := oExcel:WorkBooks:Add()

nCount := oWindows:Count
oWindows[1]:Caption := "Блабла" + hb_NtoS( nCount )

for each w in oWindows
? w:caption
? oExcel:hwnd
next

oExcel:Visible := .T.

else
? "Error: MS Excel not available. [" + win_oleErrorText() + "]"
endif




Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7133
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.11.21 19:56. Заголовок: Dima пишет: Но если..


Dima пишет:

 цитата:
Но если хочется сменить заголовок окна Excel то можно сделать так.


Классно ! А я не знал что так тоже можно !

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1811
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.11.21 22:16. Заголовок: Dima пишет: Но если..


Dima пишет:

 цитата:
Но если хочется сменить заголовок окна


Полезно

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 159
Зарегистрирован: 12.07.06
ссылка на сообщение  Отправлено: 21.11.21 06:13. Заголовок: Как переименовать книгу?


Всем спасибо за внимание, но похоже проблема решения не имеет.
Вариант через сохранение файла не подходит.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1730
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 21.11.21 13:06. Заголовок: alex_II пишет: Всем..


alex_II пишет:

 цитата:
Всем спасибо за внимание, но похоже проблема решения не имеет.
Вариант через сохранение файла не подходит.



Из Википедии (куда без нее )
Решение — завершение процесса выбора, которое обычно (иногда неправильно) фиксирует процесс во времени.
Принятие решения рассматривается как когнитивный процесс, результатом которого является выбор мнения или курса действий среди нескольких альтернативных возможностей.

Еще одна альтернативная возможность с использованием пользовательского шаблона


 цитата:
procedure main(...) 

local oExcel, oWorkBook
local cTPath
local cTDir := "tmplts", cTName := "EBook.xltx"

oExcel := win_oleCreateObject("Excel.Application")

if !empty(oExcel)
? oExcel:Version

cTPath := hb_DirSepAdd(hb_DirBase() + cTDir)

oWorkBook := oExcel:WorkBooks:Add(cTPath + cTName)

oExcel:Visible := .T.
else
? "Error: MS Excel not available. [" + win_oleErrorText() + "]"
endif

return NIL




В рабочем каталоге есть вложенная папка tmplts, а в ней - шаблон EBook.xltx.
Открытая книга будет иметь имя EBook1.

Как создать шаблон в Эксель думаю знают все.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1812
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 21.11.21 17:25. Заголовок: Петр пишет: В рабоч..


Петр пишет:

 цитата:
В рабочем каталоге есть вложенная папка tmplts, а в ней - шаблон EBook.xltx.
Открытая книга будет иметь имя EBook1.


Есть такой вариант, но если проблема только уйти от имени Книга(1...n) на свое, то ничем не отличается от сохранения. Этот Ебук тоже лежит на диске, а если хочется иметь множество своих имен , то и шаблонов будет много.
alex_II пишет:

 цитата:
Вариант через сохранение файла не подходит.


По мне, проще сохранять при старте с любым именем и тереть при завершении , если нужно то сохранять результат работы уже куда и как положено. Хотя чем имя Книга1 не устраивает то ? и почему сохранение не подходит ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 1731
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 21.11.21 18:55. Заголовок: Haz пишет: Есть так..


Haz пишет:

 цитата:
Есть такой вариант, но если проблема только уйти от имени Книга(1...n) на свое, то ничем не отличается от сохранения.


Вы ничего не понимаете, ЭТО ДРУГОЕ!

А если серьезно, то alex_II пишет:

 цитата:
Печатая отчёты через Excel потребовалось поменять имя книги Книга1


Вот отчеты, особенно сложные, для меня удобнее писать через шаблоны.
Формулы, макросы, диаграммы..

Haz пишет:

 цитата:
Этот Ебук тоже лежит на диске, а если хочется иметь множество своих имен , то и шаблонов будет много


Разные отчеты - разные шаблоны. А если что, то и Ебук можно переименовывать перед употреблением.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1813
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 21.11.21 20:07. Заголовок: Петр пишет: Вы ниче..


Петр пишет:

 цитата:
Вы ничего не понимаете, ЭТО ДРУГОЕ!

Для чего нужны шаблоны я догадываюсь уже второй десяток лет хотя сам почти не использую, впрочем как и ole из за его тормознутости ( при выводе нескольких тысяч строк реестра можно идти спать )
Насколько я понял, Alex_ll их не использует, а вот тему с сохранением я не понял. Почему она не подходит не пойму. Создал Эксель, сохранил сразу как надо, через ту же Олю заполнил, если нужно пересохранил, не нужно удалил.
Единственное что может доставить неудобство, так это то, что при закрытии программы Эксель еще висит у пользователя в работе. Но ведь сохраняем изначально во временной папке и при старте просто трем в ней все , что удается стереть ( можно с проверкой на блокировку )

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7486
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.11.21 20:27. Заголовок: Haz пишет: при выво..


Haz пишет:

 цитата:
при выводе нескольких тысяч строк реестра можно идти спать


Ты не прав Игорь , тоже был такой тормозок и решил его с помощью
oRange:Value := __oleVariantNew( WIN_VT_VARIANT, ......
ну ты понял :)
Сейчас отчётик строится на раз два , два даже произнести не успеваю ))

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7487
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.11.21 20:57. Заголовок: Haz 100 000 строк н..


Haz
100 000 строк нормально будет ?
 
#include "hbole.ch"

local oExcel, oWorkBook, oWindows
local nI, nCount, w , oSheet
local orange,orange1,orange2
local xlsarrrow:={}
local nrows:=100000

REQUEST HB_CODEPAGE_RU1251
hb_cdpSelect( "RU1251" )

oExcel := win_oleCreateObject( "Excel.Application" )

if !empty(oExcel)

oWorkBook := oExcel:WorkBooks:Add()
oSheet := oExcel:ActiveSheet()

oRange := oSheet:Range(oSheet:Cells(1, 1), oSheet:Cells(nrows, 2))
oRange1 := oSheet:Range(oSheet:Cells(1, 1), oSheet:Cells(nrows, 1))
oRange2 := oSheet:Range(oSheet:Cells(1, 2), oSheet:Cells(nrows, 2))

for ni=1 to nrows
aadd(xlsarrrow,{hb_ntos(ni),hb_milliseconds()})
next

oRange:Value := __oleVariantNew( WIN_VT_VARIANT, xlsarrrow, nrows, 2 )
oRange2:Font:Size := 12
oRange1:Font:Size := 8
oRange2:NumberFormat:="# ##0"
oExcel:Visible := .T.

else
? "Error: MS Excel not available. [" + win_oleErrorText() + "]"
endif



PS
Мне кажется что hbxlsxml.lib будет нервно курить в сторонке при таком объеме данных + форматирование

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1814
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 21.11.21 21:57. Заголовок: Dima пишет: тоже бы..


Dima пишет:

 цитата:
тоже был такой тормозок и решил его с помощью
oRange:Value := __oleVariantNew


В километровых отчетах финансисты желают видеть формулы а не значения. И базовые параметры ( курсы, пошлины, ставки налогов и пр выносить в шапку )
Для таких игр вариант-массив не катит.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7488
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 21.11.21 22:00. Заголовок: Haz формулы (я не ю..


Haz
формулы (я не юзал) можно в массив загнать ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1815
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 21.11.21 22:00. Заголовок: Dima пишет: Мне каж..


Dima пишет:

 цитата:
Мне кажется что hbxlsxml.lib будет нервно курить в сторонке при таком объеме данных + форматирование


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

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4049
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.11.21 08:47. Заголовок: alex_II пишет: Всем..


alex_II пишет:

 цитата:
Всем спасибо за внимание, но похоже проблема решения не имеет.
Вариант через сохранение файла не подходит.



Есть простой критерий, чтобы определить, есть решение или нет.
Открываем Excel, создаем новую книгу. Меняем название книги без ее сохранения.
Что, не получается ? Так отож

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4050
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 22.11.21 08:52. Заголовок: Dima пишет: формулы..


Dima пишет:

 цитата:
формулы (я не юзал) можно в массив загнать ?



В документации написано, что можно
Для Range:Formula допускается присвоение массива:

If the range is a one- or two-dimensional range, you can set the formula to a Visual Basic array of the same dimensions. Similarly, you can put the formula into a Visual Basic array.
Setting the formula for a multiple-cell range fills all cells in the range with the formula.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7134
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.11.21 19:20. Заголовок: Dima пишет: формулы..


Dima пишет:

 цитата:
формулы (я не юзал) можно в массив загнать ?


Смотри пример MiniGUI\SAMPLES\Advanced\Tsb_Export_2
Формулы легко загоняются в массив, а далее в эксель:


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4051
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.11.21 10:15. Заголовок: При работе со значен..


При работе со значениями/формулами как говорится "есть ньюанс"
Ячейка может иметь либо значение, либо формулу
Если заполнять Range массивом значений, то даже если в массиве в тех ячейках, в которых есть формулы стоит nil, формулы будут снесены

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 326
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 23.11.21 12:43. Заголовок: Dima пишет: oRange:..


Dima пишет:

 цитата:
oRange:Value := __oleVariantNew( WIN_VT_VARIANT, ......



этот механизм работает в OpenOffice ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7490
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.11.21 12:58. Заголовок: MIKHAIL Надо Пашу с..


MIKHAIL
Надо Пашу спросить , я не работаю с OpenOffice

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4052
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 23.11.21 15:20. Заголовок: MIKHAIL пишет: этот..


MIKHAIL пишет:

 цитата:
этот механизм работает в OpenOffice ?



Да, синтаксис другой:

oRange:setDataArray(aData)

Спасибо: 1 
ПрофильЦитата Ответить
администратор




Пост N: 1816
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.11.21 22:50. Заголовок: hbXlsxWriter


Погонял пример hbXlsxWriter из поставки Minigui
Достойная альтернатива OLE. Поддержка всего чего нужно. Полностью документирован.
Форматы, таблицы, чарты, формулы , макросы и пр. И при этом хорошая скорость вывода. Из недостатков только один - это только Writer, а не Reader/Writer.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7265
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.12.22 00:29. Заголовок: Что то опять у меня ..


Что то опять у меня с Экселем не получается.
Не могу удалить первую строку в таблице. Как это сделать ?
Получил вот такой макрос:
      Rows("1:1").Select 
Selection.Delete Shift:=xlUp

А как перевести для Харбора не понимаю....
   oExcel:WorkBooks:Add()               
oBook := oExcel:ActiveWorkBook() // это книга
oSheet := oExcel:ActiveSheet() // это лист
oExcel:Workbooks:Open( cFileDbf, 0 )

// здесь нужно удалить первую строку

oBook := oExcel:Get("ActiveWorkBook")
oBook:SaveAs( cFileXls, xlWorkbookNormal )
oExcel:Quit()


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4099
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 03.12.22 12:42. Заголовок: oSheet:Rows(1):Delet..


oSheet:Rows(1):Delete(xlShiftUp)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7266
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.12.22 13:20. Заголовок: Pasha пишет: oSheet..


Pasha пишет:

 цитата:
oSheet:Rows(1):Delete(xlShiftUp)


Не удаляет первую строку в таблице в 2003 Экселе.
Может по другому надо ?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 4100
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 03.12.22 13:43. Заголовок: так удаляет же. 2003..


так удаляет же. 2003-й я конечно сейчас не найду, но в 2016-м работает. Это же базовый метод, версия Excel роли не играет

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7727
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 03.12.22 16:01. Заголовок: может так ? oSheet:R..


может так ?
oSheet:Rows(1):Select()
oSheet:Rows(1):Delete()

PS
почитать и пробнуть , сам не юзал

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7267
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.12.22 16:40. Заголовок: Pasha пишет: так уд..


Pasha пишет:

 цитата:
так удаляет же. 2003-й я конечно сейчас не найду, но в 2016-м работает


Да, в 2016 удаляет.

Сделал как Дима предлагал
 
oSheet:Rows(1):Select()
oSheet:Rows(1):Delete(xlShiftUp)

И в 2003 заработало...

Спасибо БОЛЬШОЕ вам !

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 29.01.23 11:53. Заголовок: Xls в DBF и DBF в Xls - макрос Excel

Спасибо: 0 
Цитата Ответить
постоянный участник


Пост N: 847
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 13.02.23 16:31. Заголовок: Есть пример работы с..


Есть пример работы с двумя файлами Excel?
Открыть первый, второй файл, прочитать данные в первом файле, обработать их, занести во второй файл, сохранить второй файл.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 848
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 13.02.23 18:02. Заголовок: Всё получилось, всё ..


Всё получилось, всё как обычно

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7747
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.03.23 19:47. Заголовок: Не могу понять как э..


Не могу понять как это преобразовать в Harbour
Хотел отслеживать что менялось в документе
 
With ActiveWorkbook
.HighlightChangesOptions When:=xlSinceMyLastSave, Who:="Everyone" // вот тут затык
.ListChangesOnNewSheet = True
End With


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1896
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.03.23 20:06. Заголовок: Dima пишет: вот тут..


Dima пишет:

 цитата:
вот тут затык


В справке MS это представлено как функция.
https://learn.microsoft.com/en-us/office/vba/api/excel.workbook.highlightchangesoptions

так пробовал ?
 
Syntax
expression.HighlightChangesOptions (When, Who, Where)


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7748
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.03.23 20:12. Заголовок: Падает зараза на стр..


Падает зараза на строке
oExcel:ActiveWorkbook:HighlightChangesOptions(xlSinceMyLastSave,"Everyone")
или так
oExcel:ActiveWorkbook:HighlightChangesOptions(xlSinceMyLastSave)
Эта штука xlSinceMyLastSave в Excel.ch есть

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7749
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 09.03.23 20:26. Заголовок: Похоже не получится ..


Похоже не получится , так как если руками включать , то Excel требует сохранить книгу
А сохранять как раз не нужно.
Смысл был следующий , бух формирует отчетик , он формируется в Excel , после бух вносит
свои правки , спецом или же по ошибке а потом мне выносят мозг , мол прога не правильно считает

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1897
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.03.23 20:43. Заголовок: Dima пишет: Падает ..


Dima пишет:

 цитата:
Падает зараза на строке


Excel как правило требует явного указания всех параметров при передаче в функцию
Ранее сталкивался с этой фичей

Спасибо: 1 
ПрофильЦитата Ответить
администратор




Пост N: 1898
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 09.03.23 20:46. Заголовок: Dima пишет: после б..


Dima пишет:

 цитата:
после бух вносит
свои правки , спецом или же по ошибке а потом мне выносят мозг , мол прога не правильно считает


Делай скрытый ярлык под паролем и пиши туда копию . можно с условным форматом - цветом изменения если данные не совпадают в ячейках на двух листах

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7750
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 11.03.23 20:56. Заголовок: Haz пишет: Делай ск..


Haz пишет:

 цитата:
Делай скрытый ярлык под паролем и пиши туда копию . можно с условным форматом - цветом изменения если данные не совпадают в ячейках на двух листах


Покажи примерчик если есть живой а нет если буду гуглить :)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1899
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.03.23 00:02. Заголовок: Dima пишет: Покажи ..


Dima пишет:

 цитата:
Покажи примерчик если есть живой а нет если буду гуглить :)

когда-то делал, поищу. Скорее всего в понедельник.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1900
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.03.23 15:28. Заголовок: Haz пишет: когда-то..


Haz пишет:

 цитата:
когда-то делал, поищу



где то так
 
func main()
local oExcel, oSheet
local i := j := 0

oExcel := win_oleCreateObject( "Excel.Application" )
oExcel:Visible := .t.
oExcel:Workbooks:Add()
oExcel:Sheets(1):Select()

oExcel:Sheets(1):Select()
oSheet := oExcel:ActiveSheet

oExcel:Sheets(1):Select()

for i := 1 To 10
for j := 1 to 10
oSheet:Cells( i, j):Value := i*j
end
end

oExcel:Sheets(1):Select()
oExcel:Sheets(1):Copy(after:=oExcel:Worksheets(1))
oExcel:Sheets(1):Name := "1"
oExcel:Sheets(2):Name := "2"

oExcel:Sheets(2):Protect("Password")
oExcel:Sheets(2):Visible := .f.

return nil


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7751
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.23 17:37. Заголовок: А как его поместить ..


А как его поместить в самый конец Sheets и как понять какой номер ему будет
присвоен что имя сменить и пасс поставить ?
Макрос в Excel мне выдал я потом преобразовал
oSheet:copy(after:=oExcel:Worksheets(3))
Откуда он взял цифру 3 ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7752
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.23 17:43. Заголовок: так нашел вроде Work..


так нашел вроде Worksheets(Worksheets.Count)

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1901
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.03.23 17:50. Заголовок: ­Dima пишет: А как е..


*PRIVAT*

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7753
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 12.03.23 17:50. Заголовок: вот так вышло lastcn..


вот так вышло
lastcnt:=oExcel:Worksheets:Count
oSheet:Select()
oSheet:copy(after:=oExcel:Worksheets(lastcnt))
oExcel:Sheets(lastcnt):Name :="Оргигинал"
oExcel:Sheets(lastcnt):Protect("Колбаска")
oSheet:Select()

Спасибо

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1902
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 12.03.23 17:51. Заголовок: Dima пишет: вот так..


Dima пишет:

 цитата:
вот так вышло



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7331
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.03.23 15:28. Заголовок: Имею такой документ ..


Имею такой документ после эскпорта из ТСБ функцией oBrw:ExcelOle()

Как мне задать нужную ширину колонок, после создания документа ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 7754
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 18.03.23 15:42. Заголовок: oSheet:Columns(1):Co..


oSheet:Columns(1):ColumnWidth := 3.86

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7332
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.03.23 16:17. Заголовок: Спасибо БОЛЬШОЕ !!! ..


Спасибо БОЛЬШОЕ !!!

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7336
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.03.23 17:44. Заголовок: Сделал так: oExce..


Сделал так:
   oExcel:Workbooks:Open( cFile, 0 ) 
oBook := oExcel:ActiveWorkBook()
oSheet := oExcel:ActiveSheet()

aWidth := {}
For nI := 1 To oBrw:nColCount()
nW := oBrw:aColumns[ nI ]:nWidth
AADD( aWidth, nW )
? nI, oBrw:aColumns[ nI ]:cName, nW
Next

For nI := 1 To LEN(aWidth)
? nI, oSheet:Columns(nI):ColumnWidth
oSheet:Columns(nI):ColumnWidth := aWidth[nI]
?? "=>", oSheet:Columns(nI):ColumnWidth
Next

Вылет на 4 колонке:
Error WINOLE/1006 Нельзя установить свойство ColumnWidth класса Range (0x800A03EC): Microsoft Office Excel (DOS Error -2147352567) Args: [1] = N 317 
--------------------------------- Stack Trace ---------------------------------
Called from WIN_OLEAUTO:_COLUMNWIDTH(0)
Called from EXCELFILEREFINEMENT(271) in module: Tsb2xlsOleExtern.prg
Called from TOEXCEL2(247) in module: Form_7Btn.prg
Called from (b)MYCONTEXMENUEXPORT(48) in module: Form_7Btn.prg
Called from _DOCONTROLEVENTPROCEDURE(0)

В логе вот так:
1  NAME_1   50  
2 NAME_2 48
3 NAME_3 48
4 NAME_4 317
5 NAME_5 167
6 NAME_6 167
7 NAME_7 167
8 NAME_8 167
9 NAME_9 167
10 NAME_10 588
1 4.4300 => 50.0000
2 1.8600 => 48.0000
3 4.4300 => 48.0000
4 8.2900

Там в эксель-файле 1 строка объединены колонки с 1 по 10. Это может как то влиять ?
Что делать ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7338
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.03.23 19:44. Заголовок: Сделал короткий прим..


Сделал короткий пример - https://cloud.mail.ru/public/oePE/DfQMjBnkT
Кто может, подскажите пожалуйста, как задать ширину колонок в этом примере.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 1911
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.03.23 21:12. Заголовок: Andrey пишет: Кто м..


Andrey пишет:

 цитата:
Кто может, подскажите пожалуйста, как задать ширину колонок в этом примере.


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

Это конечно косяк excel, мои колонки какую хочу ширину , такую и делаю. Но 3 метра , явно перебор

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 7339
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.03.23 23:48. Заголовок: Haz пишет: Размеры ..


Haz пишет:

 цитата:
Размеры в Excel задаются в см. ( в тсб в пикселях )


Блин, пролёт... Совсем про это забыл...
Делал это же сам 3 года назад и забыл про это... Да, памяти уже совсем нет...
Спасибо БОЛЬШОЕ !

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 153 , стр: 1 2 3 4 5 6 7 8 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 224
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет