Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

HTTP Content Streaming

24 views
Skip to first unread message

Jörg Burzeja

unread,
Jul 10, 2018, 1:24:34 PM7/10/18
to
Hallo und guten Abend,

der alte Code für eine Ausgabe als XLS-Datei funktioniert; der neue Code
für eine XLSX-Datei zeigt leider einen Fehler an (Dateiformat oder
Dateierweiterung ungültig).

Der "Microsoft Office MIME types for HTTP Content Streaming" sollte
korrekt sein:
https://stackoverflow.com/questions/4212861/what-is-a-correct-mime-type-for-docx-pptx-etc

Hat jemand eine einfache Lösung?

Danke.

// ======================================================
//old code:
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="test.xls"');

// ======================================================
//new code:
//header("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");

//header('Content-Disposition: attachment; filename="test.xlsx"');
// ======================================================
echo "<table>
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>Build 5</td>
</tr>
<tr>
<td style='font-size:200%'>Answer 1</td>
<td style='background-color:#b0ffe0;color:#f00'>Answer 2</td>
</tr>
<tr>
<td colspan='2' style='font-weight:bold'>Answer 3\nwith 2
columns</td>
</tr>
</tbody>
</table>";

?>

Karl Pflästerer

unread,
Jul 10, 2018, 6:07:47 PM7/10/18
to
Jörg Burzeja <No_Spam...@gmx.de> writes:

> Hallo und guten Abend,
>
> der alte Code für eine Ausgabe als XLS-Datei funktioniert; der neue Code für
> eine XLSX-Datei zeigt leider einen Fehler an (Dateiformat oder
> Dateierweiterung ungültig).
>
> Der "Microsoft Office MIME types for HTTP Content Streaming" sollte korrekt
> sein:
> https://stackoverflow.com/questions/4212861/what-is-a-correct-mime-type-for-docx-pptx-etc
>
> Hat jemand eine einfache Lösung?
>
> Danke.
>
> // ======================================================
> //old code:
> header('Content-Type: application/vnd.ms-excel');
> header('Content-Disposition: attachment; filename="test.xls"');
>
> // ======================================================
> //new code:
> //header("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
>
> //header('Content-Disposition: attachment; filename="test.xlsx"');

Wenn das der echte Code ist: Bei header() fehlt "Content-Type:" bei new
code

KP

Thomas 'PointedEars' Lahn

unread,
Jul 10, 2018, 6:28:44 PM7/10/18
to
Jörg Burzeja wrote:

> der alte Code für eine Ausgabe als XLS-Datei funktioniert; der neue Code
> für eine XLSX-Datei zeigt leider einen Fehler an (Dateiformat oder
> Dateierweiterung ungültig).

Welches Programm zeigt diese Fehlermeldung an?

--
PointedEars
Zend Certified PHP Engineer <http://www.zend.com/en/yellow-pages/ZEND024953>
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn>
Twitter: @PointedEars2 | Please do not cc me./Bitte keine Kopien per E-Mail.

Jörg Burzeja

unread,
Jul 11, 2018, 2:06:06 AM7/11/18
to
Am 11.07.2018 um 00:28 schrieb Thomas 'PointedEars' Lahn:

Hallo Thomas,

>> der alte Code für eine Ausgabe als XLS-Datei funktioniert; der neue Code
>> für eine XLSX-Datei zeigt leider einen Fehler an (Dateiformat oder
>> Dateierweiterung ungültig).
>
> Welches Programm zeigt diese Fehlermeldung an?

Sorry; hatte ich vergessen zu erwähnen. Excel zeigt die Meldung an.


Jörg Burzeja

unread,
Jul 11, 2018, 2:07:14 AM7/11/18
to
Am 11.07.2018 um 00:07 schrieb Karl Pflästerer:

Hallo Karl,
Das ist korrekt.

