2016-03-29 4 views
0

Ich wollte nur wissen, ob dies möglich ist und wenn ja, kann ich einen Ausgangspunkt bekommen.schreiben Sie Formulardaten in XLS-Datei

Momentan suche ich ein HTML-Formular zu erstellen, und senden Sie die Daten an eine Excel-Tabelle. Ich werde PHP verwenden, um die Formulardaten zu senden. Das Formular wird als 2 Tabellen eingerichtet. Die 2 Tabellen werden als Mangel-Tabelle und die andere als Überschreitungs-Tabelle gekennzeichnet. Ich habe ein Dropdown-Menü mit den Namen von Personen. Was ich zu erreichen versuche, ist, dass die Daten in eine Excel-Tabelle geschrieben werden und die Werte von der Knappheitstabelle und den Werten aus der Überlagerungstabelle getrennt werden. Wenn zum Beispiel die Knappheitstabelle 4 Einträge enthält und der Überschuß 2 Einträge enthält, würde in der Excel-Tabelle für Zelle A1 ein Überschuß angegeben werden, Zeile 2 würde die Spaltenüberschriften enthalten (dh Datum, Beschreibung, Größe usw.). .), und dann beginnt Zeile 8 mit Überschuß, Zeile 9 enthält die Header und Zeile 10 enthält die eingegebenen Werte. Zugegeben, das wird nicht immer der Fall sein, nur ein Beispiel.

Mein Hauptziel ist es, es so einzurichten. Jede Person hat ein speziell für sie erstelltes Arbeitsblatt. Dieses Formular wird täglich verwendet, so dass der Dateiname das Datum hat. Also wird das Formular jeden Tag geöffnet, und sobald der Submit-Button gedrückt wurde, möchte ich ein Arbeitsblatt für diese Person mit den Daten aus den 2 Tabellen erstellen lassen. Zum Beispiel ist Bill Smith heute der erste Eintrag. Nachdem die Informationen aus den 2 Tabellen eingegeben wurden, wähle ich den Submit Button. Innerhalb des Verzeichnisses befindet sich eine Excel-Datei mit der Bezeichnung data03/29/16.xls. In dieser Excel-Arbeitsmappe enthält ein Arbeitsblatt das Label/Tab Bill Smith.

Ist das überhaupt möglich ist, oder wäre es einfacher und effizienter sein, die Formulardaten in eine CSV-Datei zu schreiben?

Edit:

<!DOCTYPE HTML> 

<html> 

<head> 
<title> Drive Check In </title> 

<script type = "text/javascript"> 

function reset() 
{ 
    var driver = document.getElementById("drivers"); 
    var date = docuemt.getElementById("dates"); 
    var custnum = document.getElementById("customernum"); 
    var invnum = document.getElementById("invoicenum"); 
    var proddesc = document.getElementById("proddes"); 
    var sz = document.getElementById("size"); 
    var cs = document.getElementById("cs"); 
    var btls = document.getElementById("btls"); 
    var chkint = document.getElementById("chkitls"); 

    driver.value.reset(); 
    date.value.reset(); 
    custnum.value.reset(); 

} 

</script> 

</head> 

<body> 

<form action = '' method = "post"> 
<table id = "shortages" > 
<h1> Shortages </h1> 
<thead> 
<tr> 
    <th> Driver </th> 
    <th> Date </th> 
    <th> Customer# </th> 
    <th> Invoice# </th> 
    <th> Product Description </th> 
    <th> Size </th> 
    <th> CS </th> 
    <th> Btls </th> 
    <th> CHK Itls </th> 
</tr> 
</thead> 
<tr> 
    <td> 
    <select id = "drivers" name = 'drivers'> 
    <option value = " "> </option> 
    <option value = "Driver1"> Driver1 </option> 
    <option value = "Driver2"> Driver2 </option> 
    <option value = "Driver3"> Driver3 </option> 

    </select></td> 

    <td> <input type = "text" id = "dates"size = "10" name = "dates"> </input> </td> 
    <td> <input type = "number" min = "1" max = "99999999" id = "customernum" name = "customernum"> </input> </td> 
    <td> <input type = "number" min = "1" max = "99999999" id = "invoicenum" name = "invoicenum"> </input> </td> 
    <td> <input type = "text" id = "proddes" name = "proddes"> </input> </td> 
    <td> <input type = "number" id = "size" name = "size"> </input> </td> 
    <td> <input type = "number" id = "cs" name = "cs"> </input> </td> 
    <td> <input type = "number" id = "btls" name = "btls"> </input> </td> 
    <td> <input type = "text" id = "chkitls" name = "chkitls"> </input> </td> 
</tr> 

</table> 

<input type = "submit" value = "submit" name = "mydrivers> 

<?php 

function myfputcsv($handle, $array, $delimiter = ',', $enclosure = '"', $eol = "\n") { 
    $return = fputcsv($handle, $array, $delimiter, $enclosure); 
    if($return !== FALSE && "\n" != $eol && 0 === fseek($handle, -1, SEEK_CUR)) { 
     fwrite($handle, $eol); 
    } 
    return $return; 
} 

if(isset($_POST['mydrivers'])) { 
$header=array(); 
$data=array(); 
foreach (array_slice($_POST,0,count($_POST)-1) as $key => $value) {  
    //$header[]=$key; 
    $data[]=$value; 
} 
$fp = fopen('driver.csv', 'a+'); 
    //fputcsv($fp, $header); 
    myfputcsv($fp, $data); 
fclose($fp); 
} 

?> 
</form> 

</html> 

Dies ist die PHP-Datei, die ich bisher haben. Ich habe das verwendet, ohne Ihre Vorschläge umzusetzen, aber ich werde sie umsetzen.

Das ist mein Hauptausgang Ziel. Nachdem die cvs-Datei geöffnet und formatiert wurde, ist dies das Hauptziel.

Main output goal

Edit 2: nach dem Code der Umsetzung, ist dies die Ausgabe Ich erhalte. Output screen

+1

* Alles * möglich ist. –

+0

@JayBlanchard Vielen Dank. Ich denke, alles ist möglich, aber ich bin nicht vertraut mit den Möglichkeiten, dies zu erreichen –

+0

Wenn das der Fall ist, hätten Sie nicht nach der Möglichkeit fragen sollen, etwas zu tun, Sie hätten fragen sollen, wie. Aber selbst da wäre die Frage [zu weit für Stack Overflow] gewesen (http://stackoverflow.com/help/how-to-ask). ¯ \\ _ (ツ) _/¯ –

Antwort

0

Das erste, was Sie tun müssen, ist PHPEXCEL zu lernen. Der zweite und schnellerer Weg ist header() zu verwenden und Ihre erwartete Ausgabe in einer normalen HTML-Tabelle drucken: es

<?php 

$col1row = $_POST['col1row1'];//Getting data from form 

header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment; filename="16.xls"'); 
header('Pragma: no-cache'); 
header('Expires: 0'); 
/*Saving purpose 
**$output= @fopen('filename', 'w'); //error turn off 
**$output = fopen('php://output', 'w'); 
*/ 
//HTML table will go here 
    $table = '<table><tr>'; 
    $table .= '<th>Column 1</th>'; 
    $table .= '<th>Column 2</th>'; 
    $table .= '</tr>'; 
    $table .= '<tr>'; 
    $table .= '<td>'.$col1row1.'</td>'; 
    $table .= '<td>'.$col2row1.'</td>'; 
    $table .= '</tr>'; 
    $table .= '<tr>'; 
    $table .= '<td>'.$col1row2.'</td>'; 
    $table .= '<td>'.$col2row2.'</td>'; 
    $table .= '</tr>'; 
    $table .= '</table>'; 
    echo $table; 
?> 

Speichern Sie diesen Code als excelout.php und ausführen. Sie werden Ihren Tisch in Excel bekommen. Hoffe, das kann beim Start helfen.

Die CSV aktualisiert und Arbeitsversion:

function myfputcsv($handle, $array, $delimiter = ',', $enclosure = '"', $eol = "\n") { 
    $return = fputcsv($handle, $array, $delimiter, $enclosure); 
    if($return !== FALSE && "\n" != $eol && 0 === fseek($handle, -1, SEEK_CUR)) { 
     fwrite($handle, $eol); 
    } 
    return $return; 
} 
if(isset($_POST['mydrivers'])) { 
$header=array(); 
$data=array(); 
foreach (array_slice($_POST,0,count($_POST)-1) as $key => $value) {  
    //$header[]=$key; 
    $data[]=$value; 
} 
$fp = fopen('driver.csv', 'a+'); 
    //fputcsv($fp, $header); 
    myfputcsv($fp, $data); 
fclose($fp); 
} 

ich viel, was nicht mit folgenden Ausnahmen in dem Formular ändern:

<form action = 'driver.php' target = 'driver.php' method = "post"> 

zu

<form action="" method ="post"> 

und

<input type = "submit" value = "submit" onsubmit = "this.reset()"> 
012 mit array_filter()

zu

<input type="submit" value ="submit" name="mydrivers"> 

können Sie, wenn $ _POST überprüfen, ob leer oder nicht:

$valid= array_filter($_POST); 

if (!empty($valid)) { 
    //all fields are furnished and can be saved. 
} 

Demo

+0

Aus dem Aussehen der zweiten Header(), sobald Sie auf "Senden" drücken, wird es automatisch herunterladen die Datei korrekt? Wenn ja, müsste ich diesen Teil herausnehmen. Hauptsächlich weil ich zu verschiedenen Zeiten während des Tages Inputs eingeben werde. Was ich tun werde, ist es an einem bestimmten Ort zu speichern. Ich denke, dass ich das append-Attribut auch verwenden muss, da ich die Daten mehrfach schreibe –

+0

Ich habe meine Antwort aktualisiert. Prüfen Sie. –

+0

Vielen Dank für den Start. Ich hatte keine Zeit, daran zu arbeiten, aber ich werde damit herumspielen. Aber ich habe eine andere Frage, wo Sie '$ row = getRow ($ result) deklarieren; 'Was meinst du mit Daten aus der Datenbank? Ich habe keine DB erstellt und werde nicht mit einer DB arbeiten. Die Daten würden einfach direkt in Excel oder in einen CSV geschrieben und dann in Excel korrekt konvertiert werden. –

Verwandte Themen