Гуру экселев и повелители таблиц, взываю к вам
ПОМОГИТЕ ПОЖАЛУЙСТА!
Звуки танца призыва EXСEL-шамана.jpg
При выполнении функции, возвращаемое значение имеет форматирование, примененное к данной ячейке.
Как сделать так, чтобы применить форматирование к возвращаемому значению внутри формулы, например (как это представляется мне):
=СЦЕП(ЭТУ ХУ*НЮ СДЕЛАТЬ КРАСНОЙ(A2);" ";ЭТУ ХУ*НЮ СДЕЛАТЬ ЗЕЛЕНОЙ(B2);" ";ЭТУ ХУ*НЮ СДЕЛАТЬ ЖИРНОЙ (C2);ЭТУ ХУ*НЮ ПОДЧЕРКНУТЬ (D2);ЭТУ ХУ*НЮ СДЕЛАТЬ НАКЛОННО(E2)) ну и так далее.
Если что, то как для тупого объясните, каким образом мне это реализовать, какую функцию/или что-то ещё применить (макросы не могу)
Взвываю сильнейших
Задача - калькулятор расчета стоимости
Длина * Ширина * Цвет (с записанными в отдельном листе множителями)
РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ В EXCEL И УЖЕ ОФИЦИАЛЬНО
Люди делятся на два типа: тех, кто любит регулярки, и тех, кто их терпеть не может.
Как пользователь с опытом, не могу не признать, что применение регулярный выражений значительно эффективней любой другой текстовой обработки, как ни крути.
Excel и ранее поддерживал обработку регулярных выражений. Известный блогер Николай Павлов (он весьма длинно называет себя в роликах всякими словами, но действительно – крутой эксперт) когда-то писал статью, где можно было добавить макрофункцию и пользоваться этим благом.
Но вот недавно я узнал, что теперь Excel начал поддерживать этот функционал! В русской версии эти функции звучат как: РЕГТЕСТ, РЕГИЗВЛЕЧЬ, РЕГЗАМЕНИТЬ. История прекрасная! Вы можете теперь в любой текстовой строке найти нужно, проверить существование подстроки, выполнить замену.
Пример простой:
=РЕГИЗВЛЕЧЬ("Дата 04-06-2025 действует";"(\d{2}-\d{2}-\d{4})")
Здесь мы не будем подробно изучать основы регулярных выражений!
А вот пример прилагаю.
P.S. Я стараюсь публиковать интересные примеры из практической деятельности аналитика. Если вам интересно, приглашаю к ознакомлению на канале.
В Лас-Вегасе завершился ежегодный чемпионат мира по Excel — победитель получил крутой пояс и $5000
Суть турнира в том, что участники выполняют разные задачи, например анализ данных и их структурирование, с помощью таблиц за ограниченное время. В этом году первое место занял финансовый аналитик Майкл Джарман из Канады.
Источник
Освоение форматирования ячеек Excel с помощью Python: Полное руководство
В этом посте мы рассмотрим, как использовать бесплатную библиотеку Python для Excel для программного форматирования ячеек в файлах Excel. Вы научитесь устанавливать свойства шрифта, выравнивание, границы, цвета заливки, форматы чисел и изучите продвинутые техники, такие как условное форматирование.
Введение в бесплатную библиотеку Spire.XLS
Как форматировать ячейки в Excel с помощью Python
Продвинутые техники форматирования ячеек
Пример комплексной реализации
Заключение
Введение в бесплатную библиотеку Spire.XLS
Бесплатная библиотека Spire.XLS для Python — это легковесная, но мощная библиотека, которая позволяет создавать, редактировать и форматировать файлы Excel без необходимости установки Microsoft Excel.
Чтобы начать, установите библиотеку через pip:
pip install spire.xls.free
После установки вы можете начать создавать файлы Excel или изменять существующие. Вот простой пример, как создать новый файл Excel и добавить в него начальные данные:
from spire.xls import *
workbook = Workbook()
workbook.CreateEmptySheet()
sheet = workbook.Worksheets[0]
sheet.Range["A1"].Text = "Привет, мир!"
workbook.SaveToFile("output.xlsx")
Этот код создает новый файл Excel с именем "output.xlsx" и текстом "Привет, мир!" в ячейке A1.
Как форматировать ячейки в Excel с помощью Python
Программное форматирование ячеек включает в себя установку таких свойств, как шрифт, выравнивание, границы и заливки. Давайте рассмотрим, как это сделать с помощью бесплатной библиотеки Spire.XLS.
Установка свойств шрифта
Вы можете настроить стиль шрифта, размер и цвет ячейки. Например:
font = sheet.Range["A1"].Style.Font
font.Name = "Arial"
font.Size = 12
font.IsBold = True
font.Color = Color.FromArgb(40, 255, 0, 0)
Установка выравнивания
Выравнивание текста в ячейке или диапазоне ячеек может улучшить читаемость. Вот как установить горизонтальное и вертикальное выравнивание:
cell = sheet.Range["A1"]
cell.Style.HorizontalAlignment = HorizontalAlignType.Left
cell.Style.VerticalAlignment = VerticalAlignType.Bottom
range = sheet.Range["B1:D1"]
range.Style.HorizontalAlignment = HorizontalAlignType.Center
range.Style.VerticalAlignment = VerticalAlignType.Center
Добавление границ
Чтобы выделить ваши данные, вы можете добавить границы к ячейкам или диапазонам:
cell = sheet.Range["A1"]
border = cell.Style.Borders[BordersLineType.EdgeTop]
border.LineStyle = LineStyleType.Thick
border.Color = Color.get_Green()
border = cell.Style.Borders[BordersLineType.EdgeBottom]
border.LineStyle = LineStyleType.Double
border.Color = Color.get_Blue()
Установка цвета заливки или узора ячейки
Для улучшения визуальной ясности вы можете применить сплошные цветовые заливки или узорные фоны к ячейкам:
cell = sheet.Range["A1"]
cell.Style.Color = Color.get_LightBlue()
cell = sheet.Range["A2"]
cell.Style.FillPattern = ExcelPatternType.Percent125Gray
Объединение или разъединение ячеек
Объединение ячеек особенно полезно для создания заголовков, охватывающих несколько столбцов. Вы можете объединить или разъединить ячейки следующим образом:
sheet.Range["A1:C1"].Merge()
sheet.Range["B1:C1"].UnMerge()
Применение форматов чисел
Excel предлагает различные форматы чисел, такие как валюта, дата и процент. Вот как применить форматы чисел:
sheet.Range["A1"].NumberValue = 1234.567
sheet.Range["A1"].NumberFormat = "0.00"
sheet.Range["A2"].NumberValue = 0.25
sheet.Range["A2"].NumberFormat = "0%"
sheet.Range["A3"].NumberValue = 43831
sheet.Range["A3"].NumberFormat = "yyyy-mm-dd"
sheet.Range["A4"].NumberValue = 1234.567
sheet.Range["A4"].NumberFormat = "$#,##0.00"
Продвинутые техники форматирования ячеек
Как только вы освоите основы, вы можете изучить более продвинутые техники форматирования. Например, вы можете применять правила условного форматирования для динамического форматирования ячеек на основе их значений.
Условное форматирование
Условное форматирование — это мощный инструмент, который выделяет тенденции или аномалии в ваших данных. Вот пример:
range = sheet.Range["A1:A10"]
format = range.ConditionalFormats.AddCondition()
format.FormatType = ConditionalFormatType.CellValue
format.Operator = ComparisonOperatorType.Greater
format.FirstFormula = "100"
format.BackColor = Color.get_Green()
format.IsBold = True
Форматирование ячеек с помощью пользовательского стиля
Создание и применение пользовательских стилей ячеек может помочь поддерживать согласованность на протяжении всего вашего рабочего файла. Вот как определить пользовательский стиль:
style = workbook.Styles.Add("customStyle")
style.Font.IsBold = True
style.Font.Size = 12
style.Font.Color = Color.FromArgb(20, 0, 0, 255)
style.BackgroundColor = Color.FromArgb(20, 255, 255, 0)
style.Borders.All = LineStyleType.Dashed
style.Borders.Color = Color.get_Purple()
sheet.Range["A2:F2"].Style = style
Копирование формата ячейки
Чтобы эффективно реплицировать форматирование по диапазонам, вы можете копировать стили. Это сохраняет все свойства без ручной перенастройки:
style = sheet.Range["A1"].Style
sheet.Range["A2:F5"].Style = style
Пример комплексной реализации
Теперь давайте объединим все в комплексном примере, который обобщает все обсуждаемые техники:
from spire.xls import *
from spire.xls.common import *
workbook = Workbook()
worksheet = workbook.Worksheets[0]
worksheet.Name = "Пример комплексного стиля"
# Создание строки заголовка
title = worksheet.Range["A1:E1"]
title.Merge()
title.Text = "Информация о сотрудниках"
title.Style.Font.FontName = "Arial"
title.Style.Font.Size = 16
title.Style.Font.Color = Color.get_White()
title.Style.Color = Color.get_DarkBlue()
title.Style.HorizontalAlignment = HorizontalAlignType.Center
title.Style.VerticalAlignment = VerticalAlignType.Center
title.RowHeight = 30
# Установка заголовков
headers = ["ID", "Имя", "Отдел", "Дата приема", "Зарплата"]
for i, header in enumerate(headers):
cell = worksheet.Range[2, i + 1]
cell.Text = header
cell.Style.Font.IsBold = True
cell.Style.Color = Color.get_LightGray()
cell.Style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Medium
cell.Style.Borders[BordersLineType.EdgeBottom].Color = Color.get_DarkBlue()
# Заполнение данных
data = [
[1, "Чжан Сан", "Технический отдел", "2020-05-15", 15000],
[2, "Ли Си", "Маркетинговый отдел", "2019-08-22", 12000],
[3, "Ван У", "Отдел кадров", "2021-03-10", 13500],
[4, "Жао Лю", "Финансовый отдел", "2018-11-05", 16000]
]
for r, row in enumerate(data):
for c, value in enumerate(row):
cell = worksheet.Range[r + 3, c + 1]
if c == 3: # Дата
cell.DateTimeValue = DateTime.Parse(value)
cell.NumberFormat = "yyyy-mm-dd"
elif c == 4: # Зарплата
cell.NumberValue = value
cell.NumberFormat = "$#,##0.00"
else:
cell.Text = str(value)
# Установка чередующихся цветов строк
if r % 2 == 0:
cell.Style.Color = Color.get_LightYellow()
else:
cell.Style.Color = Color.get_LightCyan()
# Установка границ
worksheet.Range["A2:E6"].BorderAround(LineStyleType.Medium, Color.get_Black())
worksheet.Range["A2:E6"].BorderInside(LineStyleType.Thin, Color.get_Gray())
# Авто подгонка ширины столбцов
for i in range(1, 6):
worksheet.AutoFitColumn(i)
# Добавление условного форматирования - выделение ячеек с зарплатой больше 14000
format = worksheet.Range["E3:E6"].ConditionalFormats.AddCondition()
format.FormatType = ConditionalFormatType.CellValue
format.Operator = ComparisonOperatorType.Greater
format.FirstFormula = "14000"
format.FontColor = Color.get_Red()
format.IsBold = True
# Получение выделенного диапазона
locatedRange = worksheet.AllocatedRange
# Проход по строкам
for rowNum in range(1, locatedRange.RowCount):
# Выравнивание текста по центру
locatedRange.Rows[rowNum].HorizontalAlignment = HorizontalAlignType.Center
locatedRange.Rows[rowNum].VerticalAlignment = VerticalAlignType.Center
# Установка высоты строки
locatedRange.Rows[rowNum].RowHeight = 20
# Проход по столбцам
for columnNum in range(0, locatedRange.ColumnCount):
# Установка ширины столбца
if(columnNum == 2):
locatedRange.Columns[columnNum].ColumnWidth = 19
else:
locatedRange.Columns[columnNum].ColumnWidth = 14
# Сохранение книги
workbook.SaveToFile("ComprehensiveStyleExample.xlsx", FileFormat.Version2016)
workbook.Dispose()
Заключение
В этом руководстве вы узнали, как форматировать ячейки в Excel с помощью Python и библиотеки Free Spire.XLS. От базовых техник форматирования до продвинутых функций, таких как условное форматирование, теперь вы можете программно создавать визуально привлекательные файлы Excel.
AND и OR в SQL: как правильно соединять условия
Когда мы работаем с базой данных, почти всегда хотим не просто что-то выбрать, а применить несколько условий сразу. Например: выбрать всех клиентов старше 18 лет и с активной подпиской.
И здесь на помощь приходят два основных логических оператора: AND и OR.
Что делают AND и OR
AND — «и». Все условия должны быть выполнены одновременно.
Пример: выбрать из холодильника молоко и яйца, чтобы приготовить омлет:
SELECT *
FROM fridge
WHERE product = 'milk' AND product = 'eggs';
(Да, в реальности одной строки с молоком и яйцом не будет, но идея ясна: оба условия должны выполняться вместе.)
OR — «или». Достаточно, чтобы выполнено было хотя бы одно условие.
Пример: выбрать продукты, которые нужно купить или молоко, или яйца:
SELECT *
FROM shopping_list
WHERE product = 'milk' OR product = 'eggs';
Где могут использоваться
Эти операторы обычно используют в блоке WHERE, чтобы фильтровать данные.
Также можно применять их в:
HAVING — фильтрация агрегатов после GROUP BY
JOIN ON — комбинирование условий соединения таблиц
Пример с HAVING:
SELECT category, COUNT(*)
FROM fridge
GROUP BY category
HAVING COUNT(*) > 5 AND AVG(expiry_date) < '2025-08-01';
Особенности и нюансы:
Порядок выполнения важен
AND имеет более высокий приоритет, чем OR.
Если смешиваете их, всегда используйте скобки для точного порядка:
SELECT *
FROM fridge
WHERE (product = 'milk' OR product = 'eggs') AND expiry_date < '2025-08-01';
AND «сжимает» результат, OR «расширяет» результат
AND оставляет меньше строк, OR — больше
Частые ошибки
Забыли скобки и получили слишком большой или слишком маленький результат
Использовали AND там, где нужен OR (или наоборот)
Смешали NULL значения: NULL AND TRUE и NULL OR TRUE могут вести себя неожиданно
Представим, что мама проверяет холодильник:
У неё есть список продуктов, которые могут испортиться: молоко, яйца, йогурт
Она хочет приготовить что-то, если и молоко, и яйца в наличии → AND
Она хочет перекусить, если есть молоко или йогурт → OR
В SQL это выглядит так:
-- Для приготовления омлета
SELECT *
FROM fridge
WHERE product = 'milk' AND product = 'eggs';
-- Для перекуса
SELECT *
FROM fridge
WHERE product = 'milk' OR product = 'yogurt';
AND и OR — это простые, но мощные инструменты фильтрации. Правильное использование скобок и понимание приоритета операторов помогает избежать ошибок и выбирать точно те данные, которые нужны.
А в своем канале На связи: SQL я публикую информацию с особенностями и нюансами в языке SQL, разбираю аналитические запросы и подходы работы с данными. Канал создала недавно с нулем подписчиков, но там уже есть интересная информация для работы аналитиков. Подписывайся!