All Projects → robin900 → gspread-formatting

robin900 / gspread-formatting

Licence: MIT license
Complete cell formatting support for Google spreadsheets via gspread package.

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to gspread-formatting

slackdown
A simple Slack message text formatting to HTML code converter.
Stars: ✭ 27 (-77.69%)
Mutual labels:  formatting
clang-format-action
GitHub Action for clang-format checking
Stars: ✭ 48 (-60.33%)
Mutual labels:  formatting
use-google-spreadsheet
react hook for using google spreadsheet as a data table (API endpoint)
Stars: ✭ 106 (-12.4%)
Mutual labels:  google-spreadsheet
scalafmt-probot
🤖Github bot for checking code formatting with scalafmt
Stars: ✭ 15 (-87.6%)
Mutual labels:  formatting
sf
Simple Bash framework which provides argument parsing, usage output and text formatting variables
Stars: ✭ 16 (-86.78%)
Mutual labels:  formatting
biguint-format
Node.js module to format big uint numbers from a byte array or a Buffer
Stars: ✭ 16 (-86.78%)
Mutual labels:  formatting
leveldb-cli
CLI for LevelDB
Stars: ✭ 86 (-28.93%)
Mutual labels:  formatting
Golite
Add essential language support for the Go language to Sublime Text 3.
Stars: ✭ 14 (-88.43%)
Mutual labels:  formatting
prettysize-rs
Pretty-print file sizes and more
Stars: ✭ 29 (-76.03%)
Mutual labels:  formatting
laravel-formatters
«‎Formatter» pattern for Laravel
Stars: ✭ 86 (-28.93%)
Mutual labels:  formatting
sublime-postcss-sorting
Sublime Text plugin to sort CSS rules content with specified order.
Stars: ✭ 19 (-84.3%)
Mutual labels:  formatting
awesome-python-code-formatters
A curated list of awesome Python code formatters
Stars: ✭ 168 (+38.84%)
Mutual labels:  formatting
ad localize
ADLocalize is a simple way to manage your localization files. Supported wording sources : CSVs and Google Sheets. Localization file generation available for iOS, Android, JSON (i18next), YAML and Java properties
Stars: ✭ 22 (-81.82%)
Mutual labels:  google-spreadsheet
postcode
A PHP library to validate and format postcodes
Stars: ✭ 61 (-49.59%)
Mutual labels:  formatting
ronin-support
A support library for Ronin. Like activesupport, but for hacking!
Stars: ✭ 23 (-80.99%)
Mutual labels:  formatting
idea-uroborosql-formatter
Beautiful SQL Formatter for IntelliJ Platform
Stars: ✭ 18 (-85.12%)
Mutual labels:  formatting
international-telephone-input
Integration to Magento 2 a jQuery plugin for entering and validating international telephone numbers.
Stars: ✭ 26 (-78.51%)
Mutual labels:  formatting
Textylic
A note taking app developed for the 22nd century
Stars: ✭ 34 (-71.9%)
Mutual labels:  formatting
OntoMaton
OntoMaton facilitates ontology search and tagging functionalities within Google Spreadsheets.
Stars: ✭ 35 (-71.07%)
Mutual labels:  google-spreadsheet
fantomas-for-vs
Visual Studio Formatter for F#
Stars: ✭ 43 (-64.46%)
Mutual labels:  formatting

gspread-formatting

https://travis-ci.com/robin900/gspread-formatting.svg?branch=master Documentation Status

This package provides complete cell formatting for Google spreadsheets using the popular gspread package, along with a few related features such as setting "frozen" rows and columns in a worksheet. Both basic and conditional formatting operations are supported.

The package also offers graceful formatting of Google spreadsheets using a Pandas DataFrame. See the section below for usage and details.

Usage

Basic formatting of a range of cells in a worksheet is offered by the format_cell_range function. All basic formatting components of the v4 Sheets API's CellFormat are present as classes in the gspread_formatting module, available both by InitialCaps names and camelCase names: for example, the background color class is BackgroundColor but is also available as backgroundColor, while the color class is Color but available also as color. Attributes of formatting components are best specified as keyword arguments using camelCase naming, e.g. backgroundColor=.... Complex formats may be composed easily, by nesting the calls to the classes.

See the CellFormat page of the Sheets API documentation to learn more about each formatting component.:

from gspread_formatting import *

fmt = cellFormat(
    backgroundColor=color(1, 0.9, 0.9),
    textFormat=textFormat(bold=True, foregroundColor=color(1, 0, 1)),
    horizontalAlignment='CENTER'
    )

