[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Excel-Datei als Tabelle (erweitert) - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Ruder-Oli
Beiträge: 13
Registriert: 30. Okt 2007, 21:13

Excel-Datei als Tabelle (erweitert)

15. Nov 2010, 21:48

Hallo!
Kann mir jemand weiterhelfen?
Ich möchte das Modul ->http://www.redaxo.de/165-Moduldetails.h ... ule_id=200<-
auch in 4.1 einbinden und bekomme immer diese Fehlermeldung:

Fatal error: main() [function.require]: Failed opening required 'Spreadsheet/Excel/Reader/OLERead.php' (include_path='.:/usr/lib/php') in /homepages/13/....../htdocs/rex4/redaxo/include/excel/reader.php on line 31

:?: :?: :D

Benutzeravatar
nitzer
Beiträge: 229
Registriert: 16. Okt 2006, 22:53
Wohnort: Erkrath
Kontaktdaten: ICQ Website

16. Nov 2010, 15:38

Steht in der Modulbeschreibung eigentlich drin:
Das Modul benötigt den PHP Excel Reader, Download unter:
http://sourceforge.net/project/showfile ... p_id=99160
Die beiden Dateien reader.php und oleread.inc in ein Verzeichnis /redaxo/include/excel kopieren (oder eben den Pfad in der Ausgabe entsprechend anpassen).
Ich vermute diese Datei fehlt bei Dir.

Grüße

Andreas

gupi
Beiträge: 286
Registriert: 20. Nov 2008, 13:49
Wohnort: Elsdorf/Rheinland

16. Nov 2010, 19:08

Hallo,

in meinem download des EXCEL-Readers "reader.php" stand :

Code: Alles auswählen

require_once 'Spreadsheet/Excel/Reader/OLERead.php';
doch die gesuchte Datei "OLERead.php" hieß in der Distribution nur "oleread.inc" also ohne .php extension und dann auch noch in einem anderen Verzeichnis.

Beachten: Linux ist Case-sensitive, also ggfls. auch noch die Groß/Kleinschreibung beachten. Wird von Windows Nutzern gerne übersehen.

LG
Gunter

Nachtrag: Schau Dir auch mal PHPExcel an, dass kommt auch mit den neuen "xlsx" Dateien klar. Ich lese und schreibe damit xls, xlsx, csv und xml.
read the manual first

Ruder-Oli
Beiträge: 13
Registriert: 30. Okt 2007, 21:13

Excel-Datei als Tabelle (erweitert)

16. Nov 2010, 22:40

nitzer hat geschrieben:Steht in der Modulbeschreibung eigentlich drin:
Das Modul benötigt den PHP Excel Reader, Download unter:
http://sourceforge.net/project/showfile ... p_id=99160
Die beiden Dateien reader.php und oleread.inc in ein Verzeichnis /redaxo/include/excel kopieren (oder eben den Pfad in der Ausgabe entsprechend anpassen).
Ich vermute diese Datei fehlt bei Dir.

Grüße

Andreas
Danke! Der Fehler ist weg. Ich habe die reader.php angepasst!
Frage warum gibt das Modul jetzt nur die Kopf bzw. Fusszeile aus.
Die Excel-Datei wird ohne einen Fehler nicht ausgegeben.
Danke Euch

gupi
Beiträge: 286
Registriert: 20. Nov 2008, 13:49
Wohnort: Elsdorf/Rheinland

17. Nov 2010, 20:46

Hallo,

ein kurzer Blick auf die Modulausgabe (Download) zeigt mir, dass das so nicht klappen kann.

wozu wird denn die Variable $tbody gefüllt? Mal sollte meinen, um einen tbody-Tag auszugeben. Das ist hier aber nicht der Fall, denn lediglich in der Zeile 1 ($i == 1) wird die Variable $tbody nicht gefüllt. alle weiteren Zeilen füllen $tbody und mit echo $tbody wird das auch für jede Zeile ausgegeben. Ist das so beabsichtigt? Ich hätte hier ein "<tr>" erwartet.

Code: Alles auswählen

 $tbody = "\n<tbody>";
 if ($i == 1) {
  $td = 'th';
  $thead = "\n<thead>";
  $theadend = "\n</thead>";
  $tbody = '';
 }

 $rowclass='';
 if ($data->sheets[0]['cells'][$i][1] != "") {
  $rowclass=" class='".$data->sheets[0]['cells'][$i][1]."'";
 }

 echo $tbody;
Nach meinem Eindruck ist das Ganze unübersichtlich geworden weil innerhalb der for-loops mit echo gearbeitet wird.
Wenn man jedoch mehrere Variablen füllt, dan wird das Ganze strukturierter und auch wart- und änderbar.
Hau alles ab Zeile 54 in der Modulausgabe in die Tonne und bau Deine eigenen Schleifen - so würde ich das machen:

Code: Alles auswählen

<?php
if ($REX[REDAXO] == true) {
  echo "<h3>REX_VALUE[1]</h3>";
  echo "Excel-Datei: REX_FILE[1]";
} else {

  require_once $REX['INCLUDE_PATH'].'/excel/reader.php';
  
  // ExcelFile($filename, $encoding);
  $data = new Spreadsheet_Excel_Reader();
  
  // Set output Encoding.
  $data->setOutputEncoding('CP1251');
  
  /***
  * if you want you can change 'iconv' to mb_convert_encoding:
  * $data->setUTFEncoder('mb');
  **/
  $data->setUTFEncoder('iconv');
  
  
  /***
  * By default rows & cols indeces start with 1
  * For change initial index use:
  * $data->setRowColOffset(0);
  **/
  // $data->setRowColOffset(2);
  
  /***
  *  Some function for formatting output.
  * $data->setDefaultFormat('%.2f');
  * setDefaultFormat - set format for columns with unknown formatting
  *
  * $data->setColumnFormat(4, '%.3f');
  * setColumnFormat - set format for column (apply only to number fields)
  **/
  
  $data->read($REX["HTDOCS_PATH"].'/files/REX_FILE[1]');
  
  /*
   $data->sheets[0]['numRows'] - count rows
   $data->sheets[0]['numCols'] - count columns
   $data->sheets[0]['cells'][$i][$j] - data from $i-row $j-column
  
   $data->sheets[0]['cellsInfo'][$i][$j] - extended info about cell
      
   $data->sheets[0]['cellsInfo'][$i][$j]['type'] = "date" | "number" | "unknown"
    if 'type' == "unknown" - use 'raw' value, because  cell contain value with format '0.00';
   $data->sheets[0]['cellsInfo'][$i][$j]['raw'] = value if cell without format 
   $data->sheets[0]['cellsInfo'][$i][$j]['colspan'] 
   $data->sheets[0]['cellsInfo'][$i][$j]['rowspan'] 
  */
  
  error_reporting(0);

  // start building table
  // table 
  $table_start = "<table class='daten'>\n";
  $table_start .= "<caption>REX_VALUE[1]</caption>\n";

  // table head   
  $table_head .= "<thead>\n";
  $table_head .= "<tr>\n";
  for ($col = 1; $col <= $data->sheets[0]['numCols']; $col++) {
    if ($data->sheets[0]['cellsInfo'][1][$col]['colspan'] != "") {
     $colspan = ' colspan="'.$data->sheets[0]['cellsInfo'][1][$col]['colspan'].'"';
    } 
    if ($data->sheets[0]['cells'][1][$col] != "") {
     $table_head .="<th".$colspan.">";
     $table_head .= utf8_encode($data->sheets[0]['cells'][1][$col]);
     $table_head .= "</th>\n";
     $colspan = "";
    }
  }
  $table_head .= "</tr>\n";
  $table_head .= "</thead>\n";

  // table body  
  $table_body = "<tbody>\n";
  for ($row = 2; $row <= $data->sheets[0]['numRows']; $row++) {
    $table_body .="<tr>\n";
    for ($col = 1; $col <= $data->sheets[0]['numCols']; $col++) {
      if ($data->sheets[0]['cellsInfo'][$row][$col]['colspan'] != "") {
       $colspan = ' colspan="'.$data->sheets[0]['cellsInfo'][$row][$col]['colspan'].'"';
      } 
      if ($data->sheets[0]['cells'][$row][$col] != "") {
       $table_body .="<td".$colspan.">";
       $table_body .= utf8_encode($data->sheets[0]['cells'][$row][$col]);
       $table_body .= "</td>\n";
       $colspan = "";
      }
    }   
    $table_body .="</tr>\n"; 
  }
  $table_body .="</tbody>\n"; 
  
  // table foot   
  if ("REX_VALUE[2]" != "") {
    $table_foot = "<tfoot><tr><td colspan='".$data->sheets[0]['numCols']."'>REX_VALUE[2]</td></tr></tfoot>\n";
  } else {
    $table_foot = "";
  }
  $table_end = "</table>\n";
  
  // creation of table finished - start providing table
  print $table_start;
  print $table_head;
  print $table_body;
  print $table_foot;
  print $table_end;
}
?>
ist allerdings noch ungetestet

LG
Gunter
read the manual first

Ruder-Oli
Beiträge: 13
Registriert: 30. Okt 2007, 21:13

Excel-Datei als Tabelle (erweitert)

18. Nov 2010, 23:29

Hallo Gunter

Vielen Dank!!!!

Nun kann ich mich an die Arbeit mit CSS machen.

LG Oliver

Zurück zu „Allgemeines [R4]“