Skip to main content
On this page▾

Importing Data

When a job has 30 or more pieces, entering them one by one is slow and easy to get wrong. CutOptim supports two bulk import methods that let you bring a full cut list into the app in seconds — whether your data lives in Excel, Google Sheets, or a CSV file exported from a design program.

  • Paste works for both the Stock table and the Parts table, in all three modes (2D panels, 1D linear, and wood).
  • CSV file import is available on the Parts table (2D, 1D, and wood) — under the CSV ⌄ dropdown in each Parts section header.

Both methods are available on all plans, including Free.


Method 1: Paste from Excel or Google Sheets

This is the fastest path from a spreadsheet into CutOptim. There is no file to export — just copy, paste, and go.

  1. 1

    Open your spreadsheet

    Open the Excel workbook, Google Sheet, or LibreOffice Calc file that contains your cut list or stock list.

  2. 2

    Select the data range

    Select the cells containing your data, in the expected order (Name, Width, Length, Qty for 2D; Name, Length, Qty for 1D; Name, Qty, Width, Height, Length for wood). You can include the header row — it decides the column order in every mode, so your columns can be in any order. A title line above the header (the name of the job) is fine too. A row with a missing or unreadable dimension, or a quantity of 0, is skipped, and the message after the paste says how many rows were skipped.

  3. 3

    Copy to clipboard

    Press **Ctrl+C** (or **Cmd+C** on Mac) to copy. The cells are now on your clipboard as tab-separated values. Text copied from a CSV file in Notepad or an e-mail (`Door;600;400;2`) pastes just as well — the semicolon or comma is recognised.

  4. 4

    Paste into CutOptim

    In the **Stock** or **Parts** section for your mode, click the **Paste** button in the section header — or click the paste box under the header and press **Ctrl+V**. The paste box is a slim one-line row until you click it; then it opens to full size with the column hint, ready for Ctrl+V. The rows are read and added to the table.

  5. 5

    Confirm the unit (wood Parts only)

    Pasting **wood into the Parts table** opens a short dialog with a preview asking which unit your numbers are in (mm, cm, or inch). Pick the source unit and confirm — the values are converted to your current working unit. Everything else — 2D, 1D, and **wood pasted into the Stock table** — is added straight away with no dialog; Stock wood is read in your current working unit, so set the unit before you paste.

This method works with any spreadsheet application that copies tab-separated values to the clipboard: Microsoft Excel, Google Sheets, LibreOffice Calc, Apple Numbers, and most other desktop spreadsheet tools. No special export step is needed.

How columns are read

Copy the header row with your data and CutOptim matches the columns by their titles, in every mode — in any order, with short titles such as w, h, l, Qty recognised as well as full words in every app language (Name/Név, Qty/Darab/Menge, Width/Sz/Breite, Height/M/Höhe, Length/Hossz/Länge …). Common alternatives are understood too — for the quantity Pieces, Count, Anzahl, Mennyiség, Spanish Cant.; for the price Cost, Kosten, Coût, Material price. In 2D, a list titled Name | Qty | w | l is read as width w, second side l, quantity Qty; in 1D, Qty | Length | Name is read as it says. A unit in a title — Width (mm), Länge [cm], Length (in) — is honoured, and the numbers under it are converted to your working unit.

Without a header row, columns are read by position, from left to right, in the order below. If a header is only partly recognised (for example a quantity column titled with a word CutOptim does not know), the rows are read by position and the message after the paste says so: check the table, and rename the column or reorder it if the numbers landed in the wrong place. If reading by position would contradict the header — the columns it did recognise are not where reading by position would look for them — nothing is imported, and the message names the unknown column: rename it (for example Name, Width, Length, Qty) or remove the header row, then import again.

In wood, the column hint the app shows in your language (for example Name | Qty | W | H | Length) works as a header row as it is, and a thickness column (Thickness, Dicke, Vastagság …) is recognised as a cross-section dimension.

Mode Column order
2D panels Name (optional), Width, Length, Quantity
1D linear Name (optional), Length, Quantity
Wood Name (optional), Quantity, Width, Height, Length

If you leave out the Name column, start the row with the first dimension — CutOptim assigns an automatic label.

Pasting into the Stock table keeps your names in every mode, from the Paste button and the paste box alike.

In 2D, the template’s optional Rot. and Edge banding columns come through a paste too — with a header row wherever they are, without one right after the quantity. A 0 (or no) in Rot. gives that piece a grain along the sheet, so a grain-locked part stays grain-locked — its Grain icon shows the lines. Excel’s TRUE / FALSE is understood in the Rot. column in any language (FALSCH, HAMIS, FAUX …).

A Grain column sets the grain direction from the file. Write W (the grain runs along the Width) or L (along the Length) — words such as along Length or Breite work too — or none in any app language (nincs, keine, aucun …) for no grain. It works in the Parts table (CSV and paste) and in the Stock paste, where it sets the grain of each sheet row (none = a sheet without grain, such as MDF). The message after the import says how many rows got their grain direction from the file.

Cut lists exported from other tools

A list exported from another cut-list program (columns such as Length, Width, Qty, Material, Label, Enabled, Grain direction) is read by its titles like any other, and three of those columns do something:

  • Enabled — a row marked FALSE / no / 0 is left out, and the message after the import says how many.
  • Grain direction — a part with a grain direction is locked against rotation, but only when the column actually tells parts apart. If every row carries the same value (the exporting tool’s default), the column is ignored and rotation stays on — locking every part would only cost material — and the message says so. When the column holds both h and v (horizontal and vertical), the two are kept 90° apart: h parts keep the orientation they were entered in, v parts are turned 90° from it — the Grain icon of each row shows which. A Rot. column, when present, always wins.
  • Material — in Material-specific mode a name that is already in your material inventory is assigned to the part. For names the inventory does not know, CutOptim asks once after the import whether to create them and assign the parts; with Material-specific mode off and two or more materials in the file, it asks whether to cut them separately by material (which switches the mode on). Say no and nothing changes. New materials take the size of your first stock row — the file does not say how big the sheets are — so check the stock size of each material before you run.

Method 2: Import a CSV File

If your cut list is exported as a CSV from a design program, CAD tool, or ERP system, you can import it directly into the Parts table. There is no upload — the file is read in your browser.

New to the format? Open the CSV ⌄ dropdown in the Parts section header and choose Template to download a ready-made .csv with the correct columns and two example rows that give an example for every column (in 2D also an edge-banding type code, T:ABS 22×1;B:ABS 22×1) — fill it in and import it back.

  1. 1

    Prepare the CSV

    Save your parts as a `.csv` file (a tab-separated `.txt` from Excel's *Text (Tab delimited)* works too) with the columns in the order for your mode (see the reference below). An optional header row is fine — CutOptim uses it to match the columns, and skips a title line above it.

  2. 2

    Click the CSV button

    In the **Parts** section for your mode (2D, 1D, or Wood), open the **CSV ⌄** dropdown in the section header and choose **Import CSV**. A file picker opens.

  3. 3

    Choose your file

    Select the `.csv` file from your computer. It is read immediately — nothing is sent to a server — and the parts are added to the Parts table.

  4. 4

    Confirm the unit (wood only)

    A **wood** CSV opens the same unit-confirmation dialog as paste: preview the rows, choose whether the numbers are in mm, cm, or inch, and confirm. 2D and 1D CSV rows are added directly.

CSV import adds the rows to whatever is already in the Parts table — it does not clear it first. Clear the table beforehand if you want only the imported rows.

A row that cannot be read is skipped, never guessed. A blank, unreadable, zero or negative dimension, or a quantity of 0, means the row is left out — CutOptim does not invent a size for it. The message after the import says how many rows were skipped, so compare that number with your list and fix those rows in the file.

(Changed 2026-09-29.) Until then a 2D CSV row with an unreadable width became a 400 × 300 part and a 1D one a 500 length, with no warning. If you imported a CSV before that date and a stray 400×300 or 500 is in your saved project, it came from such a row.


CSV Format Reference

CSV import populates the Parts table. If your file has a header row, columns are matched by name (so you can include only the columns you need, in any order, and add optional ones); without a header they are read by position in the order below. Dimensions are in your current working unit (millimetres by default), except wood, where you choose the source unit on import.

2D Parts (panels)

Position Column Required Description
1 Name Yes Label for this piece, e.g. Side Panel (may be left blank, but the field must be present)
2 Width Yes Piece width
3 Length Yes Piece length
4 Quantity Yes Number of identical pieces
5 Rotatable Optional 0 (or no, false, nem, nein …, and Excel’s FALSE in any language) keeps the orientation fixed; any other value, a blank cell, or leaving the column out allows 90° rotation
6 Edge banding Optional Which sides are banded, and with which type. TRBL bands those sides with no specific type — Top, Right, Bottom, Left, any order, e.g. TR for top + right, blank for none. T:ABS oak 22;L:ABS white 22 assigns a banding type by name per side (separate pairs with ;, or quote the cell to use commas); names resolve against your banding-type library, and an unknown name still bands the edge. Applied on every signed-in plan, Free included (without an account the column is ignored); ignored if left blank
7 Grain Optional W (grain along the Width) or L (along the Length); none or a blank cell = no grain. Read from a header row; the downloaded template shows L on its second example row (a non-rotatable row)
8 Price/pc Optional Extra cost per finished piece (machining, edge banding…). Adds to the job cost; never shown on a client quotation
9 Selling price Optional What you charge the customer per finished piece. Used when a quotation is built from product prices

Example: Side Panel,600,400,4,1

1D Parts (linear pieces)

Position Column Required Description
1 Name Yes Label for this piece (may be blank)
2 Length Yes Piece length
3 Quantity Yes Number of identical pieces
4 Price/pc Optional Extra cost per finished piece
5 Selling price Optional Charge per finished piece

Example: Rail,1200,6

Wood Parts (length × cross-section)

Position Column Required Description
1 Name Yes Label for this part (may be blank)
2 Quantity Yes Number of identical parts
3 Width Yes Cross-section width
4 Height Yes Cross-section height
5 Length Yes Part length
6 Price/pc Optional Extra cost per finished part
7 Selling price Optional Charge per finished part

Example: Leg,4,50,50,700

With a header row, a Thickness column is recognised as a cross-section dimension, and the app’s own wood column hint in your language is accepted as the header.

Offcut inventory CSV

The Offcut Inventory has its own CSV ⌄ dropdown (see Offcut Inventory). A file without a header row is read by the number of values in each row: 4 values = name, width, height, quantity (a panel off-cut); 3 values = name, length, quantity (a bar off-cut).

Use one unit throughout a file. For 2D and 1D the numbers are taken in your current CutOptim unit, so switch the app to the right unit before importing. For wood you pick the source unit in the import dialog, and CutOptim converts for you.

Commas, semicolons or tabs — all three work

You do not have to convert your file. CutOptim looks at the first line that contains a separator and picks whichever of comma, semicolon or tab it finds most of, then uses that for the whole file. This matters if you are on a European Windows locale, where Excel’s “CSV” is usually semicolon-separated — save it and import it as is.

Quoted fields are handled properly, so a name containing the separator ("Shelf, long") survives the trip.

Numbers, units and file encoding

  • Decimal comma or point, with or without thousands separators. 600,5, 600.5, 1 220,5, 1.220,5 and 1,220.5 are all read correctly. When a number carries both marks, the last one is the decimal mark. A lone 1.220 or 1,220 is ambiguous: it is read as a decimal unless other numbers in the same file prove which mark is the decimal one — and the message after the import names the value so you can check it.
  • A unit written in the cell — 720 mm, 72 cm, 2.44 m, 28 3/8", 2' 3 5/8" — is converted to your working unit, whatever the app is set to. Inch fractions (23 5/8) work without the inch mark too, in the working unit. This is how a SketchUp OpenCutList parts list comes in: its Designation becomes the name and its raw cutting size (Length - raw, Width - raw) is used.
  • A unit in the column title — Width (cm), Länge [mm] — applies to the plain numbers in that column.
  • File encoding. Excel’s “CSV” on Windows is not UTF-8 but the Windows code page of your language (Windows-1250 for Hungarian, Czech, Polish, Romanian and Croatian, Windows-1252 for Western languages). CutOptim detects this, so Ajtó, Tür or Listwa ścienna arrive intact. UTF-8 (with or without BOM) and Excel’s Unicode text work as well.

The price columns and header rows

The two price columns are optional everywhere, but there is one thing to know:

For 2D and 1D, the price columns are only read when your file has a recognised header row. A headerless 2D or 1D file is read purely by position, and prices in it are ignored. Wood reads them positionally too (columns 6 and 7). If you are importing prices, keep the header row — the downloadable Template already has one.

A column named plainly Price maps to the cost column, not the selling price. For the selling price use a header containing sell or selling.


Preparing Your Spreadsheet

A few habits make imports go smoothly every time:

  • A header row is optional. Both paste and CSV import recognise a header row and never import it as a part, so you can keep your column titles in either method.
  • Column order or names. With a header row, CSV import and paste match columns by their titles, in any order, in every mode; without one, columns are read by position. Extra columns after the last needed one are ignored.
  • Use whole numbers for quantity. Fractional quantities are not supported. Round up if a job calls for 2.5 sheets — enter 3. A quantity written as 2 db, 3x or ×4 is read as 2, 3 and 4; a quantity of 0 skips the row.
  • Use one unit throughout. Mixing units in a column (some values in mm, some in cm) produces wrong results. Convert the sheet to one unit first (for wood, just tell CutOptim the unit on import).
  • Labels can contain spaces and special characters. Left Side Panel – Oak is a valid label. In a CSV file, wrap a label in double quotes if it contains a comma.
  • Empty rows are skipped. Blank lines between data groups do not cause errors. A title line above the header is skipped too.

After Importing

Imported rows appear in the Parts or Stock table exactly as if you had typed them. From here:

  • Review each row before running. Check that dimensions look right and quantities match your job.
  • Edit individual cells by clicking on them. If a value came in wrong, click the cell and correct it.
  • Add or remove rows as normal — imported rows behave identically to manually entered ones.
  • Run the optimization when you are satisfied. Click Run optimizer or press Ctrl+Enter.

Both paste and CSV import add to the rows already in the table — with one exception: a table that still holds only its untouched example rows is replaced by the import, so the sample parts do not end up in your plan. Once you have edited or added a row, imports are appended; to replace your own rows, remove them first, then import.

FAQ

Can I paste data from Google Sheets into CutOptim?
Yes. Copy the data range in Google Sheets with Ctrl+C, then in CutOptim click the Paste button in the header of the Stock or Parts section (or click the slim paste row under the header, which opens to full size, and press Ctrl+V). Google Sheets copies tab-separated values to the clipboard, which CutOptim recognises automatically.
What column order does CutOptim expect when pasting from a spreadsheet?
Without a header row, columns are read by position. For 2D: Name, Width, Length, Quantity. For 1D linear: Name, Length, Quantity. For wood: Name, Quantity, Width, Height, Length. The Name column is optional. If you copy the header row too, CutOptim follows your column titles instead, in every mode and in any order (short titles like w, h, l and Qty work too, and a unit in the title such as Width (cm) is honoured). If a header is only partly recognised, CutOptim reads by position and says so in the message after the paste — unless reading by position would contradict the header: then nothing is imported, and the message names the column it did not understand. When Material-specific mode is on and your data has a header row, a Material column is also recognised — its text is matched to one of your saved materials by name, and a name with no match is left unassigned.
Does importing data cost credits or require a paid plan?
No. CSV import and spreadsheet paste are available on all plans, including Free. There is no cap on how many rows you can import — the Free plan limit is 3 optimizations per month, and an import of any size still counts as a single run.
My CSV uses semicolons instead of commas. Do I need to convert it?
No. CutOptim reads the first line that contains a separator and picks whichever of comma, semicolon or tab it finds most of, then uses that separator for the whole file. This is what Excel produces on most European Windows locales, so you can save and import it as is — also when Excel saved it in the Windows code page rather than UTF-8, so accented names arrive intact. Quoted fields are handled properly, so a name containing the separator survives.
Can I import cost and selling prices with my parts?
Yes. The parts CSV has two optional trailing columns — Price/pc (extra cost per finished piece) and Selling price (what you charge per piece). One catch: for 2D and 1D they are only read when the file has a recognised header row; a headerless 2D or 1D file is read by position and prices in it are ignored. Wood reads them positionally too. The downloadable Template already includes the header.
My spreadsheet has extra columns that CutOptim doesn't need. Will it fail?
No. Without a header row, CutOptim reads the columns in the fixed order shown and ignores any extra columns after the last one it needs — keep the recognised columns in the correct order and you can leave trailing fields (cost codes, material type, finish) in place. With a header row, CSV import and paste match the columns by their titles instead, in every mode, so their order does not matter.
My spreadsheet writes numbers as 1 220,5 or 1.220,5. Do I need to reformat them?
No. Decimal commas and decimal points both work, and so do thousands separators — a space, a non-breaking space, a dot (1.220,5) or a comma (1,220.5). When a number has both marks, the last one is the decimal mark. A lone 1.220 or 1,220 is ambiguous: CutOptim reads it as a decimal unless other numbers in the same paste or file prove which mark is the decimal one, and the message after the import names the value so you can check it.
Can I import my stock (sheets, bars) from a CSV file?
The CSV file button is on the Parts table only. To bulk-fill the Stock table, paste from a spreadsheet (works for stock too), or use the Material inventory to save and reuse your standard sheet and bar sizes.
I corrected some dimensions in my spreadsheet. Can I paste or re-import to update the rows already in the table?
No — and doing so will not update anything. Paste and CSV import ADD rows; they never match, replace, or update rows you entered or edited (the only thing an import replaces is a table that still holds just its untouched example rows). Re-importing a corrected cut list leaves you with both versions of every piece, and the optimizer will cut all of them. To update existing rows, either edit the cells in place, or delete the current rows first (the ✕ button on each row) and then import.
How do I change the width or length of a piece I already entered?
Click the Width or Length cell in the Parts table, type the new value, and press Tab or Enter to confirm. Then run the optimization again to see the new layout. Do not paste or re-import to change a dimension — that adds a duplicate piece rather than updating the original.
Can I import the grain direction of my parts and sheets?
Yes, in 2D. Add a Grain column to a list with a header row and write W (the grain runs along the Width) or L (along the Length) in it, or none for no grain. Words such as along Length work too, and none is understood in any app language. It works for parts (CSV and paste) and for the Stock paste, where none marks a sheet without grain, such as MDF. The downloadable 2D Template already has the Grain column, with L on its second example row.

Last updated: October 12, 2026