Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Με τον παρακάτω κώδικα ξέρω ότι δημιουργείτε αρχείο .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; 
}
?>
Δημοσ.

Υπάρχει έτοιμη άριστα γραμμένη oo βιβλιοθήκη που σου επιτρέπει να γράψεις/διαβάσεις σε/απο excel όλων των ειδών(MS Excel 2003/07,Open Calc,Libre κτλ) αρκει να διαβάσεις λίγο το documentation 

https://phpexcel.codeplex.com/

 

Κι εγώ αυτή χρησιμοποιώ και είναι όντως πολύ καλή ωστόσο έχει ένα σχετικό βαθμό δυσκολίας αρχικά και νομίζω ότι για την αλλαγή που θέλει να πετύχει δεν αξίζει. Πάντως αξίζει κανείς να ρίξει μια ματιά, κάνει παπάδες.

Δημοσ.

Την ξέρω την PHPExcel απλά όντως είναι κάτι τόσο απλό που και εγώ νομίζω ότι θέλει πολύ διάβασμα... κάτι πιο απλό δεν παίζει ε;

Δημοσ.

Γιατί δεν το δοκιμάζεις; Κάνε copy/paste το παράδειγμα του link, αποθήκευσέ το σε ένα file.xls και άνοιξέ το με το Excel.

Δημοσ.

Εμένα δεν μου έβγαλε (LibreOffice).

Τέλος πάντων, ψάξε πχ και το xlsx. Όλα αυτά βασίζονται σε xml και θα μπορέσεις να τα μαστορέψεις.

Δημοσ.

Παιδιά και με την 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");

Δημοσ.

Σου εμφανίζει warning και δε σώζεται σωστά; Tι λέει το warning?

Και τι θες να κάνεις δηλ? Να τα αποθηκευεις τα excel τοπικά στο σερβερ και να τα διαβάζεις εσυ offline?

Να ξέρεις πάντως οτι αυτός που το έγραψε απαντάει γενικά αν και νομίζω είναι μέσα στους windows azure devs τώρα οπότε μπορεί να μη το δεί.

Δημοσ.

Αν παρατηρήσεις έχω με bold πρόταση και σε δύο γραμμές κώδικα γράφω "ΛΆΘΟΣ" και "ΣΩΣΤΟ" είχα κάνει εγώ λάθος επειδή πήρα έτοιμο τον κώδικα και ο κώδικας ήταν για xlsx ενώ εγώ ήθελα xls ;)

 

Πάντως σε έχασα λίγο σχετικά με αυτόν που το έγραψε :P

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...