PHPExcel opent excel niet
Kan iemand mij helpen met onderstaande ,
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
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();
}
?>
Waarschijnlijk genereert php foutmeldingen waardoor je bestandsindeling in één keer verknalt wordt.
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:
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
krijg nu de volgende fout meldingen in php errorreport . enig idee wat deze betekenen?
Warning: array_keys() expects parameter 1 to be array, null
Warning: Invalid argument supplied for foreach() in
) Warning: Invalid argument supplied for foreach() in
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);
}
?>
Dat betekent dat $row geen array is maar FALSE. fetch_assoc() geeft namelijk FALSE terug wanneer er geen rij voorhanden is.
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.
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
Oke klinkt logisch
ik dacht dit misschien op te kunnen lossen door onderstaand
maar nu krijg ik nog steeds de laatste 2 foutmeldingen en nog steeds die rare tekens
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
array_keys geeft een array terug, dus dan zal het op zijn minst worden: $colheaders = array('Unknown')
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:
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
Inmiddels gevonden wat er fout ging , misschien een slordig foutje maar ik maakte het verzoek met een Ajax call . Dat blijkt dus niet te werken met phpexcel .
Bedankt voor de reacties ,
@ frank inderdaad wel even controle toegevoegd of er wel een record gevonden word
Bedankt voor de reacties ,
@ frank inderdaad wel even controle toegevoegd of er wel een record gevonden word