format_cell_range(worksheet, 'A1:J1', fmt)

The format_cell_ranges function allows for formatting multiple ranges with corresponding formats, all in one function call and Sheets API operation:

fmt = cellFormat(
    backgroundColor=color(1, 0.9, 0.9),
    textFormat=textFormat(bold=True, foregroundColor=color(1, 0, 1)),
    horizontalAlignment='CENTER'
    )

fmt2 = cellFormat(
    backgroundColor=color(0.9, 0.9, 0.9),
    horizontalAlignment='RIGHT'
    )

format_cell_ranges(worksheet, [('A1:J1', fmt), ('K1:K200', fmt2)])

Specifying Cell Ranges

The format_cell_range function and friends allow a string to specify a cell range using the "A1" convention to name a column-and-row cell address with column letter and row number; in addition, one may specify an entire column or column range with unbounded rows, or an entire row or row range with unbounded columns, or a combination thereof. Here are some examples:

A1     # column A row 1
A1:A2  # column A, rows 1-2
A      # entire column A, rows unbounded
A:A    # entire column A, rows unbounded
A:C    # entire columns A through C
A:B100 # columns A and B, unbounded start through row 100
A100:B # columns A and B, from row 100 with unbounded end
1:3    # entire rows 1 through 3, all columns
1      # entire row 1

Retrieving, Comparing, and Composing CellFormats

A Google spreadsheet's own default format, as a CellFormat object, is available via get_default_format(spreadsheet). get_effective_format(worksheet, label) and get_user_entered_format(worksheet, label) also will return for any provided cell label either a CellFormat object (if any formatting is present) or None.

CellFormat objects are comparable with == and !=, and are mutable at all times; they can be safely copied with Python's copy.deepcopy function. CellFormat objects can be combined into a new CellFormat object using the add method (or + operator). CellFormat objects also offer difference and intersection methods, as well as the corresponding operators - (for difference) and & (for intersection).:

>>> default_format = CellFormat(backgroundColor=color(1,1,1), textFormat=textFormat(bold=True))
>>> user_format = CellFormat(textFormat=textFormat(italic=True))
>>> effective_format = default_format + user_format
>>> effective_format
CellFormat(backgroundColor=color(1,1,1), textFormat=textFormat(bold=True, italic=True))
>>> effective_format - user_format
CellFormat(backgroundColor=color(1,1,1), textFormat=textFormat(bold=True))
>>> effective_format - user_format == default_format
True

Frozen Rows and Columns

The following functions get or set "frozen" row or column counts for a worksheet:

get_frozen_row_count(worksheet)
get_frozen_column_count(worksheet)
set_frozen(worksheet, rows=1)
set_frozen(worksheet, cols=1)
set_frozen(worksheet, rows=1, cols=0)

Setting Row Heights and Column Widths

The following functions set the height (in pixels) of rows or width (in pixels) of columns:

set_row_height(worksheet, 1, 42)
set_row_height(worksheet, '1:100', 42)
set_row_heights(worksheet, [ ('1:100', 42), ('101:', 22) ])
set_column_width(worksheet, 'A', 190)
set_column_width(worksheet, 'A:D', 100)
set_column_widths(worksheet, [ ('A', 200), ('B:', 100) ])

Working with Right-to-Left Language Alphabets

The following example shows the functions to get or set the rightToLeft property of a worksheet:

get_right_to_left(worksheet) set_right_to_left(worksheet, True)

Also note the presence of the argument textDirection= to CellFormat: set it to 'RIGHT_TO_LEFT' in order to use right-to-left text in an individual cell in an otherwise left-to-right worksheet.

Getting and Setting Data Validation Rules for Cells and Cell Ranges

The following functions get or set the "data validation rule" for a cell or cell range:

get_data_validation_rule(worksheet, label)
set_data_validation_for_cell_range(worksheet, range, rule)
set_data_validation_for_cell_ranges(worksheet, ranges)

The full functionality of data validation rules is supported: all of BooleanCondition. See the API documentation for more information. Here's a short example:

validation_rule = DataValidationRule(
    BooleanCondition('ONE_OF_LIST', ['1', '2', '3', '4']),
    showCustomUi=True
)
set_data_validation_for_cell_range(worksheet, 'A2:D2', validation_rule)
# data validation for A2
eff_rule = get_data_validation_rule(worksheet, 'A2')
eff_rule.condition.type
>>> 'ONE_OF_LIST'
eff_rule.showCustomUi
>>> True
# No data validation for A1
eff_rule = get_data_validation_rule(worksheet, 'A1')
eff_rule
>>> None
# Clear data validation rule by using None
set_data_validation_for_cell_range(worksheet, 'A2', None)
eff_rule = get_data_validation_rule(worksheet, 'A2')
eff_rule
>>> None