header('Content-Type:
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

Geht aber leider immer noch nicht.


Karl Pflästerer

unread,
Jul 11, 2018, 6:37:11 AM7/11/18
to
Ist die übertragene Datei denn eine gültige xlsx Datei? Excel war in
früheren versionen sehr großzügig und hat auch csv Dateien oder HTML
Dokumente interpretiert.

KP

Jörg Burzeja

unread,
Jul 11, 2018, 1:56:10 PM7/11/18
to
Wenn man den (berichtigten) Codeschnipsel meines Ursprungsposts als
PHP-Datei speichert und aus einem Projekt öffnet, sieht man mit 'old
Code', das automatisch eine neue Excel-Datei erstellt und mit dem Inhalt
der im Code enthaltenen HTML-Tabelle geöffnet wird (ich vermute, das
meinst Du mit "frühere Excel-Versionen waren in der Interpretation
großzügig").
Der 'new Code' mit xlsx öffnet zwar ebenfalls eine Excel-Tabelle, zeigt
dann aber einen Fehler an (Dateiformat oder Dateierweiterung ungültig).

Scheint wohl als einfachste Lösung nicht auszureichen, den geänderten
mimi-Type im Header zu hinterlegen, oder gibt es doch noch eine Möglichkeit?



Karl Pflästerer

unread,
Jul 11, 2018, 3:55:37 PM7/11/18
to
Wieso nimmst du denn das neue Format? Excel erwartet ein bestimmtes
Format, du schickst es nicht => Fehler. Man kann gültige Excel
Dokumente mit PHP erzeugen (zB
https://packagist.org/packages/phpoffice/phpspreadsheet ). Ist aber
etwas aufwendiger, als HTML zu senden und darauf zu setzen, dass Excel
dies wie gewollt interpretiert.

KP

Christoph M. Becker

unread,
Jul 11, 2018, 5:32:08 PM7/11/18
to
Am 11.07.2018 um 21:55 schrieb Karl Pflästerer:

> Wieso nimmst du denn das neue Format? Excel erwartet ein bestimmtes
> Format, du schickst es nicht => Fehler. Man kann gültige Excel
> Dokumente mit PHP erzeugen (zB
> https://packagist.org/packages/phpoffice/phpspreadsheet ). Ist aber
> etwas aufwendiger, als HTML zu senden und darauf zu setzen, dass Excel
> dies wie gewollt interpretiert.

ACK. Eventuell eine interessante Alternative zu PHPSpreadsheet könnte
die PECL-Erweiterung xlswriter darstellen:
<https://pecl.php.net/package/xlswriter>
<http://php.net/manual/en/book.xlswriter.php>

--
Christoph M. Becker

Jörg Burzeja

unread,
Jul 12, 2018, 2:29:44 PM7/12/18
to
Am 11.07.2018 um 23:32 schrieb Christoph M. Becker:

>> Wieso nimmst du denn das neue Format? Excel erwartet ein bestimmtes
>> Format, du schickst es nicht => Fehler. Man kann gültige Excel
>> Dokumente mit PHP erzeugen (zB
>> https://packagist.org/packages/phpoffice/phpspreadsheet ). Ist aber
>> etwas aufwendiger, als HTML zu senden und darauf zu setzen, dass Excel
>> dies wie gewollt interpretiert.
>
> ACK. Eventuell eine interessante Alternative zu PHPSpreadsheet könnte
> die PECL-Erweiterung xlswriter darstellen:
> <https://pecl.php.net/package/xlswriter>
> <http://php.net/manual/en/book.xlswriter.php>

Das "aufwendiger" wollte ich zwar vermeiden; aber Danke für die Hinweise.


Arno Welzel

unread,
Jul 12, 2018, 2:53:54 PM7/12/18
to
Jörg Burzeja:

> Hallo und guten Abend,
>
> der alte Code für eine Ausgabe als XLS-Datei funktioniert; der neue Code
> für eine XLSX-Datei zeigt leider einen Fehler an (Dateiformat oder
> Dateierweiterung ungültig).
[...]
> //header('Content-Disposition: attachment; filename="test.xlsx"');
> // ======================================================
> echo "<table>
> <thead>
> <tr>
> <th>Column 1</th>
> <th>Column 2</th>
> </tr>
[...]

Das ist aber kein XLSX, sondern HTML.


--
Arno Welzel
https://arnowelzel.de
https://de-rec-fahrrad.de
http://fahrradzukunft.de

Arno Welzel

unread,
Jul 13, 2018, 4:21:14 AM7/13/18
to
Arno Welzel:

> Jörg Burzeja:
>
>> Hallo und guten Abend,
>>
>> der alte Code für eine Ausgabe als XLS-Datei funktioniert; der neue Code
>> für eine XLSX-Datei zeigt leider einen Fehler an (Dateiformat oder
>> Dateierweiterung ungültig).
> [...]
>> //header('Content-Disposition: attachment; filename="test.xlsx"');
>> // ======================================================
>> echo "<table>
>> <thead>
>> <tr>
>> <th>Column 1</th>
>> <th>Column 2</th>
>> </tr>
> [...]
>
> Das ist aber kein XLSX, sondern HTML.

Nachtrag - für Excel-Spreadsheets wäre das hier sinnvoll:

<https://github.com/PHPOffice/PhpSpreadsheet>

Das habe ich auch schon eingesetzt und das funktioniert recht problemlos.

Stefan Froehlich

unread,
Jul 13, 2018, 4:33:56 AM7/13/18
to
On Fri, 13 Jul 2018 10:21:13 Arno Welzel wrote:
> > Jörg Burzeja:
> > [...]
> >> //header('Content-Disposition: attachment; filename="test.xlsx"');
> >> // ======================================================
> >> echo "<table>
> >> <thead>
> >> <tr>
> >> <th>Column 1</th>
> >> <th>Column 2</th>
> >> </tr>
> > [...]
>
> Nachtrag - für Excel-Spreadsheets wäre das hier sinnvoll:
> <https://github.com/PHPOffice/PhpSpreadsheet>
> Das habe ich auch schon eingesetzt und das funktioniert recht problemlos.

Zum Lesen ist es großartig, aber zum Schreiben möchte ich
Excel-Sheets in der Regel nicht programmieren, sondern (mehr
oder weniger) per Template zusammenstellen, und das geht dort
halt nicht.

Wobei, wo ich gerade darüber nachdenke: man müsste eigentlich
HTML-Templates einlesen und daraus xlsx generieren können. Muss ich
mir einmal ansehen...

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Das zarte Sehnen, oder warum Stefan so hurtig röchelt!
(Sloganizer)

Arno Welzel

unread,
Jul 13, 2018, 5:26:09 PM7/13/18
to
Stefan Froehlich:

> On Fri, 13 Jul 2018 10:21:13 Arno Welzel wrote:
[...]
>> Nachtrag - für Excel-Spreadsheets wäre das hier sinnvoll:
>> <https://github.com/PHPOffice/PhpSpreadsheet>
>> Das habe ich auch schon eingesetzt und das funktioniert recht problemlos.
>
> Zum Lesen ist es großartig, aber zum Schreiben möchte ich
> Excel-Sheets in der Regel nicht programmieren, sondern (mehr
> oder weniger) per Template zusammenstellen, und das geht dort
> halt nicht.
>
> Wobei, wo ich gerade darüber nachdenke: man müsste eigentlich
> HTML-Templates einlesen und daraus xlsx generieren können. Muss ich
> mir einmal ansehen...

<https://phpspreadsheet.readthedocs.io/en/develop/topics/reading-and-writing-to-file/#html>

Stefan Froehlich

unread,
Jul 14, 2018, 2:12:20 AM7/14/18
to
On Fri, 13 Jul 2018 23:26:06 Arno Welzel wrote:
> Stefan Froehlich:
> > [phpspreadsheet]
> > Wobei, wo ich gerade darüber nachdenke: man müsste eigentlich
> > HTML-Templates einlesen und daraus xlsx generieren können. Muss
> > ich mir einmal ansehen...

> <https://phpspreadsheet.readthedocs.io/en/develop/topics/reading-and-writing-to-file/#html>

Hm:

| Please note that HTML reader is still experimental and does not
| yet support merged cells or nested tables cleanly

Schade, aber danke für den Hinweis, damit erspare ich mir das
Ausprobieren.

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Das wilde Stöhnen zorniger Bengel. Stefan!
(Sloganizer)

Arno Welzel

unread,
Jul 15, 2018, 2:39:43 PM7/15/18
to
Stefan Froehlich:

> On Fri, 13 Jul 2018 23:26:06 Arno Welzel wrote:
>> Stefan Froehlich:
>>> [phpspreadsheet]
>>> Wobei, wo ich gerade darüber nachdenke: man müsste eigentlich
>>> HTML-Templates einlesen und daraus xlsx generieren können. Muss
>>> ich mir einmal ansehen...
>
>> <https://phpspreadsheet.readthedocs.io/en/develop/topics/reading-and-writing-to-file/#html>
>
> Hm:
>
> | Please note that HTML reader is still experimental and does not
> | yet support merged cells or nested tables cleanly
>
> Schade, aber danke für den Hinweis, damit erspare ich mir das
> Ausprobieren.

Wenn Du keine verbundenen Zellen oder verschachtelte Tabellen hast,
sollte das aber kein Problem sein.

Und soooo aufwendig ist das "manuelle" erzeugen einer Tabelle auch nicht:

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Text erste Spalte');
$sheet->setCellValue('B1', 'Text zweie Spalte');
$sheet->setCellValue('A2', 'Text erste Spalte, Zeile 2');
$sheet->setCellValue('B2', 'Text zweite Spalte, Zeile 2');
$sheet->setSelectedCell('A1');

header('Content-Type: application/'.
'vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;'.
'filename="my-file.xlsx"');
header('Cache-Control: max-age=0');

$writer = new Xlsx($spreadsheet);
$writer->save('php://output');

Bei Bedarf kann man auch mit setCellValueExplicit() den Datentyp mit
angeben, wenn man z.B. Datumsangaben oder Zahlen als Text haben will.

Stefan Froehlich

unread,
Jul 16, 2018, 1:47:54 AM7/16/18
to
On Sun, 15 Jul 2018 20:39:41 Arno Welzel wrote:
> Stefan Froehlich:
> > On Fri, 13 Jul 2018 23:26:06 Arno Welzel wrote:
> >> <https://phpspreadsheet.readthedocs.io/en/develop/topics/reading-and-writing-to-file/#html>

> > | Please note that HTML reader is still experimental and does not
> > | yet support merged cells or nested tables cleanly
> >
> > Schade, aber danke für den Hinweis, damit erspare ich mir das
> > Ausprobieren.
>
> Wenn Du keine verbundenen Zellen oder verschachtelte Tabellen hast,
> sollte das aber kein Problem sein.

Das kommt halt leider in praktisch jeder Tabelle (in den
Tabellenköpfen und in Summenzeilen) vor.

> Und soooo aufwendig ist das "manuelle" erzeugen einer Tabelle auch
> nicht:

Es ist nicht nur eine Frage des Aufwands: Meine Excel-Dateien werden
so gut wie immer kundenspezifisch angepasst, und das ist mit
Template und SpreadsheetML (jedenfalls für mich) deutlich leichter
handhabbar - beispielsweise wenn mittendrin zusätzliche Zeilen
eingefügt werden sollen, geht das:

> $sheet->setCellValue('A1', 'Text erste Spalte');
> $sheet->setCellValue('A2', 'Text erste Spalte, Zeile 2');

...schon nicht mehr ganz so einfach.

Größtes Manko von SpreadsheetML ist, dass prinzipbedingt keine
Grafiken erlaubt sind, weshalb ich mich immer wieder einmal nach
Alternativen umsehe.

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Der endlose Frust grenzenloser Raeder. Stefan!
(Sloganizer)

Jörg Burzeja

unread,
Jul 16, 2018, 2:48:26 PM7/16/18
to
Am 16.07.2018 um 07:47 schrieb Stefan Froehlich:

> Größtes Manko von SpreadsheetML ist, dass prinzipbedingt keine
> Grafiken erlaubt sind, weshalb ich mich immer wieder einmal nach
> Alternativen umsehe.

Ich hatte mich auch nach Alternativen umgesehen; vielleicht ist ja was
für Dich dabei.


https://tableexport.v3.travismclarke.com/

https://github.com/clarketm/TableExport

https://github.com/hhurz/tableExport.jquery.plugin

Arno Welzel

unread,
Jul 17, 2018, 3:21:34 PM7/17/18
to
Stefan Froehlich:

> On Sun, 15 Jul 2018 20:39:41 Arno Welzel wrote:
>> Stefan Froehlich:
>>> On Fri, 13 Jul 2018 23:26:06 Arno Welzel wrote:
>>>> <https://phpspreadsheet.readthedocs.io/en/develop/topics/reading-and-writing-to-file/#html>
>
>>> | Please note that HTML reader is still experimental and does not
>>> | yet support merged cells or nested tables cleanly
>>>
>>> Schade, aber danke für den Hinweis, damit erspare ich mir das
>>> Ausprobieren.
>>
>> Wenn Du keine verbundenen Zellen oder verschachtelte Tabellen hast,
>> sollte das aber kein Problem sein.
>
> Das kommt halt leider in praktisch jeder Tabelle (in den
> Tabellenköpfen und in Summenzeilen) vor.
>
>> Und soooo aufwendig ist das "manuelle" erzeugen einer Tabelle auch
>> nicht:
>
> Es ist nicht nur eine Frage des Aufwands: Meine Excel-Dateien werden
> so gut wie immer kundenspezifisch angepasst, und das ist mit
> Template und SpreadsheetML (jedenfalls für mich) deutlich leichter
[...]

Was spricht gegen Excel-Dateien als Vorlage?

Siehe auch:

<https://phpspreadsheet.readthedocs.io/en/develop/topics/reading-and-writing-to-file/#excel-2007-spreadsheetml-file-format>

>> $sheet->setCellValue('A1', 'Text erste Spalte');
>> $sheet->setCellValue('A2', 'Text erste Spalte, Zeile 2');
>
> ...schon nicht mehr ganz so einfach.
>
> Größtes Manko von SpreadsheetML ist, dass prinzipbedingt keine
> Grafiken erlaubt sind, weshalb ich mich immer wieder einmal nach
> Alternativen umsehe.

Wieso "prinzipbedingt"?

Stefan Froehlich

unread,
Jul 18, 2018, 11:26:05 AM7/18/18
to
On Tue, 17 Jul 2018 21:21:30 Arno Welzel wrote:
> Stefan Froehlich:
> > Meine Excel-Dateien werden so gut wie immer kundenspezifisch
> > angepasst, und das ist mit Template und SpreadsheetML
> > (jedenfalls für mich) deutlich leichter [...]
> [...]
>
> Was spricht gegen Excel-Dateien als Vorlage?
> Siehe auch:
>
> <https://phpspreadsheet.readthedocs.io/en/develop/topics/reading-and-writing-to-file/#excel-2007-spreadsheetml-file-format>

> > Größtes Manko von SpreadsheetML ist, dass prinzipbedingt keine
> > Grafiken erlaubt sind, weshalb ich mich immer wieder einmal nach
> > Alternativen umsehe.

> Wieso "prinzipbedingt"?

Weil SpreadsheetML nun einmal keine Anweisungen dafür bereithält.
Wobei ich eventuell zu unpräise war: Ich meinte das "echte"
SpreadsheetML, also das XML, das Microsoft mit Office2003 in einer
einzigen (unkomprimierten) XML-Datei ausgeliefert hat:
<https://de.wikipedia.org/wiki/SpreadsheetML>.

Das, was PhpSpreadsheet als "SpreadsheetML" bezeichnet, ist ja
bereits eine komplexe ZIP-Datei, die *auch* XML-Dateien enthält. Da
kann ich so grausame Dinge, wie ich sie momentan bei Bedarf mit
Smarty anstelle, nicht machen. Z.B. auf Kundenwunsch mal eben eine
Summenspalte mit bedingter Formatierung mitten in das fix-fertige
Excel-Sheet einzubauen, ohne an der Software selbst auch nur eine
Zeile zu ändern:

#v+
<ss:Cell ss:StyleID="amount{if $nosum}W{/if}_{$specsheet->getDefaultDecimals()}" ss:Formula="=IF(RC{$cols.offered}=&quot;{t}ja{/t}&quot;,0{foreach $specsheet->getColumns()|sort as $column}+ROUND(RC{$cols.firstcolumn+2*$column@index},{$specsheet->getDefaultDecimals()}){/foreach},&quot;&quot;)">
<ss:Data ss:Type="Number"></ss:Data>
</ss:Cell>
#v-

Bei einer via PhpSpreadsheet geöffneten Vorlage müsste ich das

Wobei natürlich in Excel2007-Dateien ein sehr ähnlich aufgebautes
XML-File steckt. Ich muss einmal sehen, ob ich es schaffe, dafür ein
Tempalte zu erstellen und das dann mit den Grafik- und Style-Dateien
zusammen in ein XLSX zu verpacken. Das wäre momentan die ultimative
Lösung.

Servus,
Stefan

PS: Ich lese gerade auf
<https://phpspreadsheet.readthedocs.io/en/develop/references/features-cross-reference/>,
dass Zellenformatierung momentan für Excel noch nicht unterstützt
wird. Damit scheidet das eh aus; zum Lesen ist es aber auch jetzt
schon weitgehend brauchbar, solange das Sheet nicht
TOKEN_SUBTYPE_UNION verwendet, also Dinge wie "=RANK(B1, (C1, D1))";
dass das nicht geht, habe ich auf die harte Tour gelernt.


--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Stefan - die grenzenlosste Herausforderung seit der Steinzeit.
(Sloganizer)
0 new messages