Re: Структурирование (группировка) в ексель из foxpro | |
---|---|
vk65 Сообщений: 402 Дата регистрации: 08.04.2008 |
можно сделать условное форматирование:
|
Re: Структурирование (группировка) в ексель из foxpro | |
---|---|
ventall Автор Сообщений: 132 Дата регистрации: 29.11.2013 |
Именно то что нужно! не знал как обратиться к ячейке
.FormatConditions.Add(2,,'=ПРАВСИМВ($A2;4)="Итог"') пробовал сравнивать значение через if substr( Спасибо большое! |
Re: Структурирование (группировка) в ексель из foxpro | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Если имелось в виду: "изменить форматирование для итоговой строки-столбца" - то все можно сделать несколько проще и универсальней, без привязки к тексту какой-то ячейки. Для этого, после вставки всех ячеек таблицы, нужно просто использовать специальный экселевский параметр LastCell, после вставки таблицы, он принимает значение последней ячейки. Наглядно посмотреть его значение можно вручную - после вставки таблицы это та самая ячейка, на которую установится курсор после нажатия Ctrl+End. Есть только единственный нюанс - LastCell удобнее всего использовать при вставке на чистый лист. Иначе, если всего лишь очистить через форматирование старую таблицу и вставить туда же новую, но например с меньшим числом столбцов-строк, LastCell так и будет хранить значение предыдущей таблицы. В чем можно убедиться, снова нажав Ctrl+End. Т.к. после простой очистки форматирования расположение последней ячейки сохраняется. Присвоение же своих значений LastCell в коде кажется невозможно (сейчас точно уже не помню, но вроде это только для чтения). Но в принципе, если вставлять таблицу на чистый лист - проблем никаких. (Ну в крайнем случае, можно конечно и удалить ее структуру строк-столбцов, чтобы новая таблица была больше или равна по размеру после такого удаления строк-столбцов, главное, чтобы не меньше старой). А далее, имея значение LastCell, можно уже плясать от него - просто сдвигаясь вверх, вниз или влево-вправо на нужное число столбцов-строк. Таким образом можно пожирнить например итоговую строку или итоговый столбец. Вставить туда формулу (удобно для дальнейшей работы с таблицей пользователя). Или например - вставить внизу под последней строкой подпись с фамилией, либо что-то еще другое. Вот допустим у меня в макросе был такой фрагмент, жирнящий сетку для всех ячееек со сдвигом на 16 столбцов влево от последней ячейки, также жирнится шрифт и вставляется формула суммирования от 13 строки до предпоследней строки, в итоге получаем жирную итоговую строку с формулами по всем столбцам:
Или также вставить подпись ниже на 5 строк и левее на 16 столбцов:
Т.е. думаю сам принцип понятен. Ну и понятно, точно также обычным образом, весь этот VBA-код макроса адаптируется уже для использования в коде фокспро. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 3 раз(а). Последнее : Crispy, 10.01.19 17:50 |
Re: Структурирование (группировка) в ексель из foxpro | |
---|---|
ventall Автор Сообщений: 132 Дата регистрации: 29.11.2013 |
заработало решение от vk65, мне нужно было Форматировать не последнюю строку, а каждую, в которой был подитог. спасибоза пример, попробую разобраться.
|
Re: Структурирование (группировка) в ексель из foxpro | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
В принципе, после вставки любого блока ячеек, можно точно так же использовать LastCell - для форматирования по вышеприведенным примерам последних строки-столбца. При вставке следующего блока - снова, и т.д. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Структурирование (группировка) в ексель из foxpro | |
---|---|
ventall Автор Сообщений: 132 Дата регистрации: 29.11.2013 |
Всем спасибо за помощь и советы! Очень многому научился. Тему можно закрывать.
|
Re: Структурирование (группировка) в ексель из foxpro | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Криспа, у него не вставляются диапазоны ячеек - у него используется механизм Subtotal самого экселя, чтобы понатыкать посередине имеющегося диапазона подитогов, которые по сути просто формулы.
Можно именно по признаку того что в соответствующей колонке находится формула и определять строки с итогами/подитогами.
Впрочем, если уровней группировки >1, и все поля группировки не пусты, то можно в качестве формулы использовать нечто типа "=OR(ISBLANK($A1);ISBLANK($B1))" - т.е. если в первой либо второй колонке будет пусто (если это колонки группировки, то там и будет пусто в итоговых строках) то эту строку и надо красить. Такого рода условия позволят отделять подитоги разных уровней. ------------------ WBR, Igor |
Re: Структурирование (группировка) в ексель из foxpro | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Возможно и так. Кстати у МСО, сколько помнится, есть любопытная особенность - в русской локализации работает и английский синтаксис команд. Когда-то, когда только появился опенофис, это помогло почти без проблем перевести на него экселевский лист со сложными вычислениями. Что любопытно, в опенофисе команды форматирования ячеек по цвету и пр. оказались в итоге даже удобнее, что позволило затем несколько и упростить сам код. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Структурирование (группировка) в ексель из foxpro | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
У них там в объектной модели для ячеек есть пары свойств - Formula и FormulaLocal - как раз для "универсальный английской" и "зависящий от языка офиса" синтаксис формул. Но этот параметр не формула ячейки, и потому я не знаю чего там эксель ожидает Есть у него и тупняки в некоторых сложных случаях когда без глупого .Select() для "визуального выделения ячеек" не обойтись - хотя на кой чёрт что-то надо было бы выделять при програмной обработке
------------------ WBR, Igor |
Re: Структурирование (группировка) в ексель из foxpro | |
---|---|
ventall Автор Сообщений: 132 Дата регистрации: 29.11.2013 |
Добрый день, в продолжение темы
А возомжно что бы в одной итоговой строке не только сумирование но и минимум в нескольких колонках был? .Subtotal(1, xlSum, @laTotalList,.t.,.f.,.t.) - только суммирует, но есть колонки которые не нужно суммировать а только показать либо то значение которое есть, либо минимальное если добавить .Subtotal(1, xlMin, @laTotalList1,.f.,.f.,.t.) - добавляет новую группировку Исправлено 4 раз(а). Последнее : ventall, 11.05.19 11:03 |
Re: Структурирование (группировка) в ексель из foxpro | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Возможно - Subtotal это просто инструмент для облегчения создания структуры и прописывания соответствующих формул. Используемая для "подитогов" функция SUBTOTAL позволяет не только суммировать, а и считать среднее, минимальное, максимальное, произведение, количество элементов, стандартное отклонение и дисперсию. Естественно сам инструмент Subtotal не рассчитан на задание для разных колонок разных функций, что не мешает после его применения пройтись по нужным ячейкам и поменять прописанную им функцию. В т.ч. и на вообще не SUBTOTAL а луюбую другую функцию.
Показывать "то значение которое есть" конечно же нельзя, поскольку инструмент добавляет новые строки, и в них по определению не может быть никаких значений - но так то нет ограничений на то что прописать в этих вновь добавленных строках. ------------------ WBR, Igor |
Re: Структурирование (группировка) в ексель из foxpro | |
---|---|
ventall Автор Сообщений: 132 Дата регистрации: 29.11.2013 |
понимаю что так примерно надо
.FormatConditions.Add(2,,'=ПРАВСИМВ($A2;4)="Итог"') но дальше как указать минимальное значение конкретной колонки группы не знаю, простите =( |
Re: Структурирование (группировка) в ексель из foxpro | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Не понял при чём тут формат...
В ячейке итоговой строки будет формула =SUBTOTAL(9;какой-то-диапазон) - 9 это номер функции суммирования. Ставишь вместо 9 к примеру 5 получаешь функцию MIN, ставишь 4 - получаешь MAX. При этом сохраняется весь функционал функции SUBTOTAL, как то пропуск скрытых ячеек и пропуск ячеек с такой же функцией SUBTOTAL. Как половчее находить в документе строки итогов - ну это другой вопрос. Самое простое - поиском и заменой. Типа:
Если надо "поумнее" логику применять, ну можно в цикле пройтись по Rows, посмотреть их OutlineLevel, на основании этого в соответствующей строке и менять агрегирующую функцию для нужных колонок. Полагаться на поиск строки "Итог" - ну я бы не стал, она от локализации зависит. Впрочем поиск и змена тоже, наверное от локализации зависит (у меня английская локаль, потому функция по английски называется, а не "промежуточные.итоги") ------------------ WBR, Igor |
Re: Структурирование (группировка) в ексель из foxpro | |
---|---|
ventall Автор Сообщений: 132 Дата регистрации: 29.11.2013 |
имелось в виду что я полагаюсь на поиск строки с "итог"
реально искал варианты подмены формулы, но не нашел oSheet.Columns(5).Replace("=SUBTOTAL(9;","=SUBTOTAL(5;",2,1,.F.) - просто огромнейшее спасибо! |
© 2000-2024 Fox Club  |