Patches for versions 2.9 and above must be applied using ApplyPatch.ps1. If you have a version lower than 2.9.3, download this file, unblock it and place it in the same folder as Web.config.
To run the script, open a Powershell window with administrative rights. Go to the directory containing the script. Type .\ApplyPatch.ps1 and hit Enter. Follow any on-screen instructions.
If an error is encountered when attempting to login from the addin, paste dll files from the Addin folder in the full download into %localappdata%\SheetKraft. Be careful not to replace config files.
Versions 2.10 and beyond require the .NET Framework 4.7.2 for all components including the addin. To check if this is installed open a Powershell window and run the command (Get-ItemProperty "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full").Release -ge 461808
Version 2.16.4.1
Released on January 08, 2024
What's new:
Added drafts management functionality (beta) on procedure run logs page.
Added new SheetKraft Logo.
Bug fixes:
Fixed bug in addin where files were not getting downloaded because of a previous migration of the download endpoint from activities to files controller
Manual Download links (if script based download fails)
Eliminated the display of full connection string in connectionStrings section of the ConfigEditor and masked passwords in the Database Connection window.
Generate diagnostics option will only show up for Activities built using the Excel add-in.
Added a utility to test various database connections.
Added a script to switch between primary and secondary database connections leveraging the above utility.
Added a key called 'Environment' in the appSettings section of Web.config. This key must correspond to the same key-value pair in sk.Configurations table in order to start the web environment. The value of this key can be anything, but the recommended values are: UAT, Prod, DR and such that enable the user applying any patches to ascertain where the changes are being made.
Implemented RequiresInitialization attribute on Inputs type of DotNetPlugin procedures.
Added IDAM API endpoints for Rights.
Enhanced functionality and optimizations:
Handled non-download and error messages for cases where download of .NET activities is attempted.
Relaxed checks for usernames of various sources to allow case-insensitive usernames.
Changed targeting of the default version of OLEDB to be the latest installed instead of the oldest installed.
Optimized fetching of table metadata in Postgre to improve speed.
Modified download of activity files to handle cases where the activity file is stored outside the database.
Bug fixes:
Added a resource file that was missing in the previous release causing the disappearence of some lines and icons on the UI.
Download activity version button was not visible in the new UI beta which has now re-appeared.
Fixed blank file outputs appearing on the UI for the file outputs that don't need to be shown.
Fixed crash in file inputs using StartActivity or QueueActivity introduced in recent changes to handling of error values.
Fixed filename without spaces not wrapping on the UI.
Security fixes:
Added check for Environment at startup of the application to avoid connections to unintended databases.
Manual Download links (if script based download fails)
Added support for controlling concurrent runs of activities. This support is experimental and will be formalized in a future release.
Fix to crash when more than one defined function has the same name.
Fix to ExportSheets when a slicer was in use.
Improved error reporting in the addin when file paths in the activity package are too long.
SendEmail now has a relaxed validation mode where invalid addresses do not cause a total failure. Also, it is now possible to send emails as long as there is at least one valid email address in any of the To, CC, BCC fields.
Fixed a bug in GetADUserInfo
StartActivity and QueueActivity now support file inputs.
VALUE and NUMBERVALUE now produce warnings instead of messages when the inputs cannot be converted to a number.
Fix to DataFromText UI that wasn't loading formats correctly for an existing formula.
DataFromExcel now ignores the password provided when the file is not encrypted. This enables the use of an unencrypted file where an encrypted file is expected.
ExportToDatabase for SQL Server now reports row-level errors when an attempt is made to insert NULL into a non-nullable column. This makes it a lot easier to diagnose the problematic row.
The default AllowedFileNameRegex setting now allows commas. This will not affect installations where the setting is already present in the config file.
Fixes to the email listening functionality in IMAP to handle errors better.
ExportToHtml template now supports type="date". This allows the use of format strings for Excel numbers to be interpreted as dates.
The auto-generated API for activities now supports providing a json value for text inputs without needing to serialize it.
The auto-generated API for activities now supports providing a json value for text inputs without needing to serialize it.
Fixed bug where DataFromDatabase with manual query or procedure could cause graph resolution errors.
DataFromEmail now saves attachments to files with the correct filename instead of a GUID.
Fixed bug where Define Activity screen would fail to load if the Validation for an input became invalid through deletion of the cell.
Added support for specifying a right for an activity input. Only users with the right will be able to specify a value for such inputs when running the activity.
Manual Download links (if script based download fails)
Fixed bug where DateValueEx.SK was reporting an error instead of a warning. When part of an IF formula, this could result in an activity failing without any visible error.
Fix to ExportSheets to support a space in a sheet name containing or referencing a chart.
Improved the performance of run history pages in cases where runs had bulky table outputs that were resulting in heavy data transfers.
Added a button to switch to and from the new beta UI.
Fixed a bug in ExportSheets where exporting a completely blank sheet would fail.
Fixed a crash in ActivityRunner when an error message in an activity was larger that the 4000 character limit. Such messages are now truncated.
Fixed bug where ExportToExcel with partitions into an Amazon S3 bucket would result in paths containing a back-slash instead of a forward-slash.
LoadFile.SK now supports loading entries from sk.FileEntries also. The first argument must be specified like sk.FileEntries.numeric_id where numeric_id is the Id of the required file from sk.FileEntries table. This functionality should not be needed in most cases.
ExportToExcel now supports grouping of rows and columns. This works by specifying the grouping level for ranges of rows.
The auto-generated API for activities now supports an extra property in the json body called async. If this is set to true, the API call will return immediately with a run id in the result instead of waiting for the activity to finish running. The caller can make requests with this id in future to the same url to receive the results.
The roles page now shows existing users in the role at the top.
Number formats in Indian format (lakhs and crores) are now supported in Activity inputs / outputs. For example a format like #,##,##0 will now work as expected.
ExportToDatabase now supports GUID columns in SQL Server and PostgreSQL
ExportToHtml template now supports type="date". This allows the use of format strings for Excel numbers to be interpreted as dates.
The auto-generated API for activities now supports providing a json value for text inputs without needing to serialize it.
The auto-generated API for activities now supports providing a json value for text inputs without needing to serialize it.
Fixed bug where DataFromDatabase with manual query or procedure could cause graph resolution errors.
DataFromEmail now saves attachments to files with the correct filename instead of a GUID.
Fixed bug where Define Activity screen would fail to load if the Validation for an input became invalid through deletion of the cell.
Added support for specifying a right for an activity input. Only users with the right will be able to specify a value for such inputs when running the activity.
Manual Download links (if script based download fails)
Implemented support for configuring the Activity Runner to not pick up any activities during specified times. This works via a config key in ActivityRunner.exe.config in the appSettings section. For example, with a config like <add key="sleepTimes" value="23:00-05:00,12:00-14:00"/>, the activity runner will not pick up files between 11 pm to 5 am and 12 noon to 2 pm. Any activities queued during those times will be picked up immediately after the sleeping time ends.
ExportToDatabase now offers a batch mode insert option directly into the target table without creation of a temporary table for SQL Server and PostgreSQL. This is needed for insertion into tables with encrypted columns using the Always Encrypted feature of SQL Server. However it can be used without encryption too. The performance of this option may be slightly worse than insertion using a temporary table. If performance is important, both options should be tested. There seem to be some bugs in the .NET implementation related to empty values in encrypted columns.
Improved performance of ExportToDatabase for SQL Server when batch key is part of key columns by avoiding full table scan.
ExportSheets with format functions now supports the latest version of Excel which introduced an incompatibility in conditional formatting.
Fixed bugs in SSO when website is hosted at a non-root url.
Fixed bug where a checklist run was not getting cancelled and the page was not updating correctly.
Fixes to ExportToDbf returning and reporting errors when range has zero rows or file path is an error. Similar fixes have been made to other functions too.
Fix to ExportToDbf not being able to generate a file.
Fix to downloading of selected rows of data from a table output on activity page.
Manual Download links (if script based download fails)
DataFromEmail now supports extraction of MessageId field from the email.
Fixed error due to upgrading OpenXml library in code to handle invalid urls in excel files
Fixed bug that was preventing DataFromExcel from working with sheet number for SpreadsheetML format
Fixed bug when calling StartActivity on an activity with display inputs without specifying values. If a table input with all columns having suggested or display values is not specified, the table will be considered as having 0 rows.
Fixed another bug in creation of a new user during SSO.
Manual Download links (if script based download fails)
Added support for single sign on using either SAML2 or Open Id Connect (on top of OAuth 2). The configuration for these needs to be done in saml2.config and oauth2.config files. The SheetKraft redirect url is baseurl/sso/saml2/config_key or baseurl/sso/oidc/config_key, where config_key needs to be replaced by an the key in the config, and baseurl is the SheetKraft base web url (not including the /login portion).
ExportToExcel now supports prepending data to an existing sheet. Drawing / charts / other objects on the sheet will be shifted down if they are set to do so within Excel.
Added support for uploading and downloading files to Amazon S3 from within SheetKraft activities. All functions that read or write to files now support a path of the form s3://config_key/s3_key. The configuration for connecting to Amazon S3 needs to be stored in amazonS3Buckets.config against the name config_key.
Added a tool to migrate files between database / S3 buckets / shared folders. This works for activity input / output files, emails, and activity package files. It doesn't migrate other files stored in the database yet.
The addin now supports a setting to configure the location of the Apps folder where activities are stored. This can be used to move the Apps folder to a shared location. This can be useful in virtualized environments where the local file system storage may not be persistent. Do not use this feature to share the folder with other users however.
Validation of temporary tokens used for downloading files now includes a check for the IP address. Also, the time (in minutes) for which the token is valid is configurable in Web.config under the key DownloadTokenTimeout
Introduced an API key functionality. Admin users can generate API keys for any other users. This API key can be used in the Authorization HTTP header with a value of SheetKraftKey api_key to carry out various user management actions via APIs exposed at /idam/... endpoint. More details about these APIs will be published later.
SendEmail now supports custom or additional email headers.
DataFromHtml now handles blank table rows correctly. It also ignores some invalid attributes.
Fixed a layout issue in Database Explorer.
Fixed some potential bugs in the IMAP listener component.
The logging for the IMAP listener component has been separated from other logging. In future this will be done for more components. This will enable configuring different log levels for different components.
Config Editor now shows IMAP capabilities.
Workflows can now be cancelled properly.
Fixed an issue where clicking on the Start button on the Run Checklist page did not immediately disable the button. With a faulty mouse or an impatient user, this would sometimes result in multiple requests to start the checklist.
Fixed a bug in the retry path of saving activity outputs into the database. This should improve robustness slightly.
SheetKraft binaries are now strong-named assemblies.
Manual Download links (if script based download fails)
ExportToExcel now provides an overwrite mode. This can be used to modify formulas, values, and formats in specific targeted cells in a workbook produced from a different formula.
ExportToExcel now works with FormatCellContents. Formats applied dynamically on the range being exported are picked up during the export.
Added a function called AmountToWords that can be used to spell out amounts in words. This can be useful in letters, cheques, etc.
Added support for configuring files (like activities, inputs, outputs, emails, etc) to be stored in a shared folder instead of in the database. To activate this, add or update the value for key FileStorageLocation in sk.Configuration table to FileSystem and add a key called SheetKraft.FileStorage to the Runner\staticFolders.config file with an appropriate shared folder location. Files in this folder should not be modified manually.
Keys in staticFolders.config file no longer require a Folder: prefix. To maintain backward compatibility, this prefix will be ignored if it exists.
SendEmail now supports replying to an existing email with an option to include the body of the existing mail as a trail. Appropriate headers are added to the email so that email clients will recognize the email as being part of a thread.
SendEmail now supports configuring the time interval for which sending the email will be retried in case of failure. Earlier the interval was hard coded to 12 hours.
Fixed some bugs in SendEmail UI which could result in undesired changes to the sheet.
Fixed some bugs in the migration of checklists to workflows.
Fixed an error where a QueueActivity would fail on PostgreSQL if there was an error in ExportToDatabase.
Manual Download links (if script based download fails)
Workbook picker ranges selected on the Define Activity screen are now no longer affected by moving the range or insertion / deletion or rows / columns after the screen is closed.
There is a new field for specifying validation for each activity input on the Define Activity screen. However, this validation is only done in the beta UI.
Manual Download links (if script based download fails)
ExportToExcel now supports the old xls format partially. Template feature and formatting do not work, but other features like headers, footers, number formats, partitioning to create multiple sheets / files, appending to existing sheets should work.
Fix to bug in handling of Active Directory authentication introduced in previous version.
Validation on input fields in new checklist creation page.
Url for license activation has been changed to drop the www sub-domain.
Manual Download links (if script based download fails)
Added button on SheetKraft ribbon to launch ConfigEditor from the addin.
Support for loading fonts locally instead of from Google servers. This should eliminate inconsistencies across machines caused due to failures to load fonts.
Fixed bug in StoreFile.SK introduced in the previous release.
Fixed a bug in the newly added support for Amazon s3 buckets.
Removed deprecated function DataFromWeb.
Manual Download links (if script based download fails)
Fix to ExportSheets when setting a formula in a merged cell. This was causing an error when opening the file in the latest version of Excel 2019.
Support for storing files in an Amazon S3 bucket. Based on configuration, all uploaded files for inputs, activity files, generated files from outputs, downloaded emails for email triggers, and files in file tables targetted by StoreFile.SK are placed in an S3 bucket. If future we will add support for other blob storage providers.
Condition inputs now support showing a date picker for date fields.
Fix to a crash when sending an email fails.
Manual Download links (if script based download fails)
Added support to DataFromExcel to successfully open Excel files with missing parts as long as these parts are unused. However, this incurs the cost of an extra copy of the file.
Added validation to some fields on the create Checklist page.
Manual Download links (if script based download fails)
Support for belongs to range filter on Oracle. This only works with the ODP.NET drivers.
Support for synonyms in Oracle.
Support for listing and recognizing installed OLE DB and ODBC drivers. The ODP.NET drivers are now recommended for use with Oracle and MySQL .NET connector for use with MySQL.
Experimental support for IBM Db2 database in DataFromDatabase.
ConfigEditor now supports ui for database connections config including testing connections.
Streamlined ui for editing / creating config from database functions as well as database explorer. Existing config entries can also be edited now.
Database explorer now supports running SQL queries against any configured database, not just SheetKraft database.
Activity run status page now properly hides inputs marked hidden.
Fix to error in ROUND when input was very close to 0. Rounding to negative digits is also supported now.
Manual Download links (if script based download fails)
DeleteRowsFromTable function now handles the case where collation of table column does not match the collation of the database server.
Added support for automatic database backup / restore when database server and application servers are separate. Previously this feature only worked when the database was located on the application server itself. This feature is still limited to SQL Server only.
Inserting log entries into the database is now more robust to connection failures than before.
Fixed bug where uploading a file for the target of a linked activity wouldn't work despite proper access rights.
Fix to SendEmail UI that would overwrite a cell containing a formula with its value.
Fix to error message from SendEmail.
Manual Download links (if script based download fails)
DataFromText UI now preserves the discard rows input if it is specified as a cell reference or formula instead of as a constant value.
Better UI support for stored file inputs (display only) and outputs.
Fixed bugs when running / viewing an activity that is the target of a linkage. In case there was a deny right on the activity but an allow right on the linkage, some allowed operations were being denied.
Added validation for checklist name when creating a new checklist.
Security improvements in encrypting form inputs on create user page and update license page.
Manual Download links (if script based download fails)
Emails that fail to get sent during an activity run because of a network connectivity issue will now be retried for upto 12 hours after the activity finishes. Additionally, a record of these emails is maintained in the database. In future versions, it will be possible to retain the full emails in the database.
Added function CreateDocumentLink.SK to create a link to files and folders in static folders. Access rights can be granted at a file or folder level to control user access to these files and folders. Currently, users who have a link and the appropriate rights can use the link to download files. Additional functionalities will be provided in future versions. It is necessary to create an entry with a key of Url in the sk.Configuration table for this functionality to work.
Added function GrantRight.SK to enable granting rights from within an activity.
Added function GetADUserInfo.SK to fetch basic user related information for users from Active Directory. This is based on a new config file called activeDirectories.config.
Active directory settings in web.config file have been migrated to activeDirectories.config. Any future changes should be made to this file now.
The email functionality for log entries has been enhanced to support sending emails for entries other than FATAL. Entries at lower severity levels will be buffered and sent periodically or when the buffer overflows but FATAL entries will be sent immediately as before.
Added a Retry button that shows up on failed activity runs. Retrying an activity will run it with the exact same inputs as for the failed run with no opportunity or possibility for the user to change the inputs. The new run is marked as a retry of the previous run. In future releases, various pages will be improved to make better use of this information.
Added a back button at a few places on the activity run and status pages.
JoinText.SK now allows delimiter to be missing. A missing delimiter is treated as an empty string.
If the delimiter in JoinText.SK is empty (or missing), the text values are no longer escaped by default. This changes the behavior of existing formulas where the escape argument was omitted with an empty delimiter. However, since the previous behavior in this case was quite undesirable, this change is not expected to have any actual impact.
Files in the Outputs folder in newly created activities will not be included by default in the activity package. It will still be possible to explicitly include these files if desired, but this should be avoided. There is no impact on existing activities.
An error message is shown in the addin when using an Excel function that is not implemented in SheetKraft. While nearly all useful functions are implemented, some of the functions introduced in the latest versions of Excel are not supported. Earlier, the addin would use the Excel implementation and the activity would fail on the server.
If a workbook containing an IFNA formula (introduced in Excel 2013) is opened and saved in Excel 2010, the formula gets converted to _xlfn.IFNA. This situation is now handled gracefully and will not cause errors.
Fixed a bug in DataFromText UI where IfBlank and IfError were interchanged.
Fixed a crash in DataFromEmail when the email path is not a text value.
Possible fix to an issue where the database connection pool for PostgreSQL backend was being exhausted.
Fix to an issue where activities could get stuck before they started running if a network error occurred after they were marked as running but before the Activity Runner service actually started running them.
Improved error messages in SendEmail to include invalid email addresses.
The DisableInputDownload setting is now respected on multi-file inputs and also on the run history page.
Fixed a bug where pickers and suggested inputs would not work on the target of an activity linkage if the user did not have rights to the target activity.
Manual Download links (if script based download fails)
Added function Evaluate.SK to evaluate formulas dynamically. This function interprets an input string as a formula with names and evaluates it by substituting the values provided in place of the names.
DataFromHtml now returns the root element if the root selector is just $. Also, if the column selectors are empty strings, the outer html of the selected element is returned.
Fixed the link sent over email when resetting the password from the logging page.
Manual Download links (if script based download fails)
ExtractZip function now supports BZip2 format (.bz2) provided 7-Zip executables have been placed in the Tools\7-zip folder.
Added support to automatically retry sending failed emails upto a maximum of 3 times. This will increase the robustness of sending emails in the face of temporary connectivity failures.
Increased the timeout on the query to queue activity runs for email triggered activities. This is expected to reduce timeout errors that were occurring frequently under high load.
Fixed the password reset functionality for local users. This was broken accidentally in 2.13.1 when adding support for logging IP addresses.
Fixed the FtpListDirectory function when FTP server returns a .. path as a child directory.
Manual Download links (if script based download fails)
Added function DataFromPdf. The components to make this functional need to be downloaded separately from
Pdf Components
and placed in the Tools folder, such that Tools\SheetKraftPdf contains the jar and dll files.
Security Actions page now shows IP addresses.
Queries to fetch activity runs for history and other purposes should now run more efficiently as they are now supported by appropriate indexes.
The Change Password functionality now validates that the new password is not the same as the previous n passwords. The number of previous passwords to check (defaults to 3) can be configured by the PreviousPasswords key in web.config
Users can now be deleted. This affects the username, first name, middle name, last name and email. None of the data or audit trails that reference the user's Id are deleted. This functionality makes it possible to reuse the same user name for a different user. The new user gets a new Id.
SheetKraftWeb.log can now record the following fields in each log entry. SheetKraftVersion, User Id, Source IP address, server IP address. To enable this, modify the line starting with conversionPattern in SheetKraftWeb.log4net.xml file to look like <conversionPattern value="%-5level %date v.%property{SheetKraftVersion} u.%property{UserId} %property{SourceAddress} %property{LocalAddress} [%thread] %logger - %message%newline" />
SheetKraft.log can now record the following fields in each log entry. SheetKraftVersion, Source IP address, server IP address. The IP address fields will only be reported in network related log entries and will be null otherwise. To enable this, modify the line starting with conversionPattern in SheetKraft.log4net.xml file to look like
<conversionPattern value="%-5level %date v.%property{SheetKraftVersion} %property{SourceAddress} %property{LocalAddress} [%thread] %logger - %message%newline" />
Fix to calling stored procedures with parameters using DataFromDatabase. A bug was introduced to this functionality in 2.12.33 due to which parameter values were not being passed.
Fixed a bug in DataFromExcel when importing a password protected file that contains invalid hyperlinks.
Fixed bugs in downgrade queries for PostgreSQL backend.
Manual Download links (if script based download fails)
Database picker now supports connections to other databases.
User selection in inputs with a database picker can now be restricted to values provided by the picker. If the user enters a value not in the picker, a validation message will be shown.
Fixed a layout bug where CheckboxList would not size correctly when a filter was applied.
Manual Download links (if script based download fails)
ExtractZip now supports seven zip (7z) and gzip (gz) formats. The SevenZip program has to be placed under the tools folder for the 7z support to work. Support for tar files will be added in a future release.
Added a WaitForInput function. This function allows the activity to ask for an input value after it has already started running. The value provided by the user is not recorded anywhere but it is usable from the activity.
Fixed bug in CONCATENATE function introduced in the previous release.
Fixed string length limit in DataFromHtml function.
Manual Download links (if script based download fails)
The limit on text values in a single cell has been increased from 16 MB to 256 MB.
Added the ability to ExportSheets to specify which sheet should be the active sheet. When using ExportSheets to modify a previously created workbook, it is possible to specify the name of an already existing sheet in the previously created workbook even if it is not being exported from this formula.
ConfigEditor now supports testing of SMTP settings.
Fix in saving input values across a logout due to inactivity.
An output marked Calculate Immediately was not being updated when there was an input marked as a CheckboxList.
Unnecessary blank space on Activity Run page has been removed in the case where there is an output with multiple files that happens to produce no files.
Manual Download links (if script based download fails)
DataFromExcel now handles unicode escape sequences.
Added a refresh button to recalculate suggested inputs or immediate outputs manually. This can be useful if the user knows that some other data on which these values depend has changed.
If an auto-logout occurs due to lack of activity when the user is on the activity run page, inputs entered before the logout are restored after the user logs in again.
DataFromDatabase now supports Teradata.
Added a QueueActivity function that can start another activity after the current activity has completed. The activity can be configured to run always or only on success or only on failure of the current activity.
ConfigEditor now supports testing of FTP/SFTP settings.
When an activity fails to send emails due to incorrect configuration or incorrect credentials, the errors are now shown on the web UI. The status of the activity shows as Succeeded with warnings.
Fixed bug where DataFromEmail would fail on a draft email in msg format due to the lack of a SentOn field. Now it gives a #N/A value.
Fixed bug in ExportToExcel, ExportToText, ExportToDbf where there could be a spurious circular reference error if there were any calculations to the right of the cell containing the Export formula.
Fixed a rare crash in ActivityRunner when evaluating activities with suggested inputs or immediate outputs.
Manual Download links (if script based download fails)
ExportSheets now supports generating password protected (encrypted) workbooks. This is in addition to the UI only sheet-level password protection. This support will be added to ExportToExcel too in a future release.
ExportSheets now handles Print_Titles properly without showing a rename prompt on opening exported file.
The default file name validation rule is slightly relaxed to allow dot and plus characters in the file name.
File extension validation now treats doc and docx as the same type of file. Similarly ppt and pptx are treated as the same type of file.
File inputs of an activity are refreshed and validated at the time of publishing to ensure that download sample file and validation of file extensions works correctly.
File extension validation is skipped if there is no sample file. This will not affect any newly created or existing properly published activities.
Bug fix in ExportSheets when exporting Excel Pivot Tables where a SheetKraft PivotTable formula would sometimes get exported.
Bug fix where the email checker in ActivityRunner would not properly restart after an activity with an email trigger was published.
Fixed bug where a blank cell in SendEmail template would show up as zero in the email.
Manual Download links (if script based download fails)
Support for extracting text body and html body of email into separate file.
DataFromDatabase with SQL query or stored procedure now supports selection and rearrangement of columns. As of now, this is only available by providing a TRUE value for the new argument enforceReportRange directly in the formula. UI support will be added later. All newly generated formulas will set this argument to TRUE. However, in existing formulas, this argument will default to FALSE for backward compatibility. If the query does not return any of the specified columns, an error will be reported.
DateValueEx.SK now supports full month names using a mmmm specifier in the format.
ExportSheets now has significantly improved support for charts, chart sheets and pivot tables. The make chart dynamic and make pivot dynamic functionality now generates sheet scoped names instead of workbook scoped names to bind the data. This makes it possible to use ExportSheets with a defined function to add sheets containing charts and pivots.
Improvements to scrolling in ExportToText and ExportToExcel UI when the number of columns is large.
ConfigEditor now supports editing and testing of EWS (Exchange) and IMAP connections.
Fix in reporting status code in ExtractZip.
Fix to the retry frequency for IMAP connections. Earlier retry attemts were far too frequent.
Fixed bug in displaying activity run input with a value of 0.
Manual Download links (if script based download fails)
Enhanced database pickers to support searching by prefix in each word instead of only at the beginning.
Fixed bug where DataFromExcel would fail to load password protected xlsx files generated from older versions of Excel using binary encryption.
Added a config setting called DisableInputFiles. Setting this to true disables the download of input files from the activity run page. This is intended to mitigate a security concern with downloading potential malicious files uploaded by an attacker. It defaults to false and it is not recommended to enable this because a similar attack can be carried out in many other ways and the trade-off to disable file download to gain a slight improvement in security is unlikely to be worthwhile.
If a #REF! is encountered in the ignored branch of an IF formula, it used to be ignored. It will now always be reported as an error.
Fixed a bug in loading the GetAllFiles UI with a RelativePath input.
Fixed a bug where the GetCurrentUser function would not work with a PostgreSQL backend.
Upgraded version of lodash and some other dependent libraries to avoid reported vulnerabilities.
Tweaked the default value of AllowedFileNameRegex setting introduced in the previous release to allow file names with spaces.
Manual Download links (if script based download fails)
ActivityRunner now automatically picks up changes to activities with email triggers so that there is no need to restart it manually.
The footer feature in ExportSheets has been enhanced so that formulas in the footers or in other cells that refer to the footers are exported as expected in all cases of interest.
File upload buttons now show the type of file expected and the upload validates that the file uploaded has an appropriate extension.
Some security policy restrictions have been put in place on filenames of uploaded files and on all inputs generally to reject potentially malicious inputs.
Fixed a backward compatibility issue where activities published using a very old version of SheetKraft before pickers were introduced would not load correctly.
Manual Download links (if script based download fails)
Any errors, warnings within a call to a defined function are now reported as is in the calling workbook. Earlier, only one error / warning used to be reported for each unique status code regardless of other distinguishing parameters.
TableToHtml.SK now produces a default border on the table cells. In future releases, it will be possible to control the border by formatting the cells in Excel.
Added progress indicator during download of activity run log entries from web UI.
File upload for running an activity via API now requires the API name (currently schema.name) and input name as parameters instead of the input id which changes every time the activity is published.
Fixed bugs in IMAP email checker that might have resulted in the ActivityRunner service getting stuck in a stopping state.
Fix to DataFromText when one or more of the columns were not found in the source. This bug was introduced in the previous release.
Manual Download links (if script based download fails)
Support for downloading log entries displayed on web UI into Excel file.
DataFromText and DataFromExcel now show error messages for each mismatched column in each file. Earlier some errors used to get collapsed into a single error.
DataFromText now supports reporting filename, filepath and row values. This can be useful when importing from multiple files.
DataFromExcel now supports reporting filename, filepath, sheetname and row values. This can be useful when importing from multiple files or multiple sheets.
DataFromText and DataFromExcel now supports indicating that certain columns are optional. Warnings or errors are not shown for such columns if they are not found
The UI for DataFromText and DataFromExcel has been overhauled. The preview is now separated from the column specifications.
DataFromExcel now supports flattening of multiple columns matching a single column specification into rows.
DataFromText and DataFromExcel now exclude column headers by default. This makes these formulas consistent with other formulas which only return data. It is still possible to include headers.
DataFromExcel UI now supports sheet specification from a formula or a range.
DataFromExcel now supports XML Spreadsheet 2003 format.
ExportSheets and ExportToExcel now show warnings when text in a cell is larger than Excel's limit.
Fix to DataFromExcel to clear password from memory after an encrypted file is read.
Support for retrying storing of log entries and activity outputs in database. This should improve robustness to intermittent connectivity errors.
Fix to showing spinners on file downloads from activity run page on web UI.
Fix to validation of errors when default value for optional inputs is invalid.
Fix to crash in DateValueEx.SK when format contains a back-slash.
Fix to ExportToExcel template feature which was ignoring password protection.
Manual Download links (if script based download fails)
Fixed a bug affecting ExportToXml, ExportToWord and SendEmail using xhtml based template when a repeat tag receives a #NULL! range. This bug was introduced in 2.12.20
Manual Download links (if script based download fails)
ActivityRunner will now reliably restart (if configured) after a crash.
Added support for sending log events for crashes via email. This requires some changes to SheetKraft.log4net.config file.
The log files now support logging SheetKraft version (addin, web, and runner). To achieve this, add
%property{SheetKraftVersion} to the value of conversionPattern in the SheetKraft.log4net.config file.
Enhanced ApplyPatch scripts to support multiple Activity Runners as well as Activity Runners on a machine without the website.
Exposed SvgIcon to website plugin.
Fixed a potential race condition in stopping IMAP email listener. This might have prevented Activity Runner from stopping in a timely manner.
Fixed issue in ExportSheets when exported values contained strings longer than Excel's limit. These strings are now truncated.
Manual Download links (if script based download fails)
Fix to ExportToDatabase targetting PostgreSQL when all columns being exported are key columns.
Fix to DataFromHtml, DataFromXml and DataFromJson when input is provided directly from a cell instead of a path and the length of the input is greater than Excel's limit.
Fix to layout on Manage Users in Role page.
Fix to layout of the main app bar in the web UI when using a client specific logo.
Manual Download links (if script based download fails)
Added ExportToHtml.SK function. This is similar to the previous Email Template functionality but uses a html template instead of an xhtml template for easier usage. This means that valid html that is not valid xhtml will no longer be rejected. Also, changes to the order in which tags appear in the template will work without the need for any other changes. UI support will be added in a future release.
Added TableToHtml.SK function. This takes a range and generates an html table from it. Currently, there is no support for borders or background colors. This support will be added in a future release.
Added MarkdownToHtml.SK function. This function supports generation of html from template text in Markdown format (as per CommonMark specification). It supports substituting either text or raw html into the template. Basic UI support is also available.
SendEmail.SK now supports html bodies generated using one of the functions above or from an html file. The older xhtml template functionality is deprecated and the UI no longer supports creation of formulas with xhtml template. Editing existing formulas that use this will still work.
DataFromText.SK now supports importing the |s of an entire file into a single cell. Also, line endings in the text are now normalized during import so that the text values imported will always use a LF character for line ending. Also, the UI for importing a text file as a simple sequence of lines without any delimiter or unescaping of quote characters is more direct.
ExportToText.SK now supports exporting values without any escaping of characters. It also provides control over the line-endings in the generated file.
Many formulas that use full column or full row references will now evaluate faster. While it is still not recommended to use such formulas, some use cases require them.
Added a ConfigEditor.exe application. This will ease the editing of config files in the addin as well as on the server. It also supports encryption and decryption of config sections.
Supported publishing an activity even if running it results in an error. While this should be avoided in general, there are scenarios where errors are unavoidable when running from the addin.
Fixed a bug where SheetNames.SK would report an error if the workbook contained hidden sheets.
Added upto 5 retries when ActivityRunner tries to download the activity file for a newly published activity. This should improve the robustness of the ActivityRunner in the face of problems in database connectivity.
Fix to a bug in the web UI for inputs with Workbook pickers. These inputs would show up as \Not yet supported\ until the picker values were received.
Fixed bug where buttons for linked activities would be displayed even before the activity run completed.
Manual Download links (if script based download fails)
HttpRequest.SK now supports query parameters for HTTP methods like POST that have a request body.
The URLEncode.SK function now supports taking parameter names and parameter values in separate arguments. This function is used by the HttpRequest UI to generate a formula with query parameters.
Lots of improvements to handling of edge cases in the HttpRequest.SK and URLEncode.SK functions. '#N/A', '#NULL!' and blank cells are treated as empty text. Numbers and boolean values are coerced to text. RegionDown.SK returning '#NULL!' when used as arguments to these functions is now handled properly.
The httpSessions.config now supports a large number of additional configuration parameters. These can be used to control proxy settings at a session level, support Windows authentication, customize the timeout, control buffer sizes, etc. Basically all the properties of the HttpClient and HttpClientHandler classes are exposed as configuration parameters.
The HttpRequest UI in the addin has been improved significantly. It now allows selection of session name from pre-configured sessions in httpSessions.config, adding an entry to httpSessions.config, extracting query parameters from the url, pasting request body and headers from the Network tab in Chrome developer tools, and various other usability improvements.
Fixed issue where the response message received in HttpRequest.SK was not getting disposed leading to an eventual hang when thousands of requests were made in the same session.
Fixed a crash in ExportToExcel with the template feature when partition by was set as empty.
Manual Download links (if script based download fails)
DataFromDatabase UI now has a provision to specify a cell containing a SQL query instead of requiring entry of the query in the window itself.
DataFromDatabase UI now supports cancelling a long running query.
Column selection in DataFromDatabase UI is now carried over properly to the Filter / Sort UI.
DataFromDatabase UI no longer shows the Filter/Sort or Max Rows options for stored procedure where they are not supported.
The writing of headers in DataFromDatabase UI when Filter / Sort is selected now happens at the end of the Filter / Sort UI. In the first step only column names are written.
Any function UI that previously took a long time to write out specification ranges / headers in large workbooks should now be quicker.
Database Explorer, ExportToDatabase and all database related UIs now show a status window while possibly long operations are in progress.
Column type inference in Database Explorer now ignores cells containing empty text and treats them similar to blank cells.
Database Explorer now properly ignores Default specification if Nullable is checked when generating SQL for creating a table.
ExportToDatabase now allows empty text for non-text columns. Empty text is considered equivalent to NULL.
The addin now checks if the required .NET Framework version is not installed.
Some text wrapping fixes to Database Explorer and ExportToDatabase UIs.
Fixes to error messages in DataFromText to avoid showing full paths on web UI.
Fix to a crash in ExportToExcel UI with the template feature.
Web UI pages for roles, users and rights now show a permission denied error messages instead of showing empty lists.
Manual Download links (if script based download fails)
Fixed an issue where HttpRequest.SK might not have responded immediately to a Cancellation of activity run.
Allowed specifying a custom timeout for HttpRequest.SK at a session level. This can be configured in the httpSessions.config file by adding something like Timeout=180 for the value corresponding to the session name. The Timeout is specified in seconds and the default value is 100 seconds when not explicitly configured.
The full configuration line might look like <add key='session_name' value='AllowAutoRedirect=true;Timeout=180'/>
Manual Download links (if script based download fails)
Support for storing BCC fields in emails saved as drafts in eml format.
Added functions Base64Encode.SK and Base64Decode.SK. Both functions can operate on a single value or an array of values.
When attempting to save a database connection from Database Connection String Editor, a connections.config file will now be created if it did not already exist.
Improvement to handling of errors on roles and rights page if the url in the browser is modified manually.
Fix to error messages from DataFromExcel revealing the full path on the web UI.
Manual Download links (if script based download fails)
Validation messages are now shown on the public run page. Earlier only Succeeded or Failed was being shown.
Fixed a crash in ExportToExcel when using the template feature.
Fixed bug in the email trigger feature where manually changing the LastReceivedTime in the sk.EmailCheckRecords table would not have the desired effect if there was more than one activity targetting the same mailbox.
Manual Download links (if script based download fails)
Added a MaxSize attribute for activity inputs. This can be used to restrict the size of inputs (text and file inputs) that can be entered or uploaded. It is recommended to use this for any public activities. The MaxSize can be specified as a number or in KB or MB, for example 25 MB.
Added support for reporting aggregate values in the header or footer when exporting as a table from ExportToExcel. This also works with the partition feature.
The order in which sheets are added when using the partition feature in ExportToExcel is now stable and matches the order in which the partition values are encountered. Also, some unnecessary copying of data has been eliminated.
Removed the "Run Activity -" and "Run Checklist -" prefix on the activity and checklist pages. Note that it is possible to customize this title as well as the text on the "Start" button by providing appropriate json when publishing the activity from the addin.
Added a sk.ManageUserPasswords right. This controls whether a user can reset the passwords for any local users. Earlier this was being controlled by the sk.ManageUsers right. To create this right on existing installations, the command ActivityRunner --forceUpgrade must be run after the patch is applied. Alternatively, the patch could be applied twice as this will have the same effect.
The security matrix page now has an additional section for role wise rights.
The rights granted to a particular role can now be seen on the Manage Role page.
Improvements to width calculation of checkbox list inputs and outputs marked as calculate immediately.
Changes to some SQL queries used for various pages to improve performance when the number of runs is very large. Note that this will have the intended benefit only after some indices are created on the sk.ActivityRuns table. These indices will be created in a future release automatically. Anyone facing slow loading of pages can create the necessary indices manually.
Fix to workaround for long array formulas in a very rare case.
Manual Download links (if script based download fails)
Support for configuring password expiry for users not linked to Active Directory. Add <add key=\PasswordExpiry\ value=\90\/& gt; to the appSettings section in Web.config to force users to change their password after 90 days.
Support for running activities without requiring users to log in. To enable this, create a role called sk.Anonymous. Create a user and associate it with this role. Then grant rights to run the activities to this role. The public url to run an activity is public/activities/run/id where id is the id of the activity.
Activities with inputs of type Multiple Files can now be run without providing any files if Blank is checked in the input definition.
The SQL queries for the Purge Activity Runs page are now run without a timeout. This should prevent timeout errors on large databases.
Fix to running activities via API where input values were being ignored leading to validation errors. This was a bug introduced in 2.12.1
Fix to a rare data dependent crash in generating Excel files from ExportToExcel and ExportSheets. This involved a fix to the EpPlus library used for export.
Improvement to logging error messages in case of a crash. In some cases, the error messages were not being logged.
Manual Download links (if script based download fails)
Support for configuration of sessions for HttpRequest. This works via the newly introduced httpSessions.config file. Applying the patch will generate a sample file in the Runner folder. The file should have entries of the form <add key=\session_name\ value=\AllowAutoRedirect=true;ClientCertStoreLocation=LocalMachine;ClientCertStoreName=My;ClientCertFindType=FindBySubjectName;ClientCertFindValue=\ />
session_name should match the value passed to HttpStart.SK.
AllowAutoRedirect can be set to false if automatic redirects should be prevented.
ClientCert* properties can be set to appropriate values to send client certificates along with the request. The values shown in the sample should work for most common cases. The valid values for ClientCertStoreLocation are CurrentUser and LocalMachine. The valid values for ClientCertStoreName are My, AddressBook, AuthRoot, CertificateAuthority, Disallowed, Root, TrustedPeople, TrustedPublisher. The valid values for ClientCertFindType are FindByThumbprint, FindBySubjectName, FindBySubjectDistinguishedName, FindByIssuerName, FindByIssuerDistinguishedName, FindBySerialNumber, FindByTimeValid, FindByTimeNotYetValid, FindByTimeExpired, FindByTemplateName, FindByApplicationPolicy, FindByCertificatePolicy, FindByExtension, FindByKeyUsage, FindBySubjectKeyIdentifier. The value for ClientCertFindValue depends on the value chosen for ClientCertFindType. To apply this configuration in the addin, the same config file should be placed in the addin folder.
Added support for posting multipart/form-data and file or text contents with HttpRequest.
New UI in addin for HttpRequest. This is the first cut and will be improved further in future releases. Note that opening existing formulas with this UI and pressing OK may lead to formulas in header values or post values being overwritten. Use with caution.
Changed order of versions shown on Activity versions page from ascending to descending. Also improved sizing of the grid.
Fixed bug where a group name with a slash in it led to a failure in loading rights page.
Fixed bug where Display inputs would not refresh on clicking Run Again.
Manual Download links (if script based download fails)
Transactions for connections other than the SheetKraft connection are now created with an isolation level of Read Committed instead of Repeatable Read. In the common use case of not exporting to external databases, this avoids the need for a distributed transaction. In a future version, we will support greater control over this.
Fix to margins for file outputs. The UI was looking cluttered due to a lack of margins.
Fix to broken / incorrect downloads of file outputs if a multiple files output had some invalid files.
Manual Download links (if script based download fails)
Support for long text values in Display inputs of type text. The value is now shown pre-formatted (with a pre html tag) in the web UI. Hence any new-lines in the text are preserved in the display.
Support for Display inputs of type FileId in the web UI. A download button is now properly displayed for this case.
Fix to validation of inputs with AllowDefaultValue set in versions older than 2.12. This was a bug introduced in the 2.12.1 release.
Fix to VLookup.SK when the match condition contained a cell reference external to both key table and lookup table in the same sheet as the formula but intersecting the lookup table range except for sheetname.
Manual Download links (if script based download fails)
Support for specifying a condition (with SQL like syntax) as an input to an activity. A UI is available on the web interface to construct the condition so that the user does not need to know the syntax. A picker definition is required in the new sk.PickerDefinitions table for this to work. However, this release does not contain a UI to create the definition.
Support for Optional, Suggested and Display inputs. The values for these inputs can be sourced from formulas / values in the setup workbook and can depend on other inputs. Please see Defining an Activity for more information
Support for blank values for activity inputs. If allowed, Blank values map to empty string or '#N/A'. Please see the article linked mation.
Temporarily disabled the periodic check for notifications until performance can be improved on the server side.
Known Limitations
The new features introduced for activity inputs do not work for checklists. This will be improved in future releases.
Manual Download links (if script based download fails)
Improvement to ExportToExcel with template when underlying data has no rows.
Improvement to DataFromHtml which now returns a full row of error values instead of a single error value in case of errors. This improves the flow of errors in dependent formulas.
Manual Download links (if script based download fails)
Set SecurityProtocol for https requests to support Tls1.1 and Tls1.2 explicitly.
Fix to focus issues on run activity page when there are multiple table inputs.
Table inputs grid now retains focus on the cell being edited after clicking Enter / Escape or accepting an entry from a picker drop down.
Table input columns now resize automatically to accommodate newly entered value. The width of the entire grid also updates on changes to column width.
Table input grid now does not take up unnecessary vertical space.
Fix to activity linkage with file outputs linked to file inputs.
Fix to issue where ExportSheets would occasionally ignore format functions.
Set name field in Content-Type header of attachments of generated emails to the name of the file. This should have no effect since it is only used as a fallback if the filename field in Content-Disposition is not valid.
Fixed issue where number format with red color for negative numbers and thousands separators was not being applied.
'Download all output files' button on activity run page is now only shown if there are multiple file inputs.
Fix to footer placement in ExportSheets when some sheets were conditionally not exported.
Re-enabled SpecifiedPickupDirectory in smtp.config. This is only useful for testing purposes.
Manual Download links (if script based download fails)
Support for preventing activity runner from picking up activities in specific schemas. This complements the allowedSchemas setting added in a previous version. Add <add key="disallowedSchemas" value=""/> to the <appSettings> section in ActivityRunner.exe.config. If this setting is absent or value is blank, the runner can pick activities from all schemas. If value is specified as a comma separated list of schema names, activities from the specified schemas will not be picked up by the runner.
ExportSheets now generates the output file at the point of call and not at the end of the run. This eliminates the need for workarounds when the generated file needs to be provided as an input to some other formula in the same activity.
ExportSheets now retains the explicitly set formats of cells with array formulas. Earlier, these formats would get lost, and would need to be applied using FormatCell|s and FormatBorders functions. This is now no longer necessary in cases where the size of the range does not change.
ExportSheets and ExportToExcel now delete temporary files produced during the export as soon as they are no longer needed. Some unnecessary file copying has also been eliminated. This will provide a considerable speedup in activities that produce a large number of excel files.
Fix to reload checkbox list even if there is no output marked calculate immediately.
Manual Download links (if script based download fails)
Database Explorer now supports generating SQL for creating tables to store files in PostgreSQL. Earlier this was only working for SQL Server.
Fix to crash when using Calculate Immediately functionality when there were regular ouputs (not immediate) in a sheet that did not contain immediate outputs.
Fix to Calculate Immediately functionality where it would show incorrect results for the immediate outputs before running the activity.
StartActivity now returns a pending value if the first argument (name) is pending. Earlier it used to ignore this argument completely. This now makes it possible to use this argument for forcing dependencies.
Fix to Activity Runner where it used to enter a stopping mode if the query to fetch queued runs deadlocked. This would only happen if there was more than one activity runner.
Manual Download links (if script based download fails)
Support for limiting activity runner to specific schemas. Add <add key="allowedSchemas" value=""/> to the <appSettings/> section in ActivityRunner.exe.config. If this setting is absent or value is blank, the runner can pick activities from all schemas. If value is specified as a comma separated list of schema names, only activities from the specified schemas are picked up by the runner.
Added logging of wakeup message sent to Activity Runners for better diagnostics.
Fix to picker drop down in table inputs being rendered behind the grid instead of front of it.
Fix to missing validation on license update page.
Manual Download links (if script based download fails)
Added ability to update the server license from the website. This is only available to admin users.
Experimental support for installing Activity Runner on user's desktops.
DataFromText now supports carriage return (CR) as line endings in addition to Line Feed (LF) and CR+LF.
DataFromText infers data type as text if values contain text as well as dates or numbers.
Fix to Json validation for email triggers on activities while publishing.
Fix to '#NAME'? errors not getting reported if they occurred in a branch of IF that is not evaluated. However these errors would still result in a failure.
Fix to conditional formatting feature in ExportToExcel with template without partitioning.
Fix to implementation of EOPeriod.SK which used to return incorrect year in some cases.
Fix to evaluating cross-sheet reference in filter with nested data sources in ExportToExcel with template.
Fixed crash in loading Formula Table when there is a defined function and the workbook has not been run.
Manual Download links (if script based download fails)
Added support for FTP (with ssl support) protocol to Ftp functions. Earlier, these functions only supported sftp protocol. The ftpConnections.config file should have an entry of the form <add key="connection_name" value="protocol=ftp;host=servername.com;username=username;password=password;ssl=None"/>. For anonymous connections, username and password can be left out. If port is other than the default port it must be specified. ssl can be None, Implicit, or Explicit. Implicit FTP is not very common. When using ssl, if the server certificate is not trusted, fingerprint can be provided.
Ignored redundant semi-colons when parsing email and ftp configuration files.
Manual Download links (if script based download fails)
Improved single level checkbox list on the web UI. Items that are checked but filtered out because of the search text are considered to be selected and the number of items selected is also shown.
Improved the 2 level checkbox list on the web UI by adding a select-all button and an indicator for the number of items selected.
Any clicks on the web ui are now considered as user activity reset the inactivity timeout. Earlier only requests sent to the server were being treated as user activity.
DataFromExcel now accepts xls files with xlsx extension and vice-versa.
Fix to HttpRequest.SK which was skipping parameters with empty values.
Fix to slow loading of checklist run history page.
Fix to DataFromExcel with RegionAcross.SK. Earlier, the RegionAcross calculation was not treating formatted blank cells as blank.
Manual Download links (if script based download fails)
Support for naming urls on login window in the Excel addin. This makes it easy to identify the urls for different environments. To provide a name for an existing url, enter the url in the form name (url). name can contain spaces if desired.
For PostgreSQL, Database Explorer infers column names in lower case to make it easier to write queries without having to quote the column names.
Added a button on password fields in the web UI to show the password. This will make it easy to verify that the correct password has been typed.
Fixes to conditional formatting feature introduced in the previous release and better reporting of status codes in ExportToExcel.
Fix to WaitForActivity.SK always returning an error.
Manual Download links (if script based download fails)
Fix to stream getting closed too soon when reading attachment from DataFromEmail.SK. There was one case where this was still not fixed in 2.10.9
Under heavy load, setting activity status in the database was deadlocking leading to a crash in the Activity Runner. Attempted retrying this operation upto 10 times.
Manual Download links (if script based download fails)
Support for listening for incoming emails using IMAP protocol. This uses the IMAP IDLE extension for real-time triggers if it the extension is supported by the server. Else the server is polled for new messages at a configurable interval (default 20s). Configuration entry in emailConnections.config should be similar to <add key="connection_name" value="type=IMAP;email=email_address;password=password;interval=20;url=imaps://imap.whatever.com:993" />.
Manual Download links (if script based download fails)
Fix to SFTP functions when a non-standard port is in use.
Fix to crash in FtpListDirectory when field names to be reported are missing.
Fix to incorrect validation of first argument to CommandLine.SK.
Fix to ExportSheets where the formula was getting incorrectly generated when FooterRows/Columns functionality was used.
Fix to database picker where custom queries were not being correctly run under some cases.
Version 2.10.7
Released on October 30, 2018
Support for array argument (produced by a function call) to EmailAttachments.SK inside SendEmail.SK. Previously only range argument was supported.
Support for custom query in database picker along with the ability to reference other activity inputs in the custom query. The Define Activity screen now has a field where each input (or column in a table input) can be assigned a SQL name (must be unique). The database picker can be assigned a custom query. The default query is shown and this can be edited. The query must be in a specific syntax. This will be covered in a blog post.
Added functions TextToTable.SK and TableToText.SK. These functions make it possible to take a table of columnar data and store it in a single cell value and vice versa.
Added function CommandLine.SK. This makes it easy to construct a command line for use with RunCommand. It takes care of properly applying double quotes and putting spaces between arguments. Further, if the program path to CommandLine.SK starts with 'Tools', it is resolved w.r.t %localappdata%SheetKraft in the addin and w.r.t the installation folder on the server. This makes it possible to store commonly used programs and scripts in a global location and refer to them without having to package them with the activity. It is recommended to create a sub-directory inside the Tools directory for each such program.
Added function TempPath.SK. This is intended to be used with RunCommand.SK. If the program being run produces a file, the file path should be obtained with TempPath.SK and passed to the program. This ensures that SheetKraft can properly isolate the outputs of the program across multiple and parallel runs. This is appropriate if the file produced by the program is going to become an activity output or is going to be processed further.
Added function ResolveFilePath.SK. This is intended to be used with RunCommand.SK. For files that are produced by some other SheetKraft function or are inputs and must be read by the program being run, ResolveFilePath.SK should be called with a mode of \read\ and the result path should be passed to the program. For files that will be produced by the program in a static folder, ResolveFilePath.SK should be called on the static path with a mode of \write\ and the result path should be passed to the program.
If the command line to RunCommand.SK has a file path as its first part, the folder containing that file becomes the current directory for the new process in which the command is run. This means that when RunCommand.SK is used to run programs, the programs will run with their containing directory as the current directory.
When 'Prevent Simultaneous Runs' is unchecked for an activity (indicating that runs of the activity are independent of each other), View All Runs will only show runs by the user currently logged in instead of all runs. This prevents users from seeing runs by other users. In a future release, the ability to view runs by other users may be added back with better control.
Added a check to prevent publishing of activities whose main workbooks are not in .xlsx format. This is only intended to cover an audit requirement.
Fix to some access check SQL queries for PostgreSQL.
Fix to missing scrollbar in wide grids in the latest version of Google Chrome.
Fix to state of checkboxes in 2 level checkbox list on web UI.
Fix to RelativePath showing unnecessary .. in some cases. This was occurring when the addin installation folder was manually created with a non-standard casing (for ex. Sheetkraft instead of SheetKraft)
Version 2.10.6
Released on October 25, 2018
Improved parsing of email addresses for SendEmail. This should now handle cases like comma separated addresses more robustly.
Ignored the username and password provided in smtp configuration if email server does not support authentication. This case was raising an error in the previous release.
Modified the implementation of ExportToDatabase for PostgreSQL slightly to significantly improve performance of BatchReplace mode.
When publishing an activity to a server that does not contain some of its previous versions, the change description concatenation is now in reverse-chronological order.
Prevented a checklist from being started if one of the activities in the checklist is already running.
Fixed crash in DataFromXml if more than one namespace mapping is provided.
Improved support for mismatch in collation between database and database instance. However such mismatches should be strictly avoided.
Text fields in web UI now select all text when focus is moved to them. This will reduce keystrokes when the entire text needs to be changed.
Fix to some scrolling issues in text fields with database linked suggesstions (database pickers).
Fix to work-around for long array formulas. This bug was introduced in 2.9.13 and would affect formulas with length exactly equal to 256 characters.
Version 2.10.5
Released on October 15, 2018
Added support for SFTP with the functions FtpUpload.SK, FtpDownload.SK and FtpListDirectory.SK. A ftpConnections.config file is required to specify the configuration for each sftp connection. This release only supports the SFTP protocol. Future releases will support FTP and FTPS protocols also.
Fix to SendEmail to accept multiple email addresses in a single value separated by comma. This was broken in 2.10.2 when adding support for implicit SSL protocol.
Version 2.10.4
Released on October 12, 2018
Added ability to ignore certificate validation errors when sending emails. This can be configured by creating a file called IgnoreCertificateErrors.txt in the same folder as the smtp config file and adding hosts for which errors should be ignored, one host per line.
Added support to provide dates as text in the d/MMM/yyyy format for scalar inputs when running activity via API.
Fix to running activities via API. This was broken in 2.10.1.
Fix to immediate output calculation for date and boolean inputs.
Improved error message when database connection is not found in connections.config.
Version 2.10.3
Released on October 10, 2018
Raised string length limit from 32767 (Excel's limit) to 16777216 (16 MB of UTF8). Values as seen in Excel cells will still be truncated to 32767 characters but SheetKraft will internally work with longer strings.
Fix where files were not getting copied to shared output folders if StaticPath.SK was used.
Fix to Activity run status page where unnecessary API calls were being made.
Fix to ExportSheets UI where Replace Existing File checkbox used to get hidden if file path was not relative.
Version 2.10.2
Released on October 04, 2018
Improved implementation of TEXT when format string does not have a zero before the decimal point.
Added support for Implicit SSL protocol for sending emails. SendEmail should be tested in UAT before applying this patch to production.
Exposed logging methods to plugin code.
Improved warnings reported when html template for email does not have the proper tags.
Added a setting for the name of the connections.config file. This makes it easy to keep multiple files and quickly switch between them.
Addin updates can now be downloaded from the local server installation. An update is automatically triggered on login when the addin version is behind the server version. This will take effect from the next version onwards.
ApplyPatch.ps1 now works even if only the full zip file is placed in patches folder. It no longer needs both patch and full zips. This will take effect from the next version onwards. To use this functionality in this version itself, you can manually replace the ApplyPatch.ps1 file from the full zip before running it.
Fix to DataFromText when encoding is UTF 16 little endian with byte order mark.
Fixed rendering glitch on Activities screen when there is only one schema.
Fix to reset password link in email. This was broken in the previous version due to a library upgrade.
Fixed timeout error when attempting to activate license in online mode.
Fix to retain case of schema in PostgreSQL. It is recommended that schema names should be all lowercase. Display names can be anything.
Fixed an issue where login might have failed unexpectedly.
Fix to Security Matrix page.
Fixes to queries for email triggers.
Version 2.10.1
Released on September 13, 2018
Starting from this version all components including the addin will require the .NET Framework 4.7.2
Support for PostgreSQL database backend
Updated the SheetKraft logo.
Support for outputs whose value is calculated immediately when an input is entered in the web UI.
Support for protecting the sheet (not encrypting the workbook) with a password in ExportToExcel.
Support for including a folder in the activity package without including any files in the folder.
The state of checkboxes in the Files tab of the Define Activity window is now saved on clicking Save.
Added a modified by field to track the user account used to publish activity versions. This information is now shown in the web UI.
Enforced a stronger password policy when creating new users or changing / resetting passwords of existing users.
Improved error reporting in DataFromHtml.
Improved error reporting in ExportToWord.
Added support for "is contained in", "is the beginning of string" and "is the ending of the string" in the filters in DataFromDatabase
Fixed issue where belongs to range filter in DataFromDatabase would lead to an error if the column collation did not match the default collation of the database.
Fix to loading of merged cells. There were cases where merged cells would sometimes not be read in.
Fix to filtering by schema in Activity Versions page.
Fixed issue where passing a scalar value to response headers instead of an array was causing an error.
Fixed issue where DataFromEmail was opening eml file in read-write mode instead of read-only mode.
Fixes to ExportToDatabase UI in loading of key columns.
Disabled automatic update checks from addin since it is not desirable to auto-update addin independently of the server components. Added check that prevents login to the server if addin version is older than server version.
Version 2.9.14
Released on August 29, 2018
Added a StaticPath.SK function. With this, it is no longer necessary to define a static folder input for any activity. The step of configuring the static folder via preset values is also eliminated. staticFolders.config file is still required. Existing activities with static folder inputs will continue to work but should be migrated to use this feature.
Added a download all outputs button. This allows downloading all output files of an activity as a single zip file.
Fixed some bugs in template based export in ExportToExcel.SK related to cell widths and heights.
Fixed issue where separator line between inputs was not being shown on web UI if the input was optional.
Manual Download links (if script based download fails)
Added support for template based export in ExportToExcel.SK. The workaround for supporting long formulas in Excel has been improved but has not been sufficiently tested. Use this update only if this functionality is needed immediately.
Removed the x-SheetKraftVersion from response for API run calls for activities. This avoids disclosing unnecessary information.
Improved usability of UI for DataFromDatabase with Filter by initializing the result range correctly (just below the headers).
SerialNumber.SK now copies formats from the first cell. This is useful when working with dates.
Usage of NOW function prompts user to use Now.SK instead.
Fixed error message in applying patch when ActivityRunner is not installed as a service. The error message used to state incorrectly that application pool was not found.
Manual Download links (if script based download fails)
Added support to download all files from a checklist run.
Added a prompt to commit or rollback transaction when running any activity in addin that connects to the database. This gives more control over pushing data into the database during activity setup.
Improved error message when StartActivity is used on an activity with Prevent Simultaneous Runs checked.
Fix to Invalid License being shown on web UI on Internet Explorer (This had no impact on any functionality).
Fix to error on Activity Linkage page when editing existing linkage.
Fix to error on Edit User page.
Manual Download links (if script based download fails)
Added support for cancellation in DownloadFiles.SK and HttpRequest.SK during download of response body.
Supported fallback for ExtractZip.SK using DotNetZip library to allow extracting files with incorrect headers.
Fixed bug in calls to activities via auto-generated API. This would sometimes run older versions of the activity.
Fixed scroll behavior on large tables in Activity Run History page (View All Runs).
Fixed incorrect behavior of GetCurrentUser.SK when run from the addin.
Fixed timeout issue in HttpRequest
Bug fix in COUPNUM function when gap between settlement date and maturity is very large.
Version 2.9.10
Released on June 26, 2018
Added support for auto-backup and auto-restore. This is based on settings in new databaseMaintenance.config file and will have to be manually enabled by specifying values for dbPrimaryBackupFolder or dbRestoreFolder.
Added new UI for comparing versions of activities across environments
Supported streaming download instead of buffered download in DownloadFiles.SK. This should prevent timeout issue on large files.
Support for customizing the title of the Run Activity page.
Fixed bug in ExportToText UI
Supported non-text headers in ExportToExcel
Fixed incorrect merging of headers when exporting only specific columns as per custom condition.
Fixed ability to reset passwords for users whose credentials are not in Active Directory.
Fix in dismissing notifications.
Version 2.9.9
Released on June 14, 2018
Bug fix in HttpRequest.SK when response has no content.
Increased limit on maximum number of parallel http connections in ActivityRunner to facilitate email triggers for multiple inboxes.
Changed sheetkraft.com urls for addin license registration to use https.
Changed naming scheme of script files in web ui to prevent issue with browser cache.
Version 2.9.7
Released on May 31, 2018
Changed implementation of date conversion from web UI to work-around Chrome bug. New code is less likely to be impacted by browser bugs.
Notifications now remain collapsed until user explicitly opens them. This will be revisited in a future release.
Added support to provide a file name in HttpRequest.SK while still generating a temporary file.
Added logging code for email monitoring
Patch script now waits until Activity Runner starts even if it takes longer than 2 minutes.
Fixed patch script when directories were missing in target location.
Fixed cancellation from Checklists
Fixed loading of Activity Run History page when activity had a large number of file outputs.
Fixed downgrade code
Fixed UI of DataFromDatabase.SK when using a manual SQL query.
Version 2.9.6
Released on May 04, 2018
Bug fixes to HttpRequest.
Bug fixes for activities remaining in a 'Gathering Inputs' state. This bug was introduced in release 2.9.1
Version 2.9.5
Released on April 25, 2018
Added support for making requests over HTTP with HttpRequest.SK function. This function currently supports the following
Setting HTTP headers
Query parameters for GET requests
x-www-form-urlencoded parameters for POST requests
Writing response body to a file for all requests
Extracting status code, reason phrase and HTTP headers from the response
There is no UI in this version. Also, support for more content types like multipart/form-data, files and json is lacking at present.
Improved optimization in VLookup.SK to handle some more cases with a hashtable based implementation.
Fix to saving and validation of email trigger conditions with multiple criteria.
Version 2.9.4
Released on April 24, 2018
Added support for explicit url (in addition to auto-discovery) for email connections. The emailConnections.config file supports a url=url_value in the email connection string.
Added support to include a domain for credentials for email connections. The emailConnections.config file supports a domain=domain_value in the email connection string.
Added support for bearer token authorization in addition to basic authorization for calling auto-generated api for running activities. This enables api calls via custom developed plugins into SheetKraftWeb where bearer token authorization is already available.
Added support for file inputs and outputs in auto generated apifor running activities.
Fixed bug in processing emails with no subject.
Version 2.9.3
Released on April 20, 2018
Made a significant performance improvement in ExportToDatabase performance when exporting a large number of rows. To ensure optimal performance for large tables, creating a non clustered index on the columns that make up the batch key is recommended.
Added support to cancel activities when functions such as DataFromDatabase and ExportToDatabase are executing.
Minor improvements and fixes to patch application scripts.
Fixed bug where DataFromHtml was reporting wrong status codes.
Version 2.9.2
Released on April 17, 2018
Fixed spurious error in validating activity meta-data.
Minor improvements / fixes to patch scripts.
If an error is encountered when attempting to login from the addin, paste dll files from the Addin folder in the full download below into %localappdata%\SheetKraft. Be careful not to replace config files.
Version 2.9.1
Released on April 13, 2018
Automated the process of applying patches. As a one time activity download the Apply Patch file, unblock it, and place it in the same folder as Web.config. This script can be run (with administrative rights) to apply a patch or roll back to an older version. Roll back to 2.8.* is supported with a manual process. Rollbacks from future versions will be available via the script. ActivityRunner and SheetKraftWeb check the hashes of all files they depend on (other than config files) and will fail to start if any of the hashes do not match. This condition will be reported in the logs. This ensures that the application does not start in an incomplete or corrupted state. The ApplyPatch script can be used to repair a corrupt installation as it will restore files as necessary.
Added support to monitor incoming emails to the Inbox of an Exchange mailbox and trigger activities for each incoming email. The account details and credentials are maintained in an emailConnections.config file. The configuration for trigger conditions is specified during publishing the activity. Currently this information has to be entered as json. A UI will be available for this in a future release. Currently ActivityRunner needs to be restarted if there is a change to the emailConnections.config file or there is any change to an activity that is to be triggered via incoming email. This requirement will be removed in a future release.
Added a MemoryCost field to provide an estimate of the memory requirements for an activity. There is a corresponding MemoryCapacity for ActivityRunner. The capacity is treated as infinite if it is not specified or is set to zero. The cost is treated as zero if it is not specified. The ActivityRunner will ensure that it only picks up activities such that the total cost of running activities does not exceed its capacity even if some threads are free. Activities that are not picked up will remain queued until capacity becomes available. This mechanism can be used to prevent low or out-of-memory conditions.
Added GetCurrentUser.SK function. This returns information about the user who runs the activity from within the activity. When called from the addin, it returns the information for the admin user (User Id = 1).
Activity run log entries now show up as notifications to all users who have access to view the activity. The notifications expire automatically after 3 days and can be dismissed manually by the user at any time before that. Clicking on the notification takes the user to the activity run page and dismisses the notification.
Added support to show activity run log entries on checklist run page.
Improved the readability and display of activity run log entries on the web ui.
Added support to display an activity in one or more schemas other than the schema that the activity belongs to. This is basically a shortcut to the activity and has no impact on the way rights are defined or enforced. UI support for configuring this will be added in a future release.
Improved the web UI to create activity linkages by adding a Schema drop down.
Changed implementation of DownloadFiles.SK to use .NET HttpClient code instead of the WININET API to support calls from server side. This functionality will be expanded in future releases (with more functions) to support providing custom values for headers, cookie based authentication flows etc.
Fixed bug in SendEmail.SK when the to address is '#N/A'
Fixes to DataFromJson.SK and DataFromXml.SK. Some of the features of these functions may be revised in a future release.
Fixed the display of unspecified optional inputs on the Activity Run and History pages.
The last successful login information now shows the time of last token renewal instead of the time of last logout. Also logout times are tracked more accurately in case of expired sessions.
Added support for customizing the name of the Start button on the Run Activity page. UI support for configuring this will be added in a future release.
Version 2.8.33
Released on April 09, 2018
Clicking on the SheetKraft icon at the top now goes to the activities page.
Improved behavior of picker so that clicking in the picker shows a list of available items instead of only the selected item after an item is selected
Activity outputs that have no rows are now hidden.
Skipped validation of activity inputs with RelativePath formulas. This should prevent annoying incorrect error messages during publishing.
Pressing Ctrl + F in Activities window moves focus to the search box.
Fixed incorrect generation of SelectRows formula if MaxRows is blank.
Fixed missing gray border around checklists when there is only one schema.
If file upload fails because the session had already expired before beginning the upload, the user is taken to the login page and returned to the activity page on successful login.
Fixed bug where trying to open a non-existent file on a remote drive within DataFromText could lead to a hang.
Fixed bug where * was being ignored for validation purposes in List Picker definition for single cell activity input.
Manual Download links (if script based download fails)
Added display of logged in url on publish window in addin.
Changed the position of progress bar on Activities window in addin to ensure it is not hidden when window size is small.
Fix to crash in warnings window in addin caused due to incorrect status codes for DataFromHtml.
Fix to bug in ExportToExcel where header formatting was ignored in some cases.
Fix to bug in FormatCell|s when used with a condition that evaluates to false for every row of data.
Version 2.8.31
Released on March 16, 2018
Added DataFromHtml function. This is similar to the deprecated Addin only DataFromWeb, except that it takes a columns argument and does not support web urls. It supports direct html or html file path and works both on addin and server.
Added a clean way to run activities from an API call. This is useful for integration with other software. A post request to the url /api/. with basic authentication headers and json body like {inputs:{:,...}} is supported and returns the activity outputs along with status. Support for file inputs or outputs is not yet present. Table inputs and outputs are supported. The link provides full details
Fix to bug in FillDown when the range being filled down contained a formula containing a range reference (not cell reference) to the fill input range.
Added default scheme http:// if no scheme is entered in the url when logging in from the addin.
Added missing scroll bars in ExportToText UI.
Fix to crash if files that will be published as part of an activity are open at the time of publishing. An error message is shown now.
Fix to bug when using Max Rows field in DataFromDatabase.
Version 2.8.30
Released on March 06, 2018
Added version column to \View All Runs\ page for an activity.
Added server license information in the header section of the web ui.
Fix to display schemas on activities page in order defined in ActivitySchemas table.
Fix to ExportToText UI to retain the formula used (if any) for the Append argument.
Fixed bug in dependency addition in OFFSET. This affected capture of dependencies for Define Function.
Added an error message if define function does not capture the inputs of an inner defined function correctly. This issue will be fixed in a future release.
Fix to crash in ExportSheets when exporting sheets with charts and the sheet names contained spaces or special characters.
Added missing Category information to many SheetKraft functions. These functions will now show up in the SheetKraft category in Excel's Insert Function UI.
Version 2.8.29
Released on February 26, 2018
Improved database picker in activity inputs by filtering out NULL or empty values.
Checking the top level checkbox in a two-level database picker now checks all second level entries by default.
Added support to save and delete entries in the local connections.config file from the addin.
Fixed bug where executing a stored procedure or query without a SELECT statement using DataFromDatabase would lead to a crash.
Fixed sizing of column containing download button links in cases where the file name is long on the activity run history page.
Fixed bug in EDate.SK
Version 2.8.28
Released on February 23, 2018
Menu option for columns moved to the top of lists instead of bottom in Filter, Pivot, Lookup UIs.
Improved selection behavior in column selection / editing sections of Filter, Pivot, Lookup UIs.
Improvement to scrolling in UIs with multiple scrolling areas. Double clicking within an area now scrolls the outer view to bring the area completely into view.
Improvements to column selection UI for ExportToText.
Support for controlling whether a column will be exported or not based on a run-time condition in ExportToText.
Added progress indicators on Purge Activity Runs page.
Download of activities now picks up proxy settings from Internet Explorer preventing download errors in certain cases.
Support for specifying a manually downloaded activity file (from web UI) in case download from addin fails for some reason.
Added a status page for all activities. This can be used to monitor currently running activities.
Improved error message in DataFromExcel when the range where data is expected is blank.
Improved error message in ExportToDbf with improved validation for field values and lengths
Added Schema column and filter to all activity versions page. This page is now useful to see all changes to activities in a schema of interest.
Fix to showing error messages in the web UI on the activity run page. The messages were not showing up until the activity run completed.
Fix to the main activities page on the web UI which was failing to load in some cases.
Fix to crash in Filter UI if the condition specified is not valid.
Dropped code that reads the SheetKraftRead connection string. This is now no longer required.
Version 2.8.27
Released on February 12, 2018
Added support for DURATION function.
Added support for ignoring the case of user name for licensing.
Version 2.8.26
Released on January 31, 2018
Optimized Match Only Once functionality in VLookup.SK.
Optimized VLookup.SK for all match conditions that depend only on the right table.
Added a link to the checklist run page from an activity run page if the activity was run as part of a checklist.
Improved error reporting in various functions.
Fixed application of format functions called from a defined function that uses ExportSheets.
Fix to ExportToText UI which was not loading a formula with the Partition By functionality.
Fixed error in ExportToExcel when the partition by column was '#N/A' or any other error value.
Version 2.8.25
Released on January 23, 2018
Support for saving partial work in the Define Activity window. 'Save and Close' button split into separate Save and Publish buttons.
Added New Activity button under Define Activity menu in the ribbon.
Improved error reporting when fetching activity inputs from the database or saving activity outputs to the database fails for any reason.
Supported cancellation in several functions including DataFromExcel.
Added support for ABS function in the filter criterion of DataFromDatabase.
Optimized ISNA() and NOT(ISNA()) conditions in VLookup.SK
Improved error reporting in SendEmail
Restyled the checkboxes shown in grids to match the look of the checkboxes shown elsewhere.
Fixed Activity Run History page which was showing the same runs multiple times.
Fixed search on the activities page to also search checklists.
Fix to case where Filter UI with a Belongs To Range criterion was failing if a sheet name contained a '# character'.
Version 2.8.24
Released on January 17, 2018
Added a search box in the web UI for activity inputs displayed with a two level list of checkboxes grouped by category.
Fixed issue where file names with spaces in downloaded files in Internet Explorer were not shown correctly.
Fixed missing horizontal scrollbar in the web UI for table outputs of activities.
Version 2.8.23
Released on January 12, 2018
Added support to pass raw json in the first argument to DataFromJson.SK instead of a file path. File path remains supported.
Auto-generated change descriptions during syncing activities wherever possible and fixed some corner cases.
Fixed a UI loading bug in ExportToExcel.SK when modifying an older file.
Fixed UI for FormatCellContents.SK to support condition
Improved error reporting in ExportToXml.SK.
Fixed bug in error reporting when both an error and a warning with the same status code are reported from the same formula.
Fixed bug in ExportToExcel.SK when applying inner horizontal borders to a range containing only one row.
Version 2.8.22
Released on January 10, 2018
Added support to send a previously generated email using SendEmail.SK.
Support for specifying email addresses separated by semi-colon (;) in SendEmail.SK.
Added schema column to Purge Activity runs page
Fix to loading of existing formulas in Filter, Pivot, VLookup UIs when the source range contained only error values.
Fixes to SendEmail UI.
Fixed bug in DateValueEx.SK related to conversion of time strings of the form 12:mm:ss am.
Version 2.8.21
Released on January 09, 2018
Added css classes logo-sk and logo-client on the div tags for logos to allow external styling if necessary.
Improved StartActivity.SK to support starting activities with optional inputs.
Fix to FillDown UI where it used to suggest the range on the right hand side even if the range on the left side was closer.
Fix to INDIRECT when it returns a '#REF!' value.
Version 2.8.20
Released on January 08, 2018
Improved Activity Run History page to use automatic scroll (The Load More button is now removed)
Improvements to layout of Filter UI
Improvements to layout of VLookup UI
Improvements to layout of Pivot UI
Fix to ExportToExcel where gap between multiple exports was getting ignored.
Fix to grid displays on various web pages. The grid no longer steals focus.
Version 2.8.19
Released on January 04, 2018
Added support to display a custom icon on the portal. To use this feature, place an image in the /dist/images folder and add the text var clientLogoName = "image_file_name"; after the text var baseUrl = ""; in the index.html file
Exposed CardHeader for use by plugins.
Manual Download links (if script based download fails)
Added append support to ExportToText.SK. This makes it possible to generate a text file in multiple steps.
Improved reporting of 'out of memory' conditions. The error will be shown as a normal failure instead of as a system error.
Fixed issue where memory for an activity run was not being released until the start of the next activity run on the same thread.
Fix to DataFromDbf.SK where filenames longer than 8 characters were causing an error.
Fixed bug where VLookup.SK was consuming a very large amount of temporary disk space when both input ranges were very large.
Version 2.8.17
Released on January 01, 2018
Added function DataFromDbf.SK to read dBase III files. There is no UI for this at present.
Fixed ExportToXml to remove a repeated element if the corresponding range is '#NULL!'
Removed Add button from Activities page and drawer.
Prevented session from getting auto-logged out when a file upload is in progress.
Improvement to width calculation in grid for activity outputs.
Fix to StackRows. It was returning a '#VALUE!' when one of the arguments was an IF formula returning a '#NULL!'
Version 2.8.16
Released on December 28, 2017
Added the ability to define activity inputs as optional. If the user does not specify any value for an optional input, the value in the original setup will be used. This value may be a calculated value instead of just being a constant. Activities with all optional or preset inputs can also be scheduled.
Added support for showing a list of checkboxes for an activity that needs a list of values as inputs. The list of checkboxes can also be grouped into categories. This grouping functionality is enabled by specifying a 'Group' column in the activity input picker definition.
Improved RegexSplit.SK to support a column of values as an input instead of just a single value. The maximum number of columns expected should be provided as an additional input when using this functionality.
Added an extra argument to JoinText.SK to ignore empty values when joining.
Improved the performance and reliablitity of code to purge activity runs and files associated with them.
Added a menu option (at the top of the completed activity run page) to purge the run. This can be useful when there are very large input or output files for the run that do not need to be preserved in the database.
Auto-generated change descriptions when syncing activities between servers. This simplifies the process of syncing.
Re-organized the ExportToExcel.SK user interface to make it easier to understand.
Fixed ExportToExcel.SK to generate inner horizontal borders (if present). These were being ignored.
Added a Eq.SK function to compare cell values exactly instead of logically. For example Eq.SK(#N/A,#N/A) returns TRUE.
Modified the CompareRows.SK user interface to generate a formula with Eq.SK instead of using the = operator.
Added ability to filter / search in Purge Run Data page.
Added ability to filter / search in rights pages.
Added support for exact search using quotes in a table output for an activity.
Implemented missing RegionAcross functionality in DataFromExcel.SK for .xls files. This was previously only implemented for .xlsx files.
Set the height and width of grids used for table outputs to reduce unnecessary space on the page.
Improved error message when static folder config does not get picked up by ActivityRunner because it has not been started.
Improved error message in ExtractZip.SK when input file is not a zip file.
Changed full file paths in error messages displayed on the web UI with just file names. This makes error messages more readable and also prevents disclosure of server file system details.
Fixed an \Unexpected error\ message shown on the Security Matrix page when the item on which a right is granted gets deleted.
Fix to Activity Linkage page when one of the linked activity inputs had a preset value. The page was creating an incorrect linkage in this case.
Fix to ExportToExcel.SK when exporting a source range that exceeds Excel's row limits using the partition functionality. The operation was failing in this case.
Fix to handling of Ctrl + Page Up / Down shortcuts from within a SheetKraft RefEdit box when a hidden worksheet is present. An error message was being shown in this case
Fix to the filename shown in the download popup in Internet Explorer when the file name contained non-ASCII characters.
Fixed bugs in DeleteRowsFromTable.SK
Fixed the auto-update functionality of the Excel addin. It was deleting the connections.config file.
Version 2.8.15
Released on November 09, 2017
Bug fix in WaitForActivity.SK when the activity has no inputs. This case was causing a crash.
Version 2.8.14
Released on November 07, 2017
Added support for setting attribute values in ExportToXml.SK
Version 2.8.13
Released on November 06, 2017
Improved error message in DataFromExcel when the file is corrupt. The new error message specifies the cell which could not be read.
Version 2.8.12
Released on November 03, 2017
Added a LockoutTimeSpan setting in Web.config to control the period of time for which a user gets logged on consecutive failed logins.
Added support for multiple email configurations. Each configuration can have a different from address. The SendEmail.SK function supports specifying the desired configuration by name.
Fixed CountUnique in VLookup.SK when there are no matches. It was returning 1 instead of '#N/A'. To get a value of zero in this case, the IfNoMatch functionality can be used.
Fix to StartActivity.SK where the newly started activity would not get picked up until the current activity completed. This resulted in a dead-lock when the current activity also called WaitForActivity.SK on the newly started activity.
Version 2.8.11
Released on October 26, 2017
Added error message if template path in EmailBody.SK was not provided correctly.
Fixed cancellation of checklists. Clicking on the cancel button had no effect.
Fixed VLookup.SK and PivotTable.SK to return a full row of '#NULL!' values when the source range is '#NULL!'
Fixed issue where usage of IfNoMatch.SK in VLookup.SK when reporting all matches was always producing the "no match" value. It now has no effect.
Manual Download links (if script based download fails)