> For the complete documentation index, see [llms.txt](https://docs.opencutlist.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.opencutlist.org/features/parts/export-to-csv/customization.md).

# Customization

Columns of the exported data can be customized using the **Formula editor**.

### Native Columns

<figure><img src="/files/Q0RTDwDwioKk8LXiEE5K" alt=""><figcaption></figcaption></figure>

The native columns are the raw columns that depend on the selected **Source** (Summary, Parts List or List of Instances).

For each column, you may

* change its title
* hide or show it
* remove or add it
* change the alignment (this will have no effect in the exported file!)

The order of columns can be changed by dragging the left handle.

{% hint style="success" %}
You can preview your configuration at any time.
{% endhint %}

<figure><img src="/files/FIUhS4kgY1BHeP1xooWX" alt=""><figcaption></figcaption></figure>

The settings can be saved to a preset for future use.

You can also add new columns, for example to add the result of a formula.

### Formulas

<figure><img src="/files/zaHEM4gMByzZmsSyGxFn" alt=""><figcaption></figcaption></figure>

A formula can be added to each column to define its content. To be as powerful as possible, formula are written in **Ruby** code.

For example, to add the string "ABC-" in front of each designation, use

`"ABC-" + @Designation`

To replace the edge material name by an X, use

`@Edge Length 1.empty? ? '' : 'X'`

This tells **OpenCutList** that you want to concatenate two strings, instead of just using the native value of the column.

To get a list of available variables, type @ into the formula field. In front of each variable, a small colored square will tell you what is the type of this variable.&#x20;

<figure><img src="/files/0VZjKMK2R2bY9ym2Cqst" alt=""><figcaption></figcaption></figure>

The meaning is

* `S`: [string](https://ruby-doc.org/core-2.5.1/String.html)
* <mark style="color:blue;">`I`</mark>: [integer](https://ruby-doc.org/core-2.5.1/Integer.html), a number without decimal part
* <mark style="color:yellow;">`L`</mark>: [length](https://ruby.sketchup.com/Length.html), a number measuring a length
* Black `A`: [array](https://ruby-doc.org/core-2.5.1/Array.html) or list of something
* Orange <mark style="color:orange;">`A`</mark>: area
* <mark style="color:orange;">`T`</mark>: material type, an object that represents a material type name with following test functions:
  * `is_solid_wood?`
  * `is_sheet_good?`
  * `is_dimensional?`
  * `is_hardware?`
  * `is_edge?`
  * `is_veneer?`
* <mark style="color:purple;">`E`</mark>: edge object that hold 3 sub properties :
  * `material_name` - the edge material name (`S`: string)
  * `std_thickness` - the edge thickness (<mark style="color:yellow;">`L`</mark> : length)
  * `std_width` - the edge width (<mark style="color:yellow;">`L`</mark> : length)
* <mark style="color:purple;">`V`</mark>: veneer object that hold 2 sub properties :&#x20;
  * `material_name` - the veneer material name (`S`: string)
  * `std_thickness` - the veneer thickness (<mark style="color:yellow;">`L`</mark>: length)

{% hint style="danger" %}
Depending on the type of value, certain operations may not yield the expected result. Adding a length to a quantity will probably not make sense, and the column might be empty.
{% endhint %}
