> For the complete documentation index, see [llms.txt](https://docs.omnata.com/omnata-product-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.omnata.com/omnata-product-documentation/omnata-sync-for-snowflake/apps/ms-excel/release-history.md).

# Release History

***

### V2.3

#### Created: 2026-07-15

* Enable composite primary keys for Multi-File Consolidated sync
* Added opt-in "Preserve original column order" option to outbound sync

***

### V2.2

#### Created: 2026-07-09

Enable composite primary keys for Multi-File Consolidated sync (#18) The consolidated "MultipleFiles" stream omitted primary\_key\_can\_be\_composite, so it defaulted to False and the Configure Sync UI locked the Primary Key field to a single column. Single File mode set it True, which is why multi-select worked there. Set it True on the consolidated stream to match. Also correct the Multi-File Individual help text (a primary key is required; the runtime mandates one). Adds a regression test asserting the consolidated stream allows composite keys. Ref: CS-871

***

### V2.1

#### Created: 2026-06-22

* Added billing events

***

### V2.0

#### Created: 2026-06-16

* Reordered inbound form fields
* Added primary key columns and incremental sync for multi-file individual mode
* Removed markdown formatting from file match preview
* Fixed incremental sync for multi-file individual mode
* Restored incremental sync support for multi-file consolidated mode
* Now using last\_modified timestamp cursor for consolidated incremental sync
* Advanced consolidated cursor to live max last\_modified after full refresh
* Emitted cursor state update immediately after each file completes
* Removed unnecessary live folder scan after full refresh
* Fixed ValueError in header preview when parent\_folder\_url param not yet initialised
* The new connection flow will now be used

***

### V1.5

#### Created: 2026-05-08

* Improved OAuth2 error handling
* Support more SharePoint URL formats for inbound sync
* Surface Azure AD error descriptions (e.g. AADSTS7000215) instead of generic HTTPError.
* Use Field Mapping order to preserve original column order in outbound sync
* Added multi-file sync inbound mode
* Added a new sync mode where each matched file in a folder becomes its own stream/table, extracting the first visible worksheet. Existing modes are renamed to 'Single File' and 'Multi-file Append'
* Added header\_row sync parameter with form preview
* Support Sites.Selected permission model

***

### V1.4

#### Created: 2026-02-27

* Improve OAuth2 error handling in get\_access\_token().
* Surface Azure AD error descriptions (e.g. AADSTS7000215) instead of generic HTTPError. Logs error via logger.error for Datadog visibility.
* Only extracts known-safe fields (error\_description, error) to avoid logging sensitive data.

***

### V1.3

#### Created: 2026-02-12

* Added an information field to the config form that previews Excel files matching the provided filename regex
* Add CSV support to Excel plugin

***

### V1.2

#### Created: 2026-01-21

* Improved multi-file handling for inbound syncs

***

### V1.1

#### Created: 2026-01-13

* When selecting inbound files to sync, the plugin now uses URLs to choose the file/folder rather than searching the whole site

***

### V1.0

#### Created: 2025-12-23

* Initial release

***


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.omnata.com/omnata-product-documentation/omnata-sync-for-snowflake/apps/ms-excel/release-history.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
