PHPExcel opent excel niet
Ik heb via een tutorial een script gemaakt om gegevens uit de database te open in een excel bestand ,
Nu opent excel niet maar worden allerlei rare tekens weer gegeven op het pagina
Ziet iemand wat er fout zit ?
Alvast bedankt voor reactie
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
<?php
require_once("../src/PHPExcel.php");
include("config_transactions.php");
$number = $_POST['number'];
$date_from = $_POST['date_from'];
$date_till = $_POST['date_till'];
$connect_name = $_POST['select_connect_name'];
$bijschrijvingen = $_POST['bijschrijvingen'];
$afschrijvingen = $_POST['afschrijvingen'];
$opmerkingen = $_POST['opmerkingen'];
$tc = $_POST['tc'];
if($date_from !=""){
$date_from_sql = "$date_from";
}
else{
$date_from_sql = "1970-01-01";
}
if($date_till !=""){
$date_till_sql = "$date_till";
}
else{
$date_till_sql = "2099-01-01";
}
if($bijschrijvingen !=""){
$bijschrijvingen_sql = "AND trans_type = 'C' AND value='$bijschrijvingen'";
}
else{
$bijschrijvingen_sql = "";
}
if($connect_name !=""){
$connect_name_sql = "AND connect_name = '$connect_name'";
}
else{
$connect_name_sql = "";
}
if($afschrijvingen !=""){
$afschrijvingen_sql = "AND trans_type = 'D' AND value='$afschrijvingen'";
}
else{
$afschrijvingen_sql = "";
}
if($opmerkingen !=""){
$opmerkingen_sql = "AND (note1 = '$opmerkingen' OR note2 = '$opmerkingen')";
}
else{
$opmerkingen_sql = "";
}
if($tc !=""){
$tc_sql = "AND trans_code = '$tc'";
}
else{
$tc_sql = "";
}
$load_transactions = "SELECT
id,
date,
trans_type,
value,
connect_name,
trans_code,
note1,
note2 FROM transactions
WHERE number=$number
AND date BETWEEN '$date_from_sql' AND '$date_till_sql'
$connect_name_sql
$bijschrijvingen_sql
$afschrijvingen_sql
$opmerkingen_sql
$tc_sql ORDER BY date DESC";
$result = mysqli_query($connect, $load_transactions);
function getRow($result){
return $result->fetch_assoc();
}
try {
$sheet = new PHPExcel();
// Set metadata
$sheet->getProperties()->setCreator('www.example.com')
->setLastModifiedBy('www.example.com')
->setTitle('TransactieOverzicht')
->setKeywords('TransactieOverzicht');
// Set default settings
$sheet->getDefaultStyle()->getAlignment()->setVertical(
PHPExcel_Style_Alignment::VERTICAL_TOP);
$sheet->getDefaultStyle()->getAlignment()->setHorizontal(
PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$sheet->getDefaultStyle()->getFont()->setName('Lucida Sans Unicode');
$sheet->getDefaultStyle()->getFont()->setSize(12);
// Get reference to active spreadsheet in workbook
$sheet->setActiveSheetIndex(0);
$activeSheet = $sheet->getActiveSheet();
// Set print options
$activeSheet->getPageSetup()->setOrientation(
PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE)
->setFitToWidth(1)
->setFitToHeight(0);
$activeSheet->getHeaderFooter()->setOddHeader('&C&B&16' .
$sheet->getProperties()->getTitle())
->setOddFooter('&CPage &P of &N');
// Populate with data
$row = getRow($result);
$colHeaders = array_keys($row);
$col = 'A';
$rownum = 1;
// Set column headings
foreach ($colHeaders as $header) {
$activeSheet->setCellValue($col . $rownum, $header);
$activeSheet->getStyle($col . $rownum)->getFont()->setBold(true);
if ($col == 'G') {
$activeSheet->getColumnDimension($col)->setWidth(60);
} else {
$activeSheet->getColumnDimension($col)->setAutoSize(true);
}
$col++;
}
// Populate individual cells with data
do {
$col = 'A';
$rownum++;
foreach ($row as $value) {
$activeSheet->setCellValue($col++ . $rownum, $value);
}
} while ($row = getRow($result));
// Format individual columns
$activeSheet->getStyle('B2:B' . $rownum)->getAlignment()
->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
$activeSheet->getStyle('G2:G' . $rownum)->getAlignment()
->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT)
->setWrapText(true);
$activeSheet->getStyle('D2:D' . $rownum)->getNumberFormat()
->setFormatCode('#,##0');
$activeSheet->getStyle('F2:F' . $rownum)->getNumberFormat()
->setFormatCode('$#,##0.00');
// Give spreadsheet a title
$activeSheet->setTitle('Cars');
// Generate Excel file and download
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="cars.xlsx"');
header('Cache-Control: max-age=0');
$writer = PHPExcel_IOFactory::createWriter($sheet, 'Excel2007');
$writer->save('php://output');
exit;
} catch (Exception $e) {
$error = $e->getMessage();
}
?>
require_once("../src/PHPExcel.php");
include("config_transactions.php");
$number = $_POST['number'];
$date_from = $_POST['date_from'];
$date_till = $_POST['date_till'];
$connect_name = $_POST['select_connect_name'];
$bijschrijvingen = $_POST['bijschrijvingen'];
$afschrijvingen = $_POST['afschrijvingen'];
$opmerkingen = $_POST['opmerkingen'];
$tc = $_POST['tc'];
if($date_from !=""){
$date_from_sql = "$date_from";
}
else{
$date_from_sql = "1970-01-01";
}
if($date_till !=""){
$date_till_sql = "$date_till";
}
else{
$date_till_sql = "2099-01-01";
}
if($bijschrijvingen !=""){
$bijschrijvingen_sql = "AND trans_type = 'C' AND value='$bijschrijvingen'";
}
else{
$bijschrijvingen_sql = "";
}
if($connect_name !=""){
$connect_name_sql = "AND connect_name = '$connect_name'";
}
else{
$connect_name_sql = "";
}
if($afschrijvingen !=""){
$afschrijvingen_sql = "AND trans_type = 'D' AND value='$afschrijvingen'";
}
else{
$afschrijvingen_sql = "";
}
if($opmerkingen !=""){
$opmerkingen_sql = "AND (note1 = '$opmerkingen' OR note2 = '$opmerkingen')";
}
else{
$opmerkingen_sql = "";
}
if($tc !=""){
$tc_sql = "AND trans_code = '$tc'";
}
else{
$tc_sql = "";
}
$load_transactions = "SELECT
id,
date,
trans_type,
value,
connect_name,
trans_code,
note1,
note2 FROM transactions
WHERE number=$number
AND date BETWEEN '$date_from_sql' AND '$date_till_sql'
$connect_name_sql
$bijschrijvingen_sql
$afschrijvingen_sql
$opmerkingen_sql
$tc_sql ORDER BY date DESC";
$result = mysqli_query($connect, $load_transactions);
function getRow($result){
return $result->fetch_assoc();
}
try {
$sheet = new PHPExcel();
// Set metadata
$sheet->getProperties()->setCreator('www.example.com')
->setLastModifiedBy('www.example.com')
->setTitle('TransactieOverzicht')
->setKeywords('TransactieOverzicht');
// Set default settings
$sheet->getDefaultStyle()->getAlignment()->setVertical(
PHPExcel_Style_Alignment::VERTICAL_TOP);
$sheet->getDefaultStyle()->getAlignment()->setHorizontal(
PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$sheet->getDefaultStyle()->getFont()->setName('Lucida Sans Unicode');
$sheet->getDefaultStyle()->getFont()->setSize(12);
// Get reference to active spreadsheet in workbook
$sheet->setActiveSheetIndex(0);
$activeSheet = $sheet->getActiveSheet();
// Set print options
$activeSheet->getPageSetup()->setOrientation(
PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE)
->setFitToWidth(1)
->setFitToHeight(0);
$activeSheet->getHeaderFooter()->setOddHeader('&C&B&16' .
$sheet->getProperties()->getTitle())
->setOddFooter('&CPage &P of &N');
// Populate with data
$row = getRow($result);
$colHeaders = array_keys($row);
$col = 'A';
$rownum = 1;
// Set column headings
foreach ($colHeaders as $header) {
$activeSheet->setCellValue($col . $rownum, $header);
$activeSheet->getStyle($col . $rownum)->getFont()->setBold(true);
if ($col == 'G') {
$activeSheet->getColumnDimension($col)->setWidth(60);
} else {
$activeSheet->getColumnDimension($col)->setAutoSize(true);
}
$col++;
}
// Populate individual cells with data
do {
$col = 'A';
$rownum++;
foreach ($row as $value) {
$activeSheet->setCellValue($col++ . $rownum, $value);
}
} while ($row = getRow($result));
// Format individual columns
$activeSheet->getStyle('B2:B' . $rownum)->getAlignment()
->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
$activeSheet->getStyle('G2:G' . $rownum)->getAlignment()
->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT)
->setWrapText(true);
$activeSheet->getStyle('D2:D' . $rownum)->getNumberFormat()
->setFormatCode('#,##0');
$activeSheet->getStyle('F2:F' . $rownum)->getNumberFormat()
->setFormatCode('$#,##0.00');
// Give spreadsheet a title
$activeSheet->setTitle('Cars');
// Generate Excel file and download
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="cars.xlsx"');
header('Cache-Control: max-age=0');
$writer = PHPExcel_IOFactory::createWriter($sheet, 'Excel2007');
$writer->save('php://output');
exit;
} catch (Exception $e) {
$error = $e->getMessage();
}
?>
Het handigste is om regel 153, 154, 155 en regel 158 even te voorzien van twee slashes zodat het slechts commentaar wordt en dan deze pagina even rechtstreeks aanroepen vanuit de browser. Je krijgt dan in ieder geval foutmeldingen dat er $_POST variabelen niet bestaan. In bovenstaande code zou je daar ook rekening mee moeten houden :-)
Eventueel kun je in php gewoon even zelf een $_POST var aanmaken:
Dit is niet een nette oplossing maar om even te testen moet het wel kunnen.
Toevoeging op 07/10/2014 15:19:00:
Als je uiteindelijk weer een script hebt zonder foutmeldingen dan haal je de slashes weer weg
Toevoeging op 07/10/2014 15:23:45:
Voorbeeldje voor het opvangen van ontbrekende post vars:
Code (php)
Gewijzigd op 07/10/2014 15:19:47 door Frank Nietbelangrijk
Warning: array_keys() expects parameter 1 to be array, null
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php // Populate with data
$row = getRow($result);
$colHeaders = array_keys($row);
$col = 'A';
$rownum = 1;
?>
$row = getRow($result);
$colHeaders = array_keys($row);
$col = 'A';
$rownum = 1;
?>
Warning: Invalid argument supplied for foreach() in
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?phpforeach ($colHeaders as $header) {
$activeSheet->setCellValue($col . $rownum, $header);
$activeSheet->getStyle($col . $rownum)->getFont()->setBold(true);
if ($col == 'G') {
$activeSheet->getColumnDimension($col)->setWidth(60);
} else {
$activeSheet->getColumnDimension($col)->setAutoSize(true);
}
$col++;
}
?>
$activeSheet->setCellValue($col . $rownum, $header);
$activeSheet->getStyle($col . $rownum)->getFont()->setBold(true);
if ($col == 'G') {
$activeSheet->getColumnDimension($col)->setWidth(60);
} else {
$activeSheet->getColumnDimension($col)->setAutoSize(true);
}
$col++;
}
?>
) Warning: Invalid argument supplied for foreach() in
Code (php)
1
2
3
4
5
2
3
4
5
<?php
foreach ($row as $value) {
$activeSheet->setCellValue($col++ . $rownum, $value);
}
?>
foreach ($row as $value) {
$activeSheet->setCellValue($col++ . $rownum, $value);
}
?>
Jij gaat er op regel 112 gewoon vanuit dat er altijd een (nieuw) record uit de database komt. Maar ook 0 beschikbare records naar aanleiding van een query is heel goed mogelijk.
P.s. je moet je niet druk maken over de tweede of derde foutmelding. Die komt 99 van de 100 keer omdat er al eerder een fout optrad.
Gewijzigd op 07/10/2014 16:52:58 door Frank Nietbelangrijk
ik dacht dit misschien op te kunnen lossen door onderstaand
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$row = getRow($result);
if(!empty($row)){
$colHeaders = array_keys($row);
}
else{
$colHeaders = "unknown";
}
?>
$row = getRow($result);
if(!empty($row)){
$colHeaders = array_keys($row);
}
else{
$colHeaders = "unknown";
}
?>
maar nu krijg ik nog steeds de laatste 2 foutmeldingen en nog steeds die rare tekens
Echter heeft het denk ik niet zo veel zin om een excelsheet te produceren waar verder geen inhoud in staat behalve
25 keer 'Unknown'.
ah..
Ik zie dat je de mysqli_ functies zowel object georiënteerd als procedureel gebruikt. dat gaat denk ik niet werken en is wellicht de reden dat er geen records opgehaald worden.
verander de getRow functie naar het volgende:
Om toch nog even het verhaal 'wat te doen als er geen records gevonden worden' af te maken:
controleer van te voren of je wel minimaal één record hebt gekregen uit de database door:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
if(mysqli_num_rows($result) > 0)
{
// we hebben minimaal één record in $result klaarstaan, dus we kunnen een excelsheet gaan maken
}
if(mysqli_num_rows($result) > 0)
{
// we hebben minimaal één record in $result klaarstaan, dus we kunnen een excelsheet gaan maken
}
Gewijzigd op 07/10/2014 20:09:31 door Frank Nietbelangrijk
Bedankt voor de reacties ,
@ frank inderdaad wel even controle toegevoegd of er wel een record gevonden word