rafinos Δημοσ. 13 Ιουλίου 2014 Δημοσ. 13 Ιουλίου 2014 Με τον παρακάτω κώδικα ξέρω ότι δημιουργείτε αρχείο .csv και απλά το μετονομάζω σε .xls... Υπάρχει τρόπος να βγάζω κανονικό xls αρχείο ώστε να μην παίρνω το warning από το excel; *To να το μετονομάσω σε csv δε βοηθάει γιατί το αρχείο έχει δύο στήλε και δημιουργείται πρόβλημα <?php session_start(); header('Content-Type: text/html;charset=UTF-8'); if(isset($_SESSION['username'])){ $values = array(); $keys = array(); for($i=0; $i<count($_POST['values']); $i++){ $values[$i] = explode(',', $_POST['values'][$i]); $keys[$i] = explode(',', $_POST['keys'][$i]); $votes[] = array( $keys[$i][0] => (string)$values[$i][0], $keys[$i][1] => (int)$values[$i][1] ); } function cleanData(&$str) { $str = preg_replace("/\t/", "\\t", $str); $str = preg_replace("/\r?\n/", "\\n", $str); if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"'; } $filename = "votes_".date('Ymd').".xls"; header("Content-Disposition: attachment; filename=\"$filename\""); header("Content-Type: application/vnd.ms-excel"); $flag = false; foreach($votes as $row){ if(!$flag) { // display field/column names as first row echo implode("\t", array_keys($row)) . "\r\n"; $flag = true; } array_walk($row, 'cleanData'); echo implode("\t", array_values($row)) . "\r\n"; } exit; } ?>
mad-proffessor Δημοσ. 13 Ιουλίου 2014 Δημοσ. 13 Ιουλίου 2014 Υπάρχει έτοιμη άριστα γραμμένη oo βιβλιοθήκη που σου επιτρέπει να γράψεις/διαβάσεις σε/απο excel όλων των ειδών(MS Excel 2003/07,Open Calc,Libre κτλ) αρκει να διαβάσεις λίγο το documentation https://phpexcel.codeplex.com/
bikey77 Δημοσ. 13 Ιουλίου 2014 Δημοσ. 13 Ιουλίου 2014 Υπάρχει έτοιμη άριστα γραμμένη oo βιβλιοθήκη που σου επιτρέπει να γράψεις/διαβάσεις σε/απο excel όλων των ειδών(MS Excel 2003/07,Open Calc,Libre κτλ) αρκει να διαβάσεις λίγο το documentation https://phpexcel.codeplex.com/ Κι εγώ αυτή χρησιμοποιώ και είναι όντως πολύ καλή ωστόσο έχει ένα σχετικό βαθμό δυσκολίας αρχικά και νομίζω ότι για την αλλαγή που θέλει να πετύχει δεν αξίζει. Πάντως αξίζει κανείς να ρίξει μια ματιά, κάνει παπάδες.
rafinos Δημοσ. 13 Ιουλίου 2014 Μέλος Δημοσ. 13 Ιουλίου 2014 Την ξέρω την PHPExcel απλά όντως είναι κάτι τόσο απλό που και εγώ νομίζω ότι θέλει πολύ διάβασμα... κάτι πιο απλό δεν παίζει ε;
geomagas Δημοσ. 13 Ιουλίου 2014 Δημοσ. 13 Ιουλίου 2014 Η εναλλακτική (όπως πάντα) είναι "φτιάξτο μόνος σου".
rafinos Δημοσ. 14 Ιουλίου 2014 Μέλος Δημοσ. 14 Ιουλίου 2014 ΟΗ! Γίνεται τέτοιο πράγμα; Δεν το ξερα Μήπως και με αυτόν τον τρόπο θα βγάζει το warning;
geomagas Δημοσ. 14 Ιουλίου 2014 Δημοσ. 14 Ιουλίου 2014 Γιατί δεν το δοκιμάζεις; Κάνε copy/paste το παράδειγμα του link, αποθήκευσέ το σε ένα file.xls και άνοιξέ το με το Excel.
rafinos Δημοσ. 14 Ιουλίου 2014 Μέλος Δημοσ. 14 Ιουλίου 2014 Αυτό ακριβώς έκανα απλώς λέω... σίγουρα πρέπει να το κάνω έτσι για να το τεστάρω (έβγαλε warning)
geomagas Δημοσ. 14 Ιουλίου 2014 Δημοσ. 14 Ιουλίου 2014 Εμένα δεν μου έβγαλε (LibreOffice). Τέλος πάντων, ψάξε πχ και το xlsx. Όλα αυτά βασίζονται σε xml και θα μπορέσεις να τα μαστορέψεις.
rafinos Δημοσ. 15 Ιουλίου 2014 Μέλος Δημοσ. 15 Ιουλίου 2014 Παιδιά και με την phpexcel που δοκίμασα να το κάνω... πάλι μου εμφανίζει warning... μήπως τα έχει παίξει το excel μου; ΝΑΙ<---------- Μήπως φταίει το γεγονός ότι το παράδειμα που είχα ως οδηγό ήταν για xlsx και όχι για xls; <?php session_start(); header('Content-Type: text/html;charset=UTF-8'); if(isset($_SESSION['username'])){ if(isset($_POST['download'])){ $values = array(); $keys = array(); for($i=0; $i<count($_POST['values']); $i++){ $values[$i] = explode(',', $_POST['values'][$i]); $keys[$i] = explode(',', $_POST['keys'][$i]); $votes[] = array( $keys[$i][0] => (string)$values[$i][0], $keys[$i][1] => (int)$values[$i][1] ); } error_reporting(E_ALL); include 'phpexcel/PHPExcel.php'; $objPHPExcel = new PHPExcel(); $objPHPExcel->getProperties()->setCreator('TEST'); $objPHPExcel->getProperties()->setLastModifiedBy('TEST'); $objPHPExcel->getProperties()->setTitle('TEST'); $objPHPExcel->getProperties()->setSubject(''TEST); $objPHPExcel->setActiveSheetIndex(0); $flag = false; $count = 1; foreach($votes as $row){ if(!$flag){ $objPHPExcel->getActiveSheet()->SetCellValue('A'.$count, 'Τίτλος'); $objPHPExcel->getActiveSheet()->SetCellValue('B'.$count, 'Βαθμολογία'); $flag = true; $count++; } if($row['rate'] > 0){ $objPHPExcel->getActiveSheet()->SetCellValue('A'.$count, $row['title']); $objPHPExcel->getActiveSheet()->SetCellValue('B'.$count, $row['rate']); $count++; } } ------>ΛΆΘΟΣ $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); ------>ΣΩΣΤΌ $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save(str_replace('.php', '.xls', __FILE__)); exit; } }else{ header("location: index.php");
mad-proffessor Δημοσ. 15 Ιουλίου 2014 Δημοσ. 15 Ιουλίου 2014 Σου εμφανίζει warning και δε σώζεται σωστά; Tι λέει το warning? Και τι θες να κάνεις δηλ? Να τα αποθηκευεις τα excel τοπικά στο σερβερ και να τα διαβάζεις εσυ offline? Να ξέρεις πάντως οτι αυτός που το έγραψε απαντάει γενικά αν και νομίζω είναι μέσα στους windows azure devs τώρα οπότε μπορεί να μη το δεί.
rafinos Δημοσ. 15 Ιουλίου 2014 Μέλος Δημοσ. 15 Ιουλίου 2014 Αν παρατηρήσεις έχω με bold πρόταση και σε δύο γραμμές κώδικα γράφω "ΛΆΘΟΣ" και "ΣΩΣΤΟ" είχα κάνει εγώ λάθος επειδή πήρα έτοιμο τον κώδικα και ο κώδικας ήταν για xlsx ενώ εγώ ήθελα xls Πάντως σε έχασα λίγο σχετικά με αυτόν που το έγραψε
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα