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

SetColWidths not allowing to SaveWorkbook more than once (multiple files, same wb) #106

Closed
cavan-24hrcares opened this issue Sep 28, 2020 · 5 comments · Fixed by #111
Closed

Comments

@cavan-24hrcares
Copy link

Hello,

It looks like whenever I use the SetColWidths function, I am not able to run the SaveWorkbook function more than once for the same workbook.

# Saving two different excel files with the same workbook 

dude.wb = createWorkbook("cavan@24hrcares.com") 

addWorksheet(wb=dude.wb, sheetName = "Let Us See", gridLines = FALSE, tabColour = "deepskyblue")

writeData(wb=dude.wb, sheet="Let Us See", x=tibble(x=c("1st", "2nd")))

setColWidths(wb=dude.wb, sheet = "Let Us See", cols=c(1:5), widths = c(9,9,9,9,9))

saveWorkbook(wb=dude.wb, file="T:/Cavan/AR Model/Analysis/Checking Openxlsx.xlsx", overwrite=TRUE)
saveWorkbook(wb=dude.wb, file="T:/Cavan/AR Model/Analysis/Checking Openxlsx2.xlsx", overwrite=TRUE)

I was able to save the same wb to multiple files before the update, and now I cannot. Can you help? I am running this on Windows 10, R version 4.0.2

@JoshuaSturm
Copy link
Contributor

JoshuaSturm commented Sep 30, 2020

Thanks, I can replicate it.
The error seems to arise for any workbook name other than "wb". Must be a scoping issue again. Will be fixed in an upcoming PR; until then, try using "wb" as your workbook name.

Edit: renaming just removes the error. There's a related bug that's corrupting workbook attributes. Will be added to the PR.

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
@verena-e
Copy link

Hello,

it looks like that I'm still observing a similar issue as described above:

When I try to store the same workbook in a second xlsx file using saveWorkbook() i get the warning 'NAs introduced by coercion' in R. When I open the file, it looks empty on the first glance but actually the data is in the file but the columns are hidden in excel and can be made visible by manually unhiding them in Excel.

#---------------- mini example

data(iris)
head(iris)

wb.test <- createWorkbook()

addWorksheet(wb.test, "Iris", zoom=80) 
writeDataTable(wb.test, "Iris", iris)
setColWidths(wb.test, "Iris", cols = c(1:ncol(iris)), widths = "auto")

saveWorkbook(wb.test, file = file.path(path,"test.xlsx"), overwrite=T, returnValue = T)
saveWorkbook(wb.test, file = file.path(path,"test2.xlsx"), overwrite=T, returnValue = T

Here the two files that are generated by the code above:
test2.xlsx
test.xlsx

If I omit the setColWidths() function, saving into two files does work without any issues.

I'm using RVersion 4.0.2. via RStudio and openxslx Version 4.2.5.

Do you have any recommendation, how to solve this issue?

Thanks a lot!
Verena

@JanMarvin
Copy link
Collaborator

The issue is likely caused by some overly aggressive cleanup in saveWorkbook(). Though I currently don't want to look into that further. I assume copy.file() is no feasible workaround?

@verena-e
Copy link

Thanks for this hint. file.copy(), together with file.rename(), is a feasible work around.

@JanMarvin
Copy link
Collaborator

Ah yes, typed the command from the top of my head. Sadly that is really just a workaround. We should be able to securely save the same workbook no matter how many times. I have opened a new issue from your comment. Maybe one day we'll fix it

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants