Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature Request: Add Group and Ungroup columns & rows #32

Closed
jonekeat opened this issue Dec 20, 2019 · 9 comments · Fixed by #85
Closed

Feature Request: Add Group and Ungroup columns & rows #32

jonekeat opened this issue Dec 20, 2019 · 9 comments · Fixed by #85
Labels
enhancement New feature or request fixed Fixed, issue will be closed within 7 days help wanted Extra attention is needed

Comments

@jonekeat
Copy link

Hi @ycphs

I have a problem to output a data frame to xlsx with certain styling like grouping several columns based on some conditions.

I think it will be great if openxlsx can have functionality to do grouping & ungrouping columns & rows, while user need to do some manipulation on data frame.

Currently I am doing it in a VBscript, and call it from R, which hard to trace bugs.

image
Here is the functionality as discussed, under 'Data' tab in excel

@ycphs ycphs added enhancement New feature or request help wanted Extra attention is needed labels Dec 20, 2019
@JoshuaSturm
Copy link
Contributor

I've been working on this for the past while, and I currently have two separate working functions - groupColumns and groupRows. I'm going to try to merge them into a single function, continue testing, and submit a PR when I'm done.

@aecoleman
Copy link

@JoshuaSturm I think having two functions isn't necessarily a bad thing. It's consistent with the way you set the size of columns/rows in openxlsx via the setColWidths and setRowHeights functions. I think it makes sense for groupColumns and groupRows to act similarly.

Having said that, it could be beneficial to have a single function behind the scenes that is actually doing the work and uses an argument to determine whether it's operating on rows or columns.

Are these functions included in any of the branches on your GitHub? I'd love to take a look at them!

@FrancoisR95
Copy link

Many thanks @JoshuaSturm , this will be a very useful functionality, indeed.

Also it would be great to include, as an option, the possibility to collapse some groups of lines or columns. This functionality would certainly fix at the same time the issue already described two years ago "Collapsed rows / columns are lost" : awalker89/openxlsx#383

@JoshuaSturm
Copy link
Contributor

@aecoleman Thanks for the feedback. You're right, and after thinking about it more, I kept the two functions separate. It is more consistent with the rest of the API, as well as the current code structure (rows and columns are handled separately).
I've actually had more work and less time during this quarantine, so I haven't really been able to work on this since I last posted, but I did have a working sample before the hiatus. I'll upload and link you to a dev branch either this weekend or next week.

@FrancoisR95 I added the ability to collapse rows/columns, and, from what I remember when I last worked on it, preferences were being preserved.

Thanks!

@aecoleman
Copy link

@JoshuaSturm I know you said that you were busy, but just wanted to give you a nudge and say that I'm really looking forward to taking a look at this!

@JoshuaSturm
Copy link
Contributor

Hi, @aecoleman.

Thanks for the reminder. My current progress is saved here: https://github.com/JoshuaSturm/openxlsx/tree/add-groups
I'm trying to reconcile the hidden argument, which can conflict with the one in setColWidths. Perhaps we should remove it from both, and make it its own function.

I also haven't yet tested on multiple worksheets or loading workbooks. Please let me know of any bugs you come across. Thanks!

@FrancoisR95
Copy link

FrancoisR95 commented Jul 21, 2020

@JoshuaSturm If you have a name conflict for the hidden argument, wouldn't this be a solution: to simply name this argument collapsed in the context of grouped columns or rows?

@JoshuaSturm
Copy link
Contributor

JoshuaSturm commented Jul 21, 2020

@FrancoisR95 Thanks for the suggestion. The issue wasn't so much the names, but that having conflicting values would lead to errors. For example, setColWidths(wb, sheet = 1, cols = 2, widths = "18", hidden = TRUE) and then groupColumns(wb, sheet = 1, cols = 2, hidden = FALSE).

To keep the changes to the underlying structure minimal, I decided that setting the hidden argument in one function will update it in the other (if it exists), keeping the most recent value.

I'll probably open a PR tomorrow.

@FrancoisR95
Copy link

Thank you @JoshuaSturm for the explanations. This seems a good solution which you describe, that "setting the hidden argument in one function will update it in the other (if it exists), keeping the most recent value".

@ycphs ycphs closed this as completed in #85 Aug 3, 2020
@ycphs ycphs added the fixed Fixed, issue will be closed within 7 days label Aug 14, 2020
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Sep 8, 2021
# development  openxlsx 4.2.4

## Fixes

