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

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