Форум » [x]Harbour » Вопрос по Excel ? » Ответить

Вопрос по Excel ?

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

Ответов - 153, стр: 1 2 3 4 5 6 7 8 All

Haz: Haz пишет: Согласен с твоим спинным мозгом, не поспоришь Забыл написать. Свойство NAME у объекта книга только чтение

Andrey: alex_II пишет: Печатая отчёты через Excel потребовалось поменять имя книги Книга1 на своё, но так и не разобрался как. Подскажите, кто сталкивался с этой задачей. Тема Снова EXCEL (продолжение) http://clipper.borda.ru/?1-4-0-00001115-000-260-0-1628243986 Вот с этим я разобрался: [pre2] Сделал тест, кому будет интересно: 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 := "Мой_отчёт" // имя листа изменить ...........[/pre2]

Dima: Haz пишет: Свойство NAME у объекта книга только чтение Но если хочется сменить заголовок окна Excel то можно сделать так. [pre2] 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 [/pre2]


Andrey: Dima пишет: Но если хочется сменить заголовок окна Excel то можно сделать так. Классно ! А я не знал что так тоже можно !

Haz: Dima пишет: Но если хочется сменить заголовок окна Полезно

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

Петр: alex_II пишет: Всем спасибо за внимание, но похоже проблема решения не имеет. Вариант через сохранение файла не подходит. Из Википедии (куда без нее ) Решение — завершение процесса выбора, которое обычно (иногда неправильно) фиксирует процесс во времени. Принятие решения рассматривается как когнитивный процесс, результатом которого является выбор мнения или курса действий среди нескольких альтернативных возможностей. Еще одна альтернативная возможность с использованием пользовательского шаблона [pre2]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 [/pre2] В рабочем каталоге есть вложенная папка tmplts, а в ней - шаблон EBook.xltx. Открытая книга будет иметь имя EBook1. Как создать шаблон в Эксель думаю знают все.

Haz: Петр пишет: В рабочем каталоге есть вложенная папка tmplts, а в ней - шаблон EBook.xltx. Открытая книга будет иметь имя EBook1. Есть такой вариант, но если проблема только уйти от имени Книга(1...n) на свое, то ничем не отличается от сохранения. Этот Ебук тоже лежит на диске, а если хочется иметь множество своих имен , то и шаблонов будет много. alex_II пишет: Вариант через сохранение файла не подходит. По мне, проще сохранять при старте с любым именем и тереть при завершении , если нужно то сохранять результат работы уже куда и как положено. Хотя чем имя Книга1 не устраивает то ? и почему сохранение не подходит ?

Петр: Haz пишет: Есть такой вариант, но если проблема только уйти от имени Книга(1...n) на свое, то ничем не отличается от сохранения. Вы ничего не понимаете, ЭТО ДРУГОЕ! А если серьезно, то alex_II пишет: Печатая отчёты через Excel потребовалось поменять имя книги Книга1 Вот отчеты, особенно сложные, для меня удобнее писать через шаблоны. Формулы, макросы, диаграммы.. Haz пишет: Этот Ебук тоже лежит на диске, а если хочется иметь множество своих имен , то и шаблонов будет много Разные отчеты - разные шаблоны. А если что, то и Ебук можно переименовывать перед употреблением.

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

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

Dima: Haz 100 000 строк нормально будет ? [pre2] #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 [/pre2] PS Мне кажется что hbxlsxml.lib будет нервно курить в сторонке при таком объеме данных + форматирование

Haz: Dima пишет: тоже был такой тормозок и решил его с помощью oRange:Value := __oleVariantNew В километровых отчетах финансисты желают видеть формулы а не значения. И базовые параметры ( курсы, пошлины, ставки налогов и пр выносить в шапку ) Для таких игр вариант-массив не катит.

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

Haz: Dima пишет: Мне кажется что hbxlsxml.lib будет нервно курить в сторонке при таком объеме данных + форматирование Только кажется Текстовой вывод в файл очень быстрый, современные диски сам знаешь с какой скоростью пишут. Подготовка и вставка большого массива точно не быстрее.

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

Pasha: 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.

Andrey: Dima пишет: формулы (я не юзал) можно в массив загнать ? Смотри пример MiniGUI\SAMPLES\Advanced\Tsb_Export_2 Формулы легко загоняются в массив, а далее в эксель:

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

MIKHAIL: Dima пишет: oRange:Value := __oleVariantNew( WIN_VT_VARIANT, ...... этот механизм работает в OpenOffice ?



полная версия страницы