Formatting a Worksheet Using a Pandas DataFrame

If you are using Pandas DataFrames to provide data to a Google spreadsheet -- using perhaps the gspread-dataframe package available on PyPI -- the format_with_dataframe function in gspread_formatting.dataframe allows you to use that same DataFrame object and specify formatting for a worksheet. There is a DEFAULT_FORMATTER in the module, which will be used if no formatter object is provided to format_with_dataframe:

from gspread_formatting.dataframe import format_with_dataframe, BasicFormatter
from gspread_formatting import Color

# uses DEFAULT_FORMATTER
format_with_dataframe(worksheet, dataframe, include_index=True, include_column_header=True)

formatter = BasicFormatter(
    header_background_color=Color(0,0,0),
    header_text_color=Color(1,1,1),
    decimal_format='#,##0.00'
)

format_with_dataframe(worksheet, dataframe, formatter, include_index=False, include_column_header=True)

Batch Mode for API Call Efficiency

This package offers a "batch updater" object, with methods having the same names and parameters as the formatting functions in the package. The batch updater will gather all formatting requests generated by calling these methods, and send them all to the Google Sheets API in a single batchUpdate request when .execute() is invoked on the batch updater. Alternately, you can use the batch updater as a context manager in a with: block, which will automate the call to .execute():

from gspread_formatting import batch_updater

sheet = some_gspread_worksheet

# Option 1: call execute() directly
batch = batch_updater(sheet.spreadsheet)
batch.format_cell_range(sheet, '1', cellFormat(textFormat=textFormat(bold=True)))
batch.set_row_height(sheet, '1', 32)
batch.execute()

# Option 2: use with: block
with batch_updater(sheet.spreadsheet) as batch:
    batch.format_cell_range(sheet, '1', cellFormat(textFormat=textFormat(bold=True)))
    batch.set_row_height(sheet, '1', 32)

Conditional Format Rules

A conditional format rule allows you to specify a cell format that (additively) applies to cells in certain ranges only when the value of the cell meets a certain condition. The ConditionalFormatRule documentation for the Sheets API describes the two kinds of rules allowed: a BooleanRule in which the CellFormat is applied to the cell if the value meets the specified boolean condition; or a GradientRule in which the Color or ColorStyle of the cell varies depending on the numeric value of the cell or cells.

You can specify multiple rules for each worksheet present in a Google spreadsheet. To add or remove rules, use the get_conditional_format_rules(worksheet) function, which returns a list-like object which you can modify as you would modify a list, and then call .save() to store the rule changes you've made.

Here is an example that applies bold text and a bright red color to cells in column A if the cell value is numeric and greater than 100:

from gspread_formatting import *

worksheet = some_spreadsheet.worksheet('My Worksheet')

rule = ConditionalFormatRule(
    ranges=[GridRange.from_a1_range('A1:A2000', worksheet)],
    booleanRule=BooleanRule(
        condition=BooleanCondition('NUMBER_GREATER', ['100']),
        format=CellFormat(textFormat=textFormat(bold=True), backgroundColor=Color(1,0,0))
    )
)

rules = get_conditional_format_rules(worksheet)
rules.append(rule)
rules.save()

# or, to replace any existing rules with just your single rule:
rules.clear()
rules.append(rule)
rules.save()

An important note: A ConditionalFormatRule is, like all other objects provided by this package, mutable in all of its fields. Mutating a ConditionalFormatRule object in place will not automatically store the changes via the Sheets API; but calling .save() on the list-like rules object will store the mutated rule as expected.

Installation

Requirements

  • Python 2.7, 3.x; PyPy and PyPy3
  • gspread >= 3.0.0

From PyPI

pip install gspread-formatting

From GitHub

git clone https://github.com/robin900/gspread-formatting.git
cd gspread-formatting
python setup.py install

Development and Testing

Install packages listed in requirements-dev.txt. To run the test suite in test.py you will need to:

  • Authorize as the Google account you wish to use as a test, and download a JSON file containing the credentials. Name the file creds.json and locate it in the top-level folder of the repository.
  • Set up a tests.config file using the tests.config.example file as a template. Specify the ID of a spreadsheet that the Google account you are using can access with write privileges.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].