# 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.opencutlist.org/features/parts/export-to-csv/customization.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
