# system.dataset.toExcel() java.io.IOException: Permission denied

**URL:** <https://forum.inductiveautomation.com/t/system-dataset-toexcel-java-io-ioexception-permission-denied/58680>\
**Category:** Ignition\
**Tags:** ignition81\
**Created:** [April 21, 2022, 12:26pm UTC](https://forum.inductiveautomation.com/t/system-dataset-toexcel-java-io-ioexception-permission-denied/58680 "2022-04-21T12:26:01Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![mcarritt1](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mcarritt1/32/4262_2.png) [@mcarritt1](https://forum.inductiveautomation.com/u/mcarritt1)\
**Post date:** [April 21, 2022, 12:26pm UTC](https://forum.inductiveautomation.com/t/system-dataset-toexcel-java-io-ioexception-permission-denied/58680/1 "2022-04-21T12:26:01Z")

</div>

```auto
xls = system.dataset.toExcel(True, self.custom.data )
system.perspective.print(xls)
system.perspective.download('data.xls',xls)

```

simple enough code on a perspective button that gives:  
java.io.IOException: Permission denied

i tested this on another 8.1.15 server (same as the one with the error) and it works, so its something to do with the user permissions, but was wondering if anyone had any ideas of what permission is failing

server is linux

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [April 21, 2022, 12:29pm UTC](https://forum.inductiveautomation.com/t/system-dataset-toexcel-java-io-ioexception-permission-denied/58680/2 "2022-04-21T12:29:29Z")

</div>

The error should tell you what line number. Narrow it down for us.

---

<div class="post-metadata">

**Author:** ![mcarritt1](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mcarritt1/32/4262_2.png) [@mcarritt1](https://forum.inductiveautomation.com/u/mcarritt1)\
**Post date:** [April 21, 2022, 12:31pm UTC](https://forum.inductiveautomation.com/t/system-dataset-toexcel-java-io-ioexception-permission-denied/58680/3 "2022-04-21T12:31:33Z")

</div>

heh I was working to get the full error but you’re too fast ;D

```auto
com.inductiveautomation.ignition.common.script.JythonExecException: Traceback (most recent call last): File "", line 2, in runAction at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:688) at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:705) at com.inductiveautomation.ignition.common.util.excel.adapters.DatasetExcelAdapter.drawSheet(DatasetExcelAdapter.java:61) at com.inductiveautomation.ignition.common.util.excel.adapters.DatasetExcelAdapter.drawWorkbook(DatasetExcelAdapter.java:44) at com.inductiveautomation.ignition.common.script.builtin.DatasetUtilities.dataSetToExcelBytes(DatasetUtilities.java:1206) at com.inductiveautomation.ignition.common.script.builtin.DatasetUtilities.toExcel(DatasetUtilities.java:1020) at jdk.internal.reflect.GeneratedMethodAccessor340.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) java.lang.RuntimeException: java.lang.RuntimeException: java.io.IOException: Permission denied
at org.python.core.Py.JavaError(Py.java:547)
at org.python.core.Py.JavaError(Py.java:538)
at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:192)
at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:208)
at org.python.core.PyObject. __call__ (PyObject.java:477)
at org.python.core.PyObject. __call__ (PyObject.java:481)
at org.python.pycode._pyx887.runAction$1(:4)
at org.python.pycode._pyx887.call_function()
at org.python.core.PyTableCode.call(PyTableCode.java:173)
at org.python.core.PyBaseCode.call(PyBaseCode.java:306)
at org.python.core.PyFunction.function ___call__ (PyFunction.java:474)
at org.python.core.PyFunction. __call__ (PyFunction.java:469)
at org.python.core.PyFunction. __call__ (PyFunction.java:464)
at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:831)
at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:813)
at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runFunction(ProjectScriptLifecycle.java:806)
at com.inductiveautomation.ignition.common.script.ScriptManager$ScriptFunctionImpl.invoke(ScriptManager.java:994)
at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$AutoRecompilingScriptFunction.invoke(ProjectScriptLifecycle.java:871)
at com.inductiveautomation.perspective.gateway.script.ScriptFunctionHelper.invoke(ScriptFunctionHelper.java:137)
at com.inductiveautomation.perspective.gateway.action.ScriptAction.runAction(ScriptAction.java:71)
at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.lambda$call$0(ActionCollection.java:263)
at com.inductiveautomation.perspective.gateway.api.LoggingContext.mdc(LoggingContext.java:54)
at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:252)
at com.inductiveautomation.perspective.gateway.model.ActionCollection$ActionSequence$ExecuteActionsTask.call(ActionCollection.java:221)
at com.inductiveautomation.perspective.gateway.threading.BlockingTaskQueue$TaskWrapper.run(BlockingTaskQueue.java:154)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at com.inductiveautomation.perspective.gateway.threading.BlockingWork$BlockingWorkRunnable.run(BlockingWork.java:42)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: org.python.core.PyException: java.lang.RuntimeException: java.lang.RuntimeException: java.io.IOException: Permission denied
... 31 common frames omitted
Caused by: java.lang.RuntimeException: java.io.IOException: Permission denied
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:688)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheet(SXSSFWorkbook.java:705)
at com.inductiveautomation.ignition.common.util.excel.adapters.DatasetExcelAdapter.drawSheet(DatasetExcelAdapter.java:61)
at com.inductiveautomation.ignition.common.util.excel.adapters.DatasetExcelAdapter.drawWorkbook(DatasetExcelAdapter.java:44)
at com.inductiveautomation.ignition.common.script.builtin.DatasetUtilities.dataSetToExcelBytes(DatasetUtilities.java:1206)
at com.inductiveautomation.ignition.common.script.builtin.DatasetUtilities.toExcel(DatasetUtilities.java:1020)
at jdk.internal.reflect.GeneratedMethodAccessor340.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:190)
... 28 common frames omitted
Caused by: java.io.IOException: Permission denied
at java.base/java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.base/java.io.File.createTempFile(Unknown Source)
at org.apache.poi.util.DefaultTempFileCreationStrategy.createTempFile(DefaultTempFileCreationStrategy.java:110)
at org.apache.poi.util.TempFile.createTempFile(TempFile.java:66)
at org.apache.poi.xssf.streaming.SheetDataWriter.createTempFile(SheetDataWriter.java:88)
at org.apache.poi.xssf.streaming.SheetDataWriter.(SheetDataWriter.java:71)
at org.apache.poi.xssf.streaming.SheetDataWriter.(SheetDataWriter.java:76)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createSheetDataWriter(SXSSFWorkbook.java:342)
at org.apache.poi.xssf.streaming.SXSSFSheet.(SXSSFSheet.java:80)
at org.apache.poi.xssf.streaming.SXSSFWorkbook.createAndRegisterSXSSFSheet(SXSSFWorkbook.java:684)
... 37 common frames omitted

```

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [April 21, 2022, 1:39pm UTC](https://forum.inductiveautomation.com/t/system-dataset-toexcel-java-io-ioexception-permission-denied/58680/4 "2022-04-21T13:39:49Z")

</div>

Looks like the Apache POI library is trying to make a temp file for that operation. Do you have a writable /temp (or wherever) for your service?

---

<div class="post-metadata">

**Author:** ![mcarritt1](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mcarritt1/32/4262_2.png) [@mcarritt1](https://forum.inductiveautomation.com/u/mcarritt1)\
**Post date:** [April 22, 2022, 9:17am UTC](https://forum.inductiveautomation.com/t/system-dataset-toexcel-java-io-ioexception-permission-denied/58680/5 "2022-04-22T09:17:29Z")

</div>

thanks! it ended up being a few folders in the /tmp directory (not in the ignition directory, at the root) that had some folders with the wrong user permissions. now its working.

---

<div class="post-metadata">

**Author:** ![ISEMAREN\_AAG](https://avatars.discourse-cdn.com/v4/letter/i/82dd89/32.png) [@ISEMAREN\_AAG](https://forum.inductiveautomation.com/u/ISEMAREN_AAG)\
**Post date:** [October 14, 2022, 12:47pm UTC](https://forum.inductiveautomation.com/t/system-dataset-toexcel-java-io-ioexception-permission-denied/58680/6 "2022-10-14T12:47:17Z")

</div>

Good afternoon.

I have had the same issue on version **8.1.21** , on a **Linux server**.  
When executing the **system.dataset.toExcel()** function, the error you can see at the bottom occurs.  
It seems that it is a known issue in other systems that use Java:

> **[Permission denied when exporting to excel](https://discourse.metabase.com/t/permission-denied-when-exporting-to-excel/13849)**
>
> Hi, CSV and JSON export works fine. I’m Running Metabase on Debian as a service with nginx as described here: https://www.metabase.com/docs/latest/operations-guide/running-metabase-on-debian.html When i try to export something to excel i get this...

I was able to **fix it** by changing the **permissions** of the " **/tmp/pofiles**" folder:  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/a/b/ab61d8ac7feb8769d1bb8a685ec2144107218d9a.png)

_sudo chmod 777 poifiles_

The **original permissions** were these (ls -l):

_ **drwxr-xr-x** 2 ignition ignition 4096 Oct 13 12:27 **pofiles** _

And **current permissions** are:  
 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/d/d/ddfc8778ea12098007df2ee772cce975fec2f5da.png)

I **don't know** if my solution is the best one.  
I'm also not sure **why** the issue was occurring. Can it be that the user who installed Ingition (root) is not the same as the owner (ignition) of the folder "/tmp/poifiles" ?

@pturmel  
Can you tell us what would be **the best solution** , please?

* * *

**Error** that occurred **before** changing permissions:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/a/a/aaf199c9f87e1a2a76a1d883d1402e6071415772.png)

Best Regards.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [October 14, 2022, 12:57pm UTC](https://forum.inductiveautomation.com/t/system-dataset-toexcel-java-io-ioexception-permission-denied/58680/7 "2022-10-14T12:57:09Z")

</div>

What user is running the Ignition service? (via systemctl status)

Perhaps your server is using SELinux or AppArmor?

---

<div class="post-metadata">

**Author:** ![ISEMAREN\_AAG](https://avatars.discourse-cdn.com/v4/letter/i/82dd89/32.png) [@ISEMAREN\_AAG](https://forum.inductiveautomation.com/u/ISEMAREN_AAG)\
**Post date:** [October 14, 2022, 1:13pm UTC](https://forum.inductiveautomation.com/t/system-dataset-toexcel-java-io-ioexception-permission-denied/58680/8 "2022-10-14T13:13:57Z")

</div>

_systemctl status_ (command):

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/7/a/7ae6955394ee2e9613b845b2b6a876a41abc8eb7.png)

AppArmor or SELinux has not been installed. The problem **started after updating** Ignition 8.1.9 to 8.1.21.

Best Regards.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [October 14, 2022, 2:43pm UTC](https://forum.inductiveautomation.com/t/system-dataset-toexcel-java-io-ioexception-permission-denied/58680/9 "2022-10-14T14:43:39Z")

</div>

I'm going to guess that the Apache POI jars included in Ignition were updated and the temp file behavior changed. Consider opening a support ticket. But in the meantime, altering permissions seems to be a reasonable work-around.

Consider including the sticky bit in the folder permissions (I can't remember the precise combination) to avoid cross-user `/tmp/` attacks. Also ensure that `/tmp` is mounted `noexec`.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [October 14, 2022, 2:59pm UTC](https://forum.inductiveautomation.com/t/system-dataset-toexcel-java-io-ioexception-permission-denied/58680/10 "2022-10-14T14:59:18Z")

</div>

The best solution would probably be to set the `java.io.tmpdir` system property, such as in the `wrapper.java.additional` parameters in the `ignition.conf` file; something like:  
`wrapper.java.additional.X=-Djava.io.tmpdir=path/to/directory`

Apache POI will automatically use this new temp directory.

If you _just_ want to override POI's behavior, you can do it programatically:

```auto
from org.apache.poi.util import TempFile, DefaultTempFileCreationStrategy
from java.util import File

dir = "some/new/directory"
TempFile.setTempFileCreationStrategy(DefaultTempFileCreationStrategy(File(dir)))

```

---

<div class="post-metadata">

**Author:** ![ISEMAREN\_AAG](https://avatars.discourse-cdn.com/v4/letter/i/82dd89/32.png) [@ISEMAREN\_AAG](https://forum.inductiveautomation.com/u/ISEMAREN_AAG)\
**Post date:** [October 14, 2022, 7:11pm UTC](https://forum.inductiveautomation.com/t/system-dataset-toexcel-java-io-ioexception-permission-denied/58680/11 "2022-10-14T19:11:01Z")

</div>

@pturmel  
@paul-griffith

Thanks.