* `Write.xlsx()` now successfully passes `withFilter`
  ([#151](ycphs/openxlsx#151))
* code clean up PR [#168](ycphs/openxlsx#168)
* removal of unused variables PR
  [#168](ycphs/openxlsx#168)

## New features

* adds `buildWorkbook()` to generate a `Workbook` object from a
  (named) list or a data.frame
  ([#192](ycphs/openxlsx#192),
  [#187](ycphs/openxlsx#187))
  * this is now recommended rather than the `write.xlsx(x, file) ; wb
    <- read.xlsx(file)` functionality before
  * `write.xlsx()` is now a wrapper for `wb <- buildWorkbook(x);
    saveWorkbook(x, file)`
  * parameter checking from `write.xlsx()` >> `buildWorkbook()` are
    now held off until passed to `writeData()`, `writeDataTable()`,
    etc
  * `row.names` is now deprecated for `writeData()` and
    `writeDataTable()`; please use `rowNames` instead
* `read.xlsx()` now checks for the file extension `.xlsx`; previously
  it would throw an error when the file was `.xls` or `.xlm` files

* memory allocation improvements
* global options added for `minWidth` and `maxWidth`

* `write.xlsx()` >> `buildWorkbook()` can now handle `colWidths`
  passed as either a single element or a `list()`

* Added ability to change positioning of summary columns and rows.
  * These can be set with the `summaryCol` and `summaryRow` arguments
    in `pageSetup()`.

* `activeSheet` allows to set and get the active (displayed) sheet of a worbook.

* Adds new global options for workbook formatting
  ([#165](ycphs/openxlsx#165); see
  `?op.openxlsx`)


# openxlsx 4.2.3

## New Features

* Most of functions in openxlsx now support non-ASCII arguments
  better. More specifically, we can use non-ASCII strings as names or
  contents for `createNamedRegion()`
  ([#103](ycphs/openxlsx#103)),
  `writeComment()`, `writeData()`, `writeDataTable()` and
  `writeFormula()`. In addition, openxlsx now reads comments and
  region names that contain non-ASCII strings correctly on
  Windows. Thanks to @shrektan for the PR
  [#118](ycphs/openxlsx#118).

* `setColWidths()` now supports zero-length `cols`, which is
  convinient when `cols` is dynamically provided
  [#128](ycphs/openxlsx#128). Thanks to
  @shrektan for the feature request and the PR.

## Fixes for Check issues

* Fix to pass the tests for link-time optimization type mismatches

* Fix to pass the checks of native code (C/C++) based on static code
  analysis

## Bug Fixes

* Grouping columns after setting widths no longer throws an error
  ([#100](ycphs/openxlsx#100))

* Fix inability to save workbook more than once
  ([#106](ycphs/openxlsx#106))

* Fix `loadWorkbook()` sometimes importing incorrect column attributes

# openxlsx 4.2.2

## New Features

* Added features for `conditionalFormatting` to support also 'contains
  not', 'begins with' and 'ends with'

* Added return value for `saveWorkbook()` the default value for
  `returnValue` is `FALSE`
  ([#71](ycphs/openxlsx#71))

* Added Tests for new parameter of `saveWorkbook()`

## Bug Fixes

* Solved CRAN check errors based on the change disussed in
  [PR#17277](https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=17277)

# openxlsx 4.2.0

## New Features

* Added `groupColumns()`, `groupRows()`, `ungroupColumns()`, and
  `ungroupRows()` to group/ugroup columns/rows
  ([#32](ycphs/openxlsx#32))

## Bug Fixes

* Allow xml-sensitve characters in sheetnames
  ([#78](ycphs/openxlsx#78))

## Internal

* Updated roxygen2 to 7.1.1

# openxlsx 4.1.5.1

## Bug Fixes

*  fixed issue [#68](ycphs/openxlsx#68])

# openxlsx 4.1.5

## New Features

*  Add functions to get and set the creator of the xlsx file

*  add function to set the name of the user who last modified the xlsx file

## Bug Fixes

*  Fixed NEWS hyperlink

*  Fixed writing of mixed EST/EDT datetimes

* Added description for `writeFormula()` to use only english function
   names

*  Fixed validateSheet for special characters

## Internal

*  applied the tidyverse-style to the package `styler::style_pkg()`

*  include tests for `cloneWorksheet`

# openxlsx 4.1.4

## New Features

* Added `getCellRefs()` as
   function. [#7](ycphs/openxlsx#7)

*  Added parameter for customizing na.strings

## Bug Fixes

*  Use `zip::zipr()` instead of `zip::zip()`.

* Keep correct visibility option for
   loadWorkbook. [#12](ycphs/openxlsx#12])

* Add space surrounding "wrapText"
   [#17](ycphs/openxlsx#17)

* Corrected Percentage, Accounting, Comma, Currency class on column
   level


*  update to rogygen2 7.0.0

# openxlsx 4.1.3

## New Features

*  Added a `NEWS.md` file to track changes to the package.
*  Added `pkgdown` to create site.

## Bug Fixes

*  Return values for cpp changed to R_NilValue for r-devel tests

*  Added empty lines at the end of files

# openxlsx 4.1.2

*  Changed maintainer

# openxlsx 4.1.1

## New Features

* `sep.names` allows choose other separator than '.' for variable
   names with a blank inside

* Improve handling of non-region names in `getNamedRegions` and add
   related test
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request fixed Fixed, issue will be closed within 7 days help wanted Extra attention is needed
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants