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

write.xlsx does not error if it doesn't have write permissions #190

Closed
jeff-m-sullivan opened this issue May 11, 2021 · 3 comments · Fixed by #208
Closed

write.xlsx does not error if it doesn't have write permissions #190

jeff-m-sullivan opened this issue May 11, 2021 · 3 comments · Fixed by #208
Labels
question Further information is requested waiting for answer If not answered, the issue will be closed in 7 days.

Comments

@jeff-m-sullivan
Copy link
Contributor

Describe the bug
If write.xlsx is asked to write out data to a file that the user doesn't have write permissions to, it fails silently.

To Reproduce
Steps to reproduce the behavior:

> fs::file_create("foo.xlsx", mode="a=rx")
> openxlsx::write.xlsx(x=cars, file="foo.xlsx", overwrite=TRUE)

Expected behavior
It should throw an error, like write.csv does:

> fs::file_create("foo.csv", mode="a=rx")
> write.csv(cars, file="foo.csv")
Error in file(file, ifelse(append, "a", "w")) : 
  cannot open the connection
In addition: Warning message:
In file(file, ifelse(append, "a", "w")) :
  cannot open file 'foo.csv': Permission denied

This was using the latest CRAN version: 4.2.3

@ycphs
Copy link
Owner

ycphs commented May 11, 2021

Please try the parameter returnValue

Additional parameters

@ycphs ycphs added question Further information is requested waiting for answer If not answered, the issue will be closed in 7 days. labels May 11, 2021
@jeff-m-sullivan
Copy link
Contributor Author

Thanks for the suggestion, but it yields the same output whether or not the write operation is successful:

> fs::file_create("foo.xlsx", mode="a=rx")
> (openxlsx::write.xlsx(x=cars, file="foo.xlsx", overwrite=TRUE, returnValue=TRUE))
A Workbook object.
 
Worksheets:
 Sheet 1: "Sheet 1"
 

 
 Worksheet write order: 1> 
> (openxlsx::write.xlsx(x=cars, file="foo2.xlsx", overwrite=TRUE, returnValue=TRUE))
A Workbook object.
 
Worksheets:
 Sheet 1: "Sheet 1"
 

 
 Worksheet write order: 1> 

Here are the two files:

Downloads % ls -l foo*
-r-xr-xr-x  1 localjeff  staff     0 May 11 14:53 foo.xlsx
-rw-r--r--  1 localjeff  staff  6742 May 11 14:54 foo2.xlsx

@jmbarbone
Copy link
Contributor

write.xlsx() doesn't seem to use the returnValue parameter for saveWorkbook(). There would also be a bit of a weird value return since write.xlsx() also returns the Workbook object (this could be changed after #194 since generating the Workbook could be done separately from saving).

This is an issue with saveWorkbook():

https://github.com/ycphs/openxlsx/blob/master/R/wrappers.R#L122-L134

There's a tryCatch() wrapped around the file.copy(). I don't know if that's necessary. I would expect that if the file doesn't copy (ie, save) then the function should fail.

@ycphs ycphs closed this as completed in #208 Aug 2, 2021
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this issue Jan 4, 2025
# openxlsx 4.2.7.1

* It's now possible to insert a hyperlinked image by passing a URL,
  relative or absolute file path, or mailto string to the new
  `address` parameter of `insertImage()`.

# openxlsx 4.2.7

* Fixed warning on `dataValidation(..., type = "list")`
  ([#342](ycphs/openxlsx#342))

* Added optional argument to `loadWorkbook` to decide if empty/blank
  cells should be converted to NA_character_ (the default) or left
  blank as is

* `saveWorkbook()` now succeeds when called after the user has set
  column widths for a range of columns (e.g. 1:2), saved the workbook,
  then set column widths for a new range that is inclusive of the
  previous one (e.g. 1:5)
  ([#493](ycphs/openxlsx#493)).

## Improvements

* Improve detectDates
  ([#288](ycphs/openxlsx#288))

* Preserve window size and position, also `getWindowSize()` and
  `setWindowSize()`
  ([466](ycphs/openxlsx#466))

# openxlsx 4.2.6

* Fix external links
  ([#410](ycphs/openxlsx#410))

* Do not add unneccessary sheetPr node
  ([#409](ycphs/openxlsx#409))

* Add support for `namedRegion`s having dots and other special
  characters ([#338](ycphs/openxlsx#338)).

* Add type blanks and not blanks to conditional formatting
  ([#311](ycphs/openxlsx#311))

# openxlsx 4.2.5

## Fixes

* `openxlsx_setOp()` now works with named list
  ([#215](ycphs/openxlsx#215))

* `loadWorkbook()` imports `inlineStr`. Values remain `inlineStr` when
  writing the workbook with `saveWorkbook()`. Similar `read.xlsx` and
  `readWorkbook` import `inlineStr`.

* `read.xlsx()` no longer changes random seed
  ([#183](ycphs/openxlsx#183))

* fixed a regression that caused fonts to be read in incorrectly
  ([#207](ycphs/openxlsx#207))

* add option to save as read only recommended
  ([#201](ycphs/openxlsx#201))

* fixed writing hyperlink formulas
  ([#200](ycphs/openxlsx#200))

* `write.xlsx()` now throws an error if it doesn't have write
  permissions ([#190](ycphs/openxlsx#190))

* `write.xlsx()` now again uses the default of `overwrite = TRUE` for
  saving files ([#249](ycphs/openxlsx#249))

* `as.character.formula()` exported to warn about potential conflicts
  with other packages
  ([#312](ycphs/openxlsx#312),
  [#315](ycphs/openxlsx#315))

## Improvements

* `options()` are more consistently set in functions (see:
  [#289](ycphs/openxlsx#262))

* `Workbook$show()` no longer fails when called in a 0 sheet
  workbook([#240](ycphs/openxlsx#240))

* `read.xlsx()` again accepts `.xlsm` files
([#205](ycphs/openxlsx#205),
[#209](ycphs/openxlsx#209))

* `makeHyperlinkString()` does no longer require a sheet argument
  ([#57](ycphs/openxlsx#57),
  [#58](ycphs/openxlsx#58))

* improvements in how `openxlsx` creates temporary directories (see
  [#262](ycphs/openxlsx#262))

* `writeData()` calls `force(x)` to evaluate the object before options
  are set ([#264](ycphs/openxlsx#264))

* `createComment()` now correctly handles `integers` in `width` and
  `height` ([#275](ycphs/openxlsx#275))

* `setStyles()` accepts `halign="justify"`
  ([#305](ycphs/openxlsx#305))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested waiting for answer If not answered, the issue will be closed in 7 days.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants