diff --git a/app/controllers/course/members.php b/app/controllers/course/members.php
index 5f5a859af02ca908a2a1df7ee65ce4980119aa7a..b6807c59b844dbfe8571c24575f18f70601e5f59 100644
--- a/app/controllers/course/members.php
+++ b/app/controllers/course/members.php
@@ -1770,7 +1770,6 @@ class Course_MembersController extends AuthenticatedController
         $filename = _('Teilnehmendenexport') . ' ' . $this->course_title . '.' . $export_format;
 
         $this->render_spreadsheet($header, $members, $export_format, $filename);
-        $this->render_nothing();
     }
 
     public function toggle_student_mailing_action($state)
diff --git a/app/controllers/course/statusgroups.php b/app/controllers/course/statusgroups.php
index 826cd07fbf2daec2769ecc1f106eceed4fa792c6..02f4579cd407c3852ec9f327401784bad05afd38 100644
--- a/app/controllers/course/statusgroups.php
+++ b/app/controllers/course/statusgroups.php
@@ -362,7 +362,6 @@ class Course_StatusgroupsController extends AuthenticatedController
         $filename = FileManager::cleanFileName(_('Gruppenliste') . ' ' . $this->course_title . '.' . $export_format);
 
         $this->render_spreadsheet($header, $statusgroup_data, $export_format, $filename);
-        $this->render_nothing();
     }
 
     /**
diff --git a/app/controllers/institute/members.php b/app/controllers/institute/members.php
index 5cbefe22de6f44e4dc26cea3ff84be96090cdd42..1d49012fab71b97615460fc23407a733092558bc 100644
--- a/app/controllers/institute/members.php
+++ b/app/controllers/institute/members.php
@@ -566,7 +566,6 @@ class Institute_MembersController extends AuthenticatedController
         $filename = FileManager::cleanFileName(_('Mitarbeitendenexport') . ' ' . $this->institute->name . ' ' . $faculty . '.' . $export_format);
 
         $this->render_spreadsheet($header, $temp, $export_format, $filename);
-        $this->render_nothing();
     }
 
     private function setupSidebar()
diff --git a/app/controllers/studip_controller.php b/app/controllers/studip_controller.php
index 06383ec9cdaea19f2135b90f7e3e0c8648d23047..7444dba4ce13e1ec28cfe09d1dfb1fc6dde7e89b 100644
--- a/app/controllers/studip_controller.php
+++ b/app/controllers/studip_controller.php
@@ -803,34 +803,44 @@ abstract class StudipController extends Trails_Controller
 
     /**
      * Export xlsx and csv files via PhpSpreadsheet
-     * @param $header
-     * @param $data
-     * @param $format
-     * @param $filename
-     * @param $filepath
-     * @return void
+     *
      * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
      */
-    public function render_spreadsheet($header, $data, $format, $filename, $filepath = null)
-    {
+    public function render_spreadsheet(
+        array $header,
+        array $data,
+        string $format,
+        string $filename,
+        ?string $filepath = null
+    ): void  {
+        $render_to_browser = false;
         if ($filepath == null) {
-            $filepath = 'php://output';
+            $render_to_browser = true;
+            $filepath = tempnam($GLOBALS['TMP_PATH'], 'spreadsheet');
         }
         $spreadsheet = new Spreadsheet();
         $activeWorksheet = $spreadsheet->getActiveSheet();
-        $activeWorksheet->fromArray($header, NULL, 'A1');
-        $activeWorksheet->fromArray($data, NULL, 'A2');
+        $activeWorksheet->fromArray($header);
+        $activeWorksheet->fromArray($data, null, 'A2');
 
-        $this->set_content_type('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
-        $this->response->add_header('Content-Disposition', 'attachment;' . encode_header_parameter('filename', $filename));
-        $this->response->add_header('Cache-Control', 'cache, must-revalidate');
-        if ($format == 'xlsx') {
+        if ($format === 'xlsx') {
             $writer = new Xlsx($spreadsheet);
-        } else if ($format == 'csv') {
+        } elseif ($format === 'csv') {
             $writer = new Csv($spreadsheet);
+        } else {
+            throw new Exception("Format {$format} is not supported");
         }
 
         $writer->save($filepath);
+
+        if ($render_to_browser) {
+            $this->response->add_header('Cache-Control', 'cache, must-revalidate');
+            $this->render_temporary_file(
+                $filepath,
+                $filename,
+                'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+            );
+        }
     }
 
     /**