2016-11-04 4 views
1

Ich habe diese Excel-Datei (.xlsx):Formeln berechnet nicht, wenn sie als csv exportieren

+---+-------+ 
| | A | 
+---+-------+ 
| 1 | 1  | 
| 2 | =A1+1 | 
| 3 | =2*3 | 
+---+-------+ 

In Laravel ich diesen Code konfiguriert haben den Inhalt

return Excel::load(base_path().'/test.xlsx')->string('csv'); 

, die den Text der zurück anzuzeigen Zellen:

"1", "= A1 + 1", "= 3 * 2"

Was ich will, sind die berechneten Werte, aber mit der gleichen Formatierung:

"1", "2", "6"

Der Code

return Excel::load(base_path().'/test.xlsx')->get(); 

kehrt die korrekten berechneten Daten, aber im falschen Format.

+0

PHP ist keine Tabellenkalkulation, es hat keine Idee was = A1 + 1 im Kontext einer Tabellenkalkulation bedeutet und exportiert nur den Rohwert der Spalte. Sie müssten diese Funktionalität selbst implementieren (erstellen Sie ein Array von Spalten und Zeilen, scannen Sie das erste Zeichen für eine beliebige Zelle für das = -Symbol, wenn Sie ein = -Symbol finden, nehmen Sie an, dass der Rest der Spalte eine Formel ist und versuchen Sie es auszuführen) it) – GordonM

+0

Das ist keine PHP-Funktion, es ist eine Funktion der Bibliothek, die Sie zum Parsen der Datei verwenden. Wenn Sie die von get bereitgestellte Formatierung nicht mögen, können Sie die Klasse, die es implementiert, erweitern und die Superklassenimplementierung durch Ihre eigene – GordonM

Antwort

2

Es gibt eine Option genau für diesen Zweck. Sie haben wahrscheinlich eine Konfigurationsdatei unter config/excel.php (wenn nicht einfach php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"). Werfen Sie einen Blick auf die export Array, das die folgende Option enthält:

/* 
    |-------------------------------------------------------------------------- 
    | Pre-calculate formulas during export 
    |-------------------------------------------------------------------------- 
    */ 
    'calculate'     => false, 

Set es wahr und dort haben Sie es.

+0

ersetzen. Dies löst mein Problem, aber leider kann ich die Konfigurationsdatei in meinem Projekt nicht bearbeiten, weil es Kann von Composer – Daniel

+0

@Daniel aktualisiert werden Ich verstehe nicht, warum die Config überschrieben werden würde, aber Sie können 'Config :: set (['excel.export.calculate' => true]))' 'immer vor dem Export aufrufen , um die Option dynamisch festzulegen. – alepeino

+0

Ihr Vorschlag hat bei mir nicht funktioniert - vielleicht weil ich eine ältere Version von Laravel verwende. Es hat mich dazu inspiriert, 'Config :: set ('excel :: export.calculate', true);' stattdessen, was perfekt funktioniert hat. – Daniel