Creating Spreadsheet Forms
This page covers how to create and configure spreadsheet-style forms — from initial setup to publishing.
Prerequisites
Before creating a Spreadsheet Form, ensure you have:
- Administrator or form creator permissions
- A clear list of cells that users should fill in
- Field names and labels for each input cell
- Dropdown option lists, if the form needs controlled choices
- Any formulas or calculations simplified enough to test inside OSPROV
If you are converting an existing Excel file, use it as a visual reference. The current builder does not import .xlsx files directly.
Step 1: Basic Form Setup
- Navigate to Forms in the sidebar menu
- Click Create New Form
- Fill in the form details:
| Field | Required | Description |
|---|---|---|
| Name | Yes | Descriptive name, such as "Travel Claim Form" |
| Prefix | Yes | Prefix used for submission IDs, such as CLM- |
| Theme | No | Visual theme for the form |
| Type | Yes | Select Spreadsheet Form from the dropdown |
After selecting Spreadsheet Form, the spreadsheet launchpad appears. Click Open Builder to open the full-screen builder.
The Open Builder button is disabled until the required form metadata is complete. The launchpad message explains which value is missing.
Basic Build Workflow
- Lay out the spreadsheet: Type headings, instructions, formulas, and static labels into the grid.
- Create sheets if needed: Use the sheet controls to add, rename, and delete sheets.
- Select a cell for each form input: Click the cell that the user should fill.
- Create a named cell binding: Enter the field name, label, type, and required setting.
- Apply the binding: Click Apply to save the selected cell as a form field.
- Add dropdown options if the field type is Dropdown.
- Apply formatting: Use cell formats and the allowed native toolbar items to make the form readable.
- Review named cells: Use Jump to field to confirm every input cell is bound correctly.
- Save the form: Click Save as Draft, Save, or Create New Version, depending on the form status.
- Publish the form from the Forms list when it is ready for workflow use.
Step 2: Lay Out the Spreadsheet
New spreadsheet forms start with:
- One sheet named
Sheet1 - A 50 by 50 grid
- Default text columns
- Left-aligned cells
- A scrollable grid area
Additional sheets also start as 50 by 50 grids.
Use the grid to type headings, labels, instructions, formulas, and static values. You can also add sheets, rename sheets, resize rows and columns, and use supported cell formatting.
Step 3: Bind Input Cells
In a standard OSPROV form, every input component is already a form field. When you add a Text Field, Number, Date, Select, or Checkbox component, that component carries its own field key, label, field type, validation rules, and storage behavior. OSPROV knows it is an input because the component itself is the field.
A spreadsheet is different. Most cells are just grid cells. A cell might be a title, instruction, table header, formula, calculated total, visual spacing, or user input. OSPROV cannot safely assume that every edited spreadsheet cell should become structured submission data.
That is why Spreadsheet Forms use cell bindings, also called named cells. A cell becomes an OSPROV form field only after you bind it as a named cell.
A cell binding tells OSPROV:
- Which exact cell is a field, such as
Sheet1!B3 - What field name to store, such as
requested_amount - What label to show in validation messages and submission columns
- What field type to use: Text, Number, Date, or Dropdown
- Whether the cell is required
- Which options are allowed, if the field type is Dropdown
Without a binding, OSPROV still saves the cell in the full visual spreadsheet snapshot, but it does not treat that cell as structured form data. This separation keeps layout cells, instruction cells, formula cells, and input cells from being mixed together.
Named Cells vs Standard Form Fields
| Standard Form | Spreadsheet Form |
|---|---|
| A dragged component is automatically a field | A cell becomes a field only after you apply a binding |
| The field key belongs to the component | The field name belongs to the selected cell binding |
| The label appears on the component | The label is metadata for validation messages and reporting |
| The field type is part of the component configuration | The field type is set in the binding toolbar |
| Validation applies to the component | Validation applies only to bound cells |
| Submission data is built from input components | Submission data is extracted from bound cells only |
| Layout components are separate from input components | Static layout cells and input cells can live in the same grid |
Example
| Cell | Purpose | Binding |
|---|---|---|
A1 | Title: Travel Claim Form | Do not bind |
A3 | Label: Requested Amount | Usually do not bind |
B3 | User enters amount | Bind as requested_amount, label Requested Amount, type Number |
B4 | Formula: =B3*0.08 | Bind only if the calculated value is needed as named submission data |
Cell bindings are not the same as Excel named ranges. They are OSPROV metadata for extracting and validating one spreadsheet cell as a form field.
Binding Toolbar
Select a cell, then configure its binding in the toolbar.
| Control | Description |
|---|---|
field_name | Internal field name used in submissions, reports, queries, and integrations |
Label | User-facing label used in validation messages and column headings |
Type | Field type: Text, Number, Date, or Dropdown |
Required | Requires the submitter to fill this cell before final submission |
| Apply | Saves or updates the binding for the selected cell |
| Clear | Removes the binding from the selected cell without clearing the cell value |
| Dropdown options | Appears only for Dropdown fields; enter one option per line |
Field names must be unique across all sheets in the same spreadsheet form. Field names are normalized to lowercase letters, numbers, and underscores.
Field Types
Text
Best for: Names, descriptions, references, remarks, or other free-form values.
Validation:
- Required check, if enabled
- Export safety for values beginning with
=,+, or@
Number
Best for: Amounts, quantities, scores, and numeric calculations.
Validation:
- Required check, if enabled
- Must be numeric after removing commas
- Exports as a numeric value
- Works best with Number, Currency, or Percentage display formats
Date
Best for: Dates selected by the user.
Validation:
- Required check, if enabled
- Must parse as a valid date
- Displays as
DD/MM/YYYY - Stores canonical values as
YYYY-MM-DD - Exports as an Excel date
Dropdown
Best for: Controlled choices such as department, status, category, or yes/no selections.
Validation:
- Required check, if enabled
- Must match one of the configured dropdown options exactly
- Options are defined one per line in the builder
Checkbox is not currently exposed as a Spreadsheet Form field type. Use Dropdown with options such as Yes and No when a single-cell choice is needed.
Formatting Cells
OSPROV supports two kinds of formatting:
- Native spreadsheet style — fill color, text color, font size, bold, alignment, supported borders, merged cells, and related grid styles
- OSPROV display format — General, Text, Number, Currency (RM), Percentage, and Date
| Format | Description |
|---|---|
| General | Displays the raw cell value without special formatting |
| Text | Treats the value as text for display and export |
| Number | Displays and exports compatible values as numbers |
| Currency (RM) | Displays numeric values with RM formatting and exports compatible Excel currency values |
| Percentage (%) | Displays numeric values as percentages |
| Date (DD/MM/YYYY) | Displays compatible date values as DD/MM/YYYY |
Formatting does not change the canonical value stored for a bound field. For example, a currency cell may display RM 1,234.00, but OSPROV stores and validates the underlying number.
Working with Sheets
| Control | Description |
|---|---|
| Sheet name input | Renames the active sheet |
+ | Adds a new sheet |
x | Deletes the active sheet; disabled when there is only one sheet |
| Sheet tabs | Switch between sheets |
Each sheet has its own grid layout and bound fields. The same cell address can exist on multiple sheets because OSPROV stores the sheet context with the field.
Supported Grid Actions
The builder supports:
- Selecting cells and ranges
- Typing static text and values
- Typing formulas where the spreadsheet engine supports them
- Copying and pasting spreadsheet data
- Resizing rows and columns
- Inserting and deleting rows and columns
- Merging cells where the grid UI provides merge behavior
- Scrolling large sheets horizontally and vertically
If you insert or delete rows or columns after creating bindings, review all named cells before saving. Cell bindings may shift with the layout.
Saving and Publishing
- Build the spreadsheet layout
- Bind each input cell that should become submission data
- Add dropdown options, if needed
- Apply formatting for readability
- Use Jump to field to review every named cell
- Click Save as Draft, Save, or Create New Version, depending on the form status
- Publish the form from the Forms list when it is ready for workflow use
Pre-Publish Checklist
- Form name and prefix are complete
- Spreadsheet layout is readable
- Every input cell has the correct binding
- Field names are clear and unique
- Labels are understandable to users
- Required fields are marked only where needed
- Dropdown options are complete
- Date fields use the Date type
- Number fields use the Number type
- Formulas are tested in OSPROV, not only in Excel
- Named cells are reviewed after row or column changes
- A test workflow submission has been completed
- XLSX export has been checked for complex forms