This one got a lot bigger than I expected. After every new release I think, that I am done, but holy cow there are still many things to add and to fix. Some of the highlights are shown here in a bit more detail: https://s3rdia.github.io/qol_blog/posts/14.%20Update%201.3.4/
New functions
create_table_of_contents(): Creates a table of contents sheet with custom style based on the provided 'Excel' workbook. (02.08.2026, thanks to @JanMarvin)check_required_package(): Check whether a certain package is required and ask the user whether it should be installed or not. (08.08.2026)run_script(),run_folder(),run_project(),run_project_parallel(): RStudio helper functions that run scripts, folders or whole folder structures via diolog selection. (13.08.2026)
New functionality
load_file(),load_file_multi(): When passing a named vector or list into thekeepparameter, the original variables will directly be renamed. (18.07.2026)any_table(): Can now handle duplicate column names by making them unique (except NA columns). (18.07.2026)frequencies(),crosstabs(): Now also receive a colored background. (22.07.2026)import_multi(): Received a new paramterstack_datawhich can stack read in files and return them as a single data frame. (22.07.2026)import_multi(): Can now handle a vector of sheet names and import only the specified ones. (22.07.2026)multi_join(): Variable names in theonparameter can now be passed without quotation marks. (23.07.2026)remove_stat_extension(): Statistic extensions can now be passed without quotation marks. (24.07.2026)set_style_options(): Parameters, which are originally NULL, can now be reset by assigning a value of NULL. (24.07.2026)combine_into_workbook(): Can now create a custom styleable table of contents. (01.08.2026, thanks to @JanMarvin)excel_output_style(): Added parameters for the custom styleable table of contents. (01.08.2026)any_table(): When usingbyvariables the special keyword[by_var]is now replaced with the actualbyvalue in the titles and footnotes. (01.08.2026)frequencies(),crosstabs(): Now also export the Excel workbook. (02.08.2026)frequencies(),crosstabs(): When usingbyvariables the special keyword[by_var]is now replaced with the actualbyvalue in the titles and footnotes. (01.08.2026)where.(): Added a html rendered view of the data frame as fallback, if the new window throughutils::View()can't be opened. (03.08.2026)where.(): Is now also able to use the new writing style with conditions as characters introduced byifelse_multi(). (04.08.2026)any_table(): Can now render the tables as html file and show it in a browser window. This can be controlled via the newoutputoptionshtmlandexcel_html. The function now also returns an additional html element. (07.08.2026)load_file(),load_file_multi(): Can now load fst filesby_reference, which means files are not loaded into memory and instead the necessary values are only loaded on demand. (08.08.2026)any_table(),frequencies(),crosstabs(): Added newfull_precisionparameter, which ignores the decimal places given through thestyleparameter and outputs all values with all their decimal places. (10.08.2026)recode.(): Can now recode multiple variables into multiple new ones. (10.08.2026)any_table(): Formats can now be applied to pre summarised data. (14.08.2026)rename_multi(): Can now rename variables stored in vectors when passing them like: old_vektor = new_vektor. (14.08.2026)load_file(),load_file_multi(): Newkeep_var_orderparameter enables to keep the original stored variable order, when using keep variables, instead of sorting them in provided order. (14.08.2026)load_file(),save_file():wherenow works with old and renamed variable names. Additionally the parameter can now handle the new writing style with conditions as characters introduced byifelse_multi(). (14.08.2026)save_file(): When passing a named vector or list into thekeepparameter, the original variables will directly be renamed. (14.08.2026)summarise_plus(),any_table(),frequencies(),crosstabs(): Theprint_missparameter now also has an effect when not using formats. (17.08.2026)
Changed functionality
combine_into_workbook(): With the function making use of the newstyleparameter, thefileparameter has been removed. Saving files no works with thestyleparameter like in the other tabulation functions. (03.08.2026)retain_value(): Without by variable the function now carries forward values through upcoming NA values instead of just writing the first value into all other cells. (08.08.2026)any_table(),frequencies(),crosstabs(),export_with_style(): The functions now set the font family per cell instead of a base font for the whole workbook. This enables different fonts per sheet in multi sheet workbooks, if the sheets are created with separate calls. (08.08.2026)recode_multi():convertparameter is now set to TRUE by default. (11.08.2026)build_master(): Uses a new compact layout as default. Additionally the full layout can now only be created as a whole. (13.08.2026)
Removed
get_integer_length(): There is no real benefit in this function. (18.07.2026)
Fixed
any_table(): Variables generated with thecomputeparameter now receive a defaultstatisticsextension, if they are missing one, so that the column header is generated correctly and a number format is applied. (17.07.2026)mark_case(): When markinglastcases and the last expression within thebyvariable was NA, then the last case in the second to last expression became NA instead of TRUE. This is fixed now. (18.07.2026)any_table(),frequencies(),crosstabs(),export_with_style(): When different title or footnote styles where used, they were only applied, if multiple colors where used. Otherwise the formatting broke. This is fixed now. Additionally the code is now simplified and streamlined. (22.07.2026)any_table(),frequencies(),crosstabs(): The additionalbytitle is now also taken into account with individual styling, when multiple titles are present. (22.07.2026)import_data(): Fixed a Problem with encoding. (22.07.2026)close_file(): Now sets thefileentry in the global list of style elements actually to NULL instead of removing it. (24.07.2026)any_table(),summarise_plus(): Now keep on running and throw a warning, if a character variable is passed asvalues, instead of throwing a cryptic error. (30.07.2026)import_multi(): Ran into an error when trying to import a not existing Excel workbook. Now the file path is checked before. (30.07.2026)convert_factor(): Now usesunique()instead ofcollapse:unique()to identify german umlauts as they are seen on screen and not as they are stored in memory, which caused errors. (31.07.2026)frequencies(): When using interval formats without weight, the sum columns where displayed even though they were equal to the freq columns. This is fixed now. (31.07.2026)any_table(),frequencies(),crosstabs(),export_with_style(): Removed the extra empty row over the tables when no titles where set. Additionally there are no more empty named regions for titles and footnotes, if they are not present. (02.08.2026)combine_into_workbook(): Now uses the global options forprintandmonitorparameter. (02.08.2026)any_table():pct_blockvalues are now rounded. (07.08.2026)where.(): Now shows the full data frame when condition is NULL instead of throwing an error. (08.08.2026)if.(): The function crashed when NA was assigned to a variable. NA is now assigned. (08.08.2026)ifelse_multi.(): When NA was assigned to a variable, all values became NA instead of just the ones for which the condition was TRUE. This is fixed now. (08.08.2026)any_table(): The column header got corrupted, if value variables had underscores in their names and were used in combination withpct_block. This is fixed now. (10.08.2026)any_table(): When using thepct_blockparameter and formats have overlapping values, then they now will be kept in user provided order. (10.08.2026)- Every function, that is able to apply formats, now keeps original values if they are not captured by the applied formats instead of setting uncovered values zo NA. (11.08.2026)
recode.(): Now can also handle the "other" keyword. (11.08.2026)any_table():pct_blockpercentages are now calculated on unrounded sums, to have maximum precision. (11.08.2026)
Additionally
any_table(),frequencies(),crosstabs(),export_with_style(): Extendedtitlesandfootnotesdescription according to the new functionality. (22.07.2026)frequencies(),crosstabs(): Added some new messages on the styling progress. (22.07.2026)any_table(),frequencies(),crosstabs(),export_with_style(): Added named regions for titles, main title, footnotes, table header and row headers. (22.07.2026)- Cleanup of a partial matches. (22.07.2026, thanks to @JanMarvin and @olivroy)
stack_data(): Swapped out a copypasta error message with the right one. (22.07.2026)combine_into_workbook(): Added example on how to save a file. (03.08.2026)dummy_data():NUTS2variable is now stored as an integer. (03.08.2026)load_file(): Added example which shows how to directly rename variables. (03.08.2026)dummy_data():NUTS3variable is now stored as an integer. (05.08.2026)- New suggested package
yyjsonradded, which is required, for the new html view ofwhere.(). (08.08.2026) rename_multi(): Clarified error message on old variable names not found in data frame. (08.08.2026)any_table(): Updatedpct_blockparameter description and examples to make it more clear how this parameter works and has to be used. (10.08.2026)any_table(): Now uses html output as fallback in case Excel is not available. (13.08.2026)- Minimum
openxlsx2version is now 1.29, which fixes a bug that caused damaged output when tabulating with by-Variables andprint_miss. (20.08.2026)