Zum Inhalt springen

Query in Excel ausgeben/speichern


Empfohlene Beiträge

hallo zusammen,

folgendes problem beschäftigt mich:

hab ne mysql-db mit html/php frontend. nach eingabe der suchkriterien auf meiner index.php möchte ich die möglichkeit haben mein aktuelles "ausgabequery" (tabellenkopf & tabelleninhalt) in excel auszugeben und evtl. auch zu speichern.

hab schon einiges versucht...angefangen bei nem einfachen link zu ner .xls mit mitgegebenem wert, bis zum neuen chaosformular ^^

ich hoff mir hat einer möglichst schnell n beispiel, ne anregung, oder was auch immer...:beagolisc

Link zu diesem Kommentar
Auf anderen Seiten teilen

es gibt mehrere möglichkeiten.

genereriere eine "echte" excel-datei (sogenanntes BIFF) z.b. mit PEARs Spreadsheet_Excel_Writer und sende das an den client. dazu sind folgende HTTP-headerzeilen erforderlich:

header("Content-Type: application/vnd.ms-excel");

header("Content-Disposition: inline; filename=\"excel.xls\"");

oder generiere einfaches CSV, indem du mittels fprintf oder fputs zeilen/feldweise die felder deines resultsets in die CSV-datei schreibst. die erste zeile im CSV kann dann ja noch deine feldbezeichnungen festlegen.

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

thx für den link nachwuchsinfo., hat mir geholfen ^^

jetzt gibt`s eigentlich nur noch ein darstellungsproblem in excel.

wenn ich z.B. mir die IDs ausgeben lassen will werden die nicht, wie gewollt horizontal, sondern vertikal angezeigt...und zusätzlich stehen datensätze nur in einer spalte (also ein string, statt wie gewoll für jeden datensatz einen einzelnen). <-- das führt später zu formatierungsschwierigkeiten.


<?
header('Content-Type: text/x-csv');
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Content-Disposition: attachment; filename=print.csv');
header('Pragma: no-cache');

session_start();
include("config.inc.php");

$db=mysql_connect($db_host,$db_user,$db_pw);
mysql_select_db($db_name,$db);

$result=mysql_query("SELECT * FROM ma_au"); //ma_au == tabelle

for($i=0, $Export=""; $i<mysql_num_rows($result); $i++)
{
$Daten = mysql_fetch_object($result);

$Spalte[0] = str_replace("\"", "\"\"", $Daten->ma_nr);
// etc.
// etc.

for($j=0; $j<count($Spalte); $j++)
{
$Export .= "\"" . $Spalte[$j] . "\"";
if($j!=count($Spalte)-1)
{
$Export .= ";";
}
}
$Export .= "\r\n";
$Spalte = "";
}

echo $Export;
?>
[/PHP]

MAHLZEIT!! *miam miam mampf*

Link zu diesem Kommentar
Auf anderen Seiten teilen

wenn ich z.B. mir die IDs ausgeben lassen will werden die nicht, wie gewollt horizontal, sondern vertikal angezeigt...

verwendest du ID als (ersten) spaltennamen? excel hat m.w. probleme mit CSV-dateien, wenn das erste feld ID heisst.

und zusätzlich stehen datensätze nur in einer spalte (also ein string, statt wie gewoll für jeden datensatz einen einzelnen).

das ist ein manko von excel, dass alle zeilen im CSV unformatiert in einer wurst in spalte A eingefügt werden. direkt öffnen via doppelklick geht so nicht, über datei/öffnen wird die CSV richtig eingelesen.

es ist vermutlich also eher ein excel-problem; ein direktes öffnen der CSV-datei im editor deiner wahl und kontrolle der ausgabe würde ich aber empfehlen.

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

verwendest du ID als (ersten) spaltennamen? excel hat m.w. probleme mit CSV-dateien, wenn das erste feld ID heisst.

nope das war nur ein bespiel zum verständnis.

wenn ich im editor ne .csv mit

"Vorname; Name; Str.; PLZ;"

"Hans; Werner; ; 12345;"

"Eugen; Straus; Meinestr. 4; 12345;"

zum test erstelle, wird`s richtig ausgewertet, also können tut das excel.

(spaltenname mit darunterstehendem datensätz)

der fehler für die nun horizontale ausgabe in excel muss im code liegen- fällt dir was auf?

das ist ein manko von excel, dass alle zeilen im CSV unformatiert in einer wurst in spalte A eingefügt werden.

wär ein assoziativ aray nicht besser damit jeder datensatz separat gespeichert wird? leider mangelt`s mir an der umsetzung ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

danke an euch für die anregungen;)

gelöst hab ich das jetzt mit nem eigenen code

<?
ob_start();
session_start();
include ("config.inc.php");
include ("index.php");


$head='';
$excel=FOPEN("excel.csv", "w");
for($i=0;$i<35;$i++)
{
$head = $head.$auswahl[$i][anzeige].';';
}
FWRITE($excel, $head."\n");

$result=mysql_query($query);
for($j=0;$j<mysql_num_rows($result);$j++)
{
$line=mysql_fetch_assoc($result);
$data = '';
for($i=0;$i<35;$i++)
{
$data = $data.$line[$auswahl[$i][intern]].';';
}
FWRITE($excel, $data."\n");
}
FCLOSE($excel);


header("Location: excel.csv");
ob_end_flush();
?>[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...