2016-03-29 18 views
0

Bunun mümkün olup olmadığını bilmek istedim ve eğer öyleyse bir başlangıç ​​noktası alabilir miyim?xls dosyasına form verisi yaz

Şu anda bir html formu oluşturmayı ve verileri bir excel e-tablosuna POST yapmaya çalışıyorum. Form verilerini POST yapmak için PHP kullanacağım. Form 2 tablo olarak kurulacaktır. 2 tablo bir Shortage tablosu, diğeri de bir Overage tablosu olarak etiketlenir. İnsanların isimleriyle bir açılır menümüz var. Ne elde etmeye çalışıyorum veri bir excel elektronik tabloya yazmak ve eksiklik tablosundan değerleri ve çıkış tablosundan değerleri ayırmaktır. Örneğin, eksiklik tablosu 4 giriş içeriyorsa ve çıkış 2 girdiler içeriyorsa, excel e-tablosunda A1 hücresinin kapsamı belirtmesini istiyorum, 2. satır sütun başlıklarını (yani tarih, açıklama, boyut vb.) Içerecektir. .), ve sonra satır 8 başlangıç ​​kapalı Aşım var, satır 9 üstbilgileri olacak ve 10 satırda girilen değerleri içerecektir. Verilen her zaman böyle olmayacak, sadece bir örnek.

Başlıca amacım, bu şekilde ayarlanmış olmasıdır. Her bir kişi, özellikle onlar için oluşturulmuş bir çalışma sayfasına sahip olacaktır. Bu form günlük olarak kullanılacaktır, bu nedenle dosya adı o tarihte olacaktır. Böylece her gün form açılır ve gönder düğmesine basıldıktan sonra, 2 tablodan veriyi içeren kişi için oluşturulmuş bir çalışma sayfasının olmasını isterim. Örneğin, Bill Smith bugün ilk girdi. 2 tablodan bilgi girildi, ben gönder düğmesini seçiyorum. Dizinde, data03/29/16.xls etiketli bir excel dosyası vardır. Bu çalışma kitabında, bir çalışma sayfası etiket/sekme Bill Smith'i içerecektir.

Bu mümkün mü ya da form verilerini bir CSV dosyasına yazmak daha kolay ve verimli olabilir mi?

Düzenleme:

<!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> 

Bu defa var php dosyasıdır. Bunu önerilerinizi uygulamadan kullanıyordum, ama onları uygulayacağım.

Bu benim ana çıktı hedefim. Cvs dosyası açılıp biçimlendirildikten sonra, bu ana hedeftir.

Main output goal

Düzenleme 2: kodunuzu uyguladıktan sonra , bu şimdiye alıyorum çıkıştır. Output screen

+1

* Her şey * mümkündür. –

+0

@JayBlanchard Teşekkürler. Her şeyin mümkün olduğunu anladım, ancak bu başarılı olmanın yollarını bilmiyorum –

+0

Eğer böyle bir şey yapma ihtimaliniz olmasaydı, nasıl yapılacağını sormuş olmalısın. Ancak bu soru bile [Stack Overflow] için çok geniş olurdu (http://stackoverflow.com/help/how-to-ask). ¯ \\ _ (ツ) _/¯ –

cevap

0

Yapmanız gereken ilk şey, PHPEXCEL'u öğrenmektir.

<?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; 
?> 

kaydet excelout.php olarak bu kodu ve çalıştırın: İkinci ve daha hızlı bir yol header() kullanmak ve normal bir html tabloda beklenen çıktıyı yazdırmaktır. Masanızı Excel'de alacaksınız. Umarım bu başlangıç ​​için yardımcı olabilir.

CSV güncellenmiş ve çalışma versiyon:

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); 
} 

aşağıdaki haricinde şeklinde çok şey değişmez:

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

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

ve

için
<input type = "submit" value = "submit" onsubmit = "this.reset()"> 
012 Boş ya da olmasın) (array_filter kullanılıyorsa

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

için sen eğer $ _POST kontrol edebilirsiniz:

$valid= array_filter($_POST); 

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

Demo

+0

İkinci üstbilginin() görünümünden, gönderdikten hemen sonra, dosya otomatik olarak doğru indirilir mi? Eğer öyleyse, o kısmı çıkarmalıyım. Temel olarak, gün içinde farklı zamanlarda girdilere gireceğim. Yapacağım şey onu belirli bir yere kaydetmek. Ben de append özniteliğini kullanmak zorunda kalacağım çünkü veriyi birden çok kez yazacağım –

+0

Cevabımı güncelledim. Kontrol et. –

+0

Başlangıç ​​için çok teşekkür ederim. Bunun üzerinde çalışmak için zamanım olmadı, ama onunla oynayacağım. Ama başka bir sorum var, “$ row = getRow ($ result); Veriden veri almak ne demek istiyorsun? Oluşturulmuş bir DB'm yok ve bir DB ile çalışmayacak. Veriler doğrudan excel'e veya bir csv'ye yazılır ve daha sonra excel'e doğru şekilde dönüştürülür. –

İlgili konular