Das Benutzerhandbuch ist auf Englisch und Bulgarisch verfügbar. Sie lesen die englische Fassung.
Importing a BoQ from Excel
Auf dieser Seite
- Which import do you need?
- Preparing the Excel file
- How to start an import
- Import statuses
- The import page
- How to fix the column mapping
- How to correct rows
- Checks that block saving
- How to resolve unit-price conflicts
- How to save the import to the BoQ
- Saving corrections back into the Excel file
- Working on one import together
- When an import page cannot be edited
- How to delete an import
- Import with analyses
- Import with applied prices (on behalf of a subcontractor)
- Limits
- Common questions
- Related
| Where | BoQ editor → Exchange (Обмен) → Import (Импорт), or right-click a category → Import into subsection (Импортиране в подобект). The import page: /projects/{project}/boq-imports/{import}?evt={boq} |
|---|---|
| Who can | Project permission Offers (Оферти) at Edit. Picking a file from the File Manager also needs File manager (Файлов мениджър) at View. The structure import works on the Free plan (in offer BoQs); import with analyses needs resource analysis, so a paid plan or a trial. |
| Related | Working in the BoQ editor, Exporting, Resource analysis, Self-managed subcontractors and self-contracts |
Which import do you need?
| Import | Use it when | Where it starts | Saved as a draft? |
|---|---|---|---|
| Import (structure import) | The usual case: the file has categories and positions with units, quantities and optionally unit prices. Rows are added to the BoQ. | Import → hub → Start import | Yes. A shared import page you can leave and continue. |
| Import with analyses (Импортиране с анализи) | The file also holds a resource analysis (materials, machinery, labor, additional costs) for every position. | Import → hub → Import with analyses | No. One dialog, finished in one go. |
| Import with applied prices | Only when you record a self-managed subcontractor's priced offer on their behalf. Matching rows are repriced, new rows added, rows missing from the file removed. | Import on the on-behalf offer | No. |
| Fill prices for a subcontract | Inside Contract with a contractor: reads prices for the selected lines only. Nothing is written to the BoQ. | Import from Excel in that dialog | No. |
Import works on budget drafts, offers (including offers recorded on behalf of a self-managed subcontractor) and offer-request bases. It is not possible on the accepted budget or a signed contract: change those through a change order. On a quantity-only offer-request base, prices in the file are ignored.
Preparing the Excel file
BuildColab reads most bills of quantities as they come from clients. The cleaner the file, the less you correct afterwards. Follow these rules:
- Use .xlsx. .xls is accepted but not recommended: indentation cannot be read, it cannot be saved back as a corrected version, and the export into the original file does not work with it. CSV and PDF are not accepted.
- One flat table per sheet, no merged cells. A section title merged across several columns falls outside the description column, so the row arrives with an empty description and is dropped.
- A header row near the top. BuildColab looks for the column titles in the first 15 rows of each sheet; row 1 is safest. A long preamble above the table can hide the header.
- Categories and positions in the same columns. A category is a row with a description but no unit and no quantity. A position is a row with a description and a unit and/or quantity.
- Hierarchical codes for nesting. Number the rows 1 → 1.1 → 1.1.1. Codes may also be numeric (01, 0101, 010101) or split over several columns. Without codes, Excel indentation (.xlsx only) or leading spaces in the description are used when there are at least two levels.
- Numbers may use a comma or a dot as decimal separator and spaces between thousands (12,50 · 1 234.5). An empty or unreadable quantity imports as 0; an empty unit price imports as "no price".
- No totals inside the table, or leave them — they are skipped. Rows such as "Общо", "Всичко", "Сума", "Междинна сума", "Total", "Sub-total", "ДДС", "VAT", "Пренос", "carried forward" and notes/legend lines without a unit are ignored, as are header repeats, decorative rows and trailing categories with nothing under them.
- Several sheets are all imported. In a workbook with several sheets each sheet becomes a top-level category named after the sheet; a single-sheet workbook is imported without that extra level. Delete a summary sheet that repeats the other sheets in Excel before importing, or everything is imported twice.
Import file format
Use this layout for a file you prepare yourself. The column order is free; the titles below are recognized automatically (upper or lower case).
| Column | Field | Required? | Recognized header titles | What to put in it |
|---|---|---|---|---|
| A | Code (Код) | Recommended | Код, Номер, №, No, Номер на СМР | Hierarchical code: 1, 1.1, 1.1.1 … for categories and positions. Defines the nesting. |
| B | Description (Описание) | Yes | Описание, Наименование, Име, СМР, Задача, Наименование на СМР, Описание на строително-монтажни работи | Category name or position description. Never empty. |
| C | Unit of measure (Мерна единица) | Yes for positions | Мерна единица, Мярка, Мерна ед., Ед. мярка, м.ед., Ед. изм. | m, m², m³, pcs, kg … Leave empty on category rows. |
| D | Quantity (Количество) | Yes for positions | Количество, К-во, Кол. | Number. Leave empty on category rows. |
| E | Unit price (Единична цена) | No | Единична цена, Цена, Ед. цена, Цена за единица, Ед. стойност, Цена без ДДС | Number, 0 or more. Ignored on quantity-only BoQs. |
| F | Note (Забележка) | No | Забележка, Заб., Забележки | Clarification that tells two otherwise identical positions apart, for example "Floor 2". |
Example of a correctly prepared sheet:
| Код | Описание | Мерна единица | Количество | Единична цена | Забележка |
|---|---|---|---|---|---|
| 1 | Груб строеж | ||||
| 1.1 | Изкопни работи | ||||
| 1.1.1 | Машинен изкоп | m³ | 450 | 8,50 | |
| 1.1.2 | Ръчен изкоп | m³ | 35 | 32,00 | |
| 2 | Довършителни работи | ||||
| 2.1 | Гипсова шпакловка по стени | m² | 1 250 | 6,40 | Етаж 1 |
| 2.2 | Гипсова шпакловка по стени | m² | 1 180 | 6,40 | Етаж 2 |
Rows 1, 1.1 and 2 have no unit and no quantity, so they become categories; 1.1.1 nests under 1.1 because of its code. The two plastering rows are kept apart by their notes.
How to start an import
- Open the BoQ you want to fill. To import at the top level, click Import (Импорт) in the action bar. To import into one category, right-click it → Import into subsection (Импортиране в подобект); all top-level rows of the file then land under that category.
- The dialog Import BoQ (Импорт на КСС) opens. Under Imports in progress (Импорти в процес) it lists every import already started on this BoQ.
- Under New import (Нов импорт), choose the file: File from device (Файл от устройството) → Choose a file or drag the file into the tile; or File from the File Manager (Файл от Файловия мениджър) → pick an .xls/.xlsx file from the project files → Choose.
- Click Start import (Започни импорт). The import page opens.
Picking a device file clears a File Manager pick and vice versa. Files up to 200 MB are accepted. If the import cannot be created you see The import could not be created. The workbook is kept as a hidden source file of the BoQ.
- Imports in progress: one card per import started on this BoQ, with its status.
- The card's Continue and Delete buttons.
- File from device with Choose a file and drag and drop.
- File from the File Manager for a file already in the project.
- Import with analyses for a file with resource analyses.
- Start import creates the import and opens the import page.
Import statuses
| Status (EN) | Status (BG) | Meaning | What you can do |
|---|---|---|---|
| In progress | В процес | The import is being prepared and corrected. | Continue or Delete. |
| Saving to the project | Записва се в проекта | The import is being written to the BoQ. | Wait; Continue and Delete are inactive. |
| Saved to the project | Записан в проекта | The import is in the BoQ. | View only, or delete the import record. |
A card also shows "Created {date} · last change {date}", the number of corrected rows, a red line Saving to the project failed: {message} after a failed save, or "The uploaded workbook is no longer available, so this import can only be deleted."
The import page
The import page header shows Back to the BoQ (Назад към КСС), the file name, the status, Last edited by {name}, the save indicator (Saving…, Saved, or in red Not saved — check your connection), the Label option, Save to Excel file and Save to project. Two tabs sit below:
- File (Файл) — the original workbook, read-only, so you can compare.
- Recognition (Разпознаване) — the grid where you check and correct everything. It opens by default.
The first time anyone opens a new import, BuildColab recognizes it automatically (a Processing overlay): it maps the columns, decides the type of every row and builds the nesting. The result is stored, so everyone who opens the import later sees the same starting point. If recognition fails: The data could not be recognized.
How to fix the column mapping
The bar Column mapping (Разпределение на колоните) above the grid shows which column holds what, as colored pills on the column headers.
- Click Edit columns (Редактирай колоните), or click a pill directly.
- Click a column's pill and choose its type. Not mapped (Не е зададена) ignores the column. When Code or Description is already mapped, the option "+ Description" adds this column to it (the texts are joined).
- Click Save columns (Запази колоните), or Discard changes.
| Type (EN) | Type (BG) | Required? | Rule |
|---|---|---|---|
| Code | Код | No | May span several columns (joined as a.b.c). Edits to code cells are not stored. |
| Description | Описание | Yes | May span several columns (joined with spaces). |
| UoM | м.ед. | Yes | One column only. |
| Qty | К-во | Yes | One column only. |
| Unit price | Ед. цена | No | Not offered on quantity-only BoQs. |
| Note | Забележка | No | Typing a note on a sheet without a note column adds one automatically. |
Saving the columns re-runs recognition for that sheet and recalculates row types and nesting there; switching sheets while editing discards unsaved mapping changes.
- The Label checkbox and label name.
- Save to project commits the import to the BoQ.
- The Column mapping bar with Edit columns.
- Colored column pills: Code, Description, UoM, Qty, Unit price, Note.
- The Row type column: Work items, Subsection or Unassign.
- A category bar with its tree line; hover it for the ← / → depth arrows.
- The sheet tabs below the grid.
How to correct rows
Every row has a Row type (Вид на реда) dropdown:
| Type (EN) | Type (BG) | Meaning |
|---|---|---|
| Work items | СМР | A position: imported with description, unit, quantity, price and note. |
| Subsection | Подобект | A category, shown as a blue bar. |
| Unassign | Отмаркирай | Ignored, not imported (totals, notes, decorations). |
- Right-click a row for + Assign as Subsection, + Assign as Work items and - Unassign.
- Hover a category bar to show the arrows: → nests it (with its subtree) one level deeper, ← moves it one level up. Positions always belong to the nearest category above them. Click the bar to collapse or expand it, and click its name to rename it.
- Click a cell of a position to edit its description, unit, note, quantity or unit price. Quantity and price accept only digits, comma, dot and spaces.
- The sheet tabs below the grid show ! for a sheet with incomplete rows and ⚠ for a sheet with price conflicts.
Every correction is saved automatically about 0.7 seconds after you stop typing.
Checks that block saving
Three banners above the grid of the import page must be cleared before Save to project becomes active:
| Banner | Message (EN) | How to fix it |
|---|---|---|
| Required column missing | "! {sheets}: a required column (description, unit of measure or quantity) is not mapped. Map all three before importing." | Map Description, UoM and Qty on every sheet that has positions. |
| Incomplete rows | "! {n} rows with incomplete data (missing description, unit of measure or quantity) in {n} sheets. Please fill them in before importing." | Use Previous incomplete row / Next incomplete row; fill the cell, or set the row to Subsection or Unassign. Such rows carry ! in the row number. |
| Unit-price conflicts | "⚠ {n} unit price conflicts affect {n} rows. Click ⚠ to resolve them before importing." | Use Previous conflict / Next conflict and click ⚠ on a row to open the conflict dialog. |
How to resolve unit-price conflicts
A unit-price conflict means two or more position rows have the same description, unit and note but different unit prices — in one sheet, across sheets, or against a position already in this BoQ. In BuildColab identical positions share one analysis and one price, so the import must decide. When comparing, spaces and upper/lower case are ignored, "m2" equals "м2", and "бр." equals "бр".
- Click ⚠ in the row number of a conflicting row. The dialog Unit price conflict (Конфликт в единична цена) lists every row of the group with its category path, Sheet, Row and Unit of measure, and editable Unit price, Description and Note. A position already in the BoQ is shown read-only with From the offer (and "Found in {n} places").
- Either make the prices equal, or make the rows different — usually by adding a distinguishing note such as "Floor 2" for genuinely different work.
- Each card turns ✓ Resolved when it no longer clashes. Click Done (Готово).
- The dialog title Unit price conflict and the number of affected rows.
- The card From the offer: the same position as it already is in the BoQ, with its unit price.
- The conflicting workbook row with its category path and row number.
- The editable Unit price, Description and Note fields of that row.
- Done closes the dialog.
How to save the import to the BoQ
- Optionally keep Label (Етикет) ticked and adjust Label name. The label is a filter category put on every position this import creates, so you can later filter or remove exactly what this file brought in. It starts as the file name.
- Click Save to project (Запази в проекта). It is active only when recognition is finished and no banner is left.
- The page returns to the BoQ while a background job Import BoQ (Импорт на КСС) writes the rows. A progress message follows it.
- On success: Data import completed successfully! (Импортът на данни завърши успешно!). The import becomes Saved to the project and the BoQ refreshes.
Other project members with access to the BoQ get the notification "{name} imported BoQ "{BoQ}" ({count} items) — project "{project}"". If categories had to be renamed, the message adds "{count} categories renamed so that no two siblings share a name" with up to the first three renames, for example "Walls" → "Walls (2)" (in "Floor 1"), or "at the top level". On failure: An error occurred while importing data; everything the job created is removed again, the import returns to In progress and shows the error, so you can fix it and save again.
Saving corrections back into the Excel file
Save to Excel file (Запази в Excel файла) writes all your corrections into a new version of the uploaded workbook, for example to send the corrected BoQ back to the client. Version 1 always stays the untouched upload, and each save produces "original + all corrections". On success: Version {n} saved. It does not change the BoQ. It does not work for .xls files, when the workbook was deleted, or for an import that is saving or saved.
Working on one import together
- Everyone in your company with access to the BoQ can open the import from Imports in progress or by its link. Large imports with many conflicts can be split among colleagues; the hub shows the number of corrected rows.
- Corrections are saved per row: two people editing different rows never conflict; on the same row the last change wins.
- Changes by others appear on your page automatically. Your own unsaved edits are kept until they are saved.
- Column mapping, saving to Excel and saving to the project check that nobody changed the import meanwhile. If someone did: "Someone else changed this import. The latest version has been loaded — review it and try again."
- Closing the browser loses nothing; the page reopens exactly as it was left. Closing the tab with unsaved edits shows the browser's "leave site?" warning.
When an import page cannot be edited
| Message (EN) | Message (BG) |
|---|---|
| This import no longer exists — someone deleted it. | Този импорт вече не съществува — някой го е изтрил. |
| This import has already been saved to the project and can no longer be edited. | Този импорт вече е записан в проекта и не може да бъде редактиран. |
| This import is being saved to the project right now and cannot be edited until that finishes. | Този импорт в момента се записва в проекта и не може да бъде редактиран, докато това приключи. |
| The uploaded workbook is no longer available, so this import can no longer be edited. | Каченият файл вече не е наличен, затова този импорт не може да бъде редактиран. |
| This import could not be opened — its workbook could not be read. | Този импорт не може да бъде отворен — файлът му не може да бъде прочетен. |
Each of these shows Back to the BoQ. A link without the BoQ part shows Invalid project or BoQ.
How to delete an import
- In the import hub, click Delete (Изтрий) on the import card.
- Confirm Delete import (Изтриване на импорт): "Delete this import ({file})? The corrections made so far and the uploaded workbook go with it. A workbook already in use as an export base is kept."
Import with analyses
Use Import with analyses (Импортиране с анализи) when your file contains, under each position, its resource analysis. It is a single dialog that must be finished in one sitting; it is not offered on quantity-only BoQs.
File format for import with analyses
Only the first sheet is read; the header is in row 1.
| Column | Header | Content |
|---|---|---|
| A | — | "No.1", "No.2" … marks a position row. A row with an index but no "No." is a category. |
| B | Индекс | Dotted index 1, 1.2, 1.2.3 that defines the nesting (at most 15 levels). |
| C | — | Not used. |
| D | Код | Code. |
| E | Име | Name of the category, position or resource. |
| F | м.ед. | Unit. Required for every position. |
| G | Забележка | Note. |
| H | Разх. норма | On a position row: the quantity. On a resource row: the consumption rate. On additional-cost and profit rows: the percentage. |
| I | Цена | Unit price, hourly rate or daily rate. |
| J | ДСР, % | Delivery and storage costs %. |
| K | Коеф. | Additional coefficient. |
| L | Крайна цена | Ignored. |
| M | Стойност | Total; used to work out the price when column I is empty. |
Under each position, section header rows with exactly these texts start the resource groups: МАТЕРИАЛИ:, МЕХАНИЗАЦИЯ:, ТРУД:, ДОП. РАЗХОДИ:, УСЛУГИ:. Rows starting with "ОБЩО …" or "КРАЙНА ЦЕНА" close them and subtotal rows are skipped. A row ПЕЧАЛБА, % sets the profit %. Rows "Доп.разх. (материали/механизация/труд/услуги)" set the additional-cost percentages. A position with no resource sections but a price is imported as one lump-sum service.
How to import with analyses
- In the import hub, click Import with analyses. In Select a file with analyses, choose or drag an XLSX file and click Continue (Продължи).
- Review Recognized tasks (Разпознати задачи): the tree on the left (Description, UoM, Qty, Unit price, Value, Note — description and note are editable) and, for the selected task, its analysis on the right. The Analysis template part shows whether the task matches an existing template ("{pct}% match", "≥90% similarity", "From history") or Will create a new template; each resource shows Reuses: "{name}" or Will be created.
- Clear the blocking banners: tasks that appear more than once in the file with different analyses or prices, and positions without a unit ("Add a unit in the file (column F) and import it again"). The banners about price differences with the existing offer and about tasks without resource data are information only.
- Click Save analyses (Запази анализите). A background job Importing analyses... runs; on success: "The analyses were imported successfully".
Import with analyses writes to the company library: it creates new task templates, materials, labor and machines where no match was found. If a task already had an analysis, the existing one is kept (Kept existing analyses); items that could not be saved are listed under Imported with omissions.
Import with applied prices (on behalf of a subcontractor)
When you record an offer on behalf of a self-managed subcontractor, Import opens a one-step dialog instead of the hub: choose the file (also from Company files), Recognize data, check the columns, then Save to project. The file is applied as a full replacement plan in a background job Apply prices: matching rows (same category path, description, unit and note) get the file's price and quantity, new rows are added, and rows that are not in the file are removed. Price conflicts do not block this mode. See Self-managed subcontractors and self-contracts.
Limits
| Limit | Value |
|---|---|
| File types | .xlsx (recommended), .xls |
| File size | Up to 200 MB; the File tab preview shows files up to 25 MB in the full viewer |
| Header search | First 15 rows of each sheet |
| Nesting depth | Up to 15 levels (deeper means the columns were recognized wrongly) |
| Import / label name | Up to 255 characters |
| Unit price | 0 or more |
Common questions
I imported the file twice and now every position is doubled. What do I do?
Import always adds rows. In Controls, filter by the label of the second import (it carries the file name), select the filtered positions and delete them. Next time check Imports in progress in the hub before starting.
Why is Save to project gray?
A banner is still open: a required column is not mapped, some rows miss description, unit or quantity, or there are unit-price conflicts. Recognition may also still be running. Clear every banner.
Why did everything become categories?
Either the description is read from the numbering column, or no unit/quantity column is mapped, so every row looks like a category. Fix it with Edit columns.
Why are my section titles missing?
They are probably merged cells spanning several columns, so the description column is empty for that row. Unmerge them in Excel and import again, or type the name in the grid and set the row to Subsection.
Why did "Walls" become "Walls (2)"?
There was already a category "Walls" on the same level. Category names on one level must be unique, so BuildColab added a number.
Can I import into an accepted budget or a signed contract?
No. Those are changed through a change order. The server answers "An accepted investor budget cannot be edited directly — change it through a change order."
"Someone else changed this import." What now?
A colleague changed the import while you were working. The latest version has been loaded; check it and repeat your step.