Parse error
19 отговора
345 прегледа
Parse error
Здравейте
Как да се оправя с тоя бъг в PHP когато давам $x->file да не ми връща
parse error, unexpected T_OBJECT_OPERATOR, expecting ',' or ';'
Как да се оправя с тоя бъг в PHP когато давам $x->file да не ми връща
parse error, unexpected T_OBJECT_OPERATOR, expecting ',' or ';'
Re: Parse error
Трябваше да поясня.
Значи правя връзка към excel file и всичко върви добре докато не се опитам да изведа записите от файла в html - а с един цикъл и:
echo $selectedsheet->Cells($i,$x)->value;
Иначе останалото си минава без грешка например като правя избор на определен sheet $selectedsheet = $openworkfile->Worksheets($sheet);
Значи правя връзка към excel file и всичко върви добре докато не се опитам да изведа записите от файла в html - а с един цикъл и:
echo $selectedsheet->Cells($i,$x)->value;
Иначе останалото си минава без грешка например като правя избор на определен sheet $selectedsheet = $openworkfile->Worksheets($sheet);
Re: Parse error
А странното е че при мен локално върви наред аз съм с PHP Version 5.0.3
Re: Parse error
Here is a COM function that creates an excel spreadsheet with any number of worksheets, containing data from a matching number of SQL queries. Be ware of the upper limit of excel worksheets. This function properly shuts down Excel on the server.
/***************************/
function WriteExcel($strPath,$astrSheetName,$astrSQL){
/* This function takes a file save path, and array of sheet names and a corresponding array */
/* of SQL queries for each sheet and created a multi-worksheet excel spreadsheet*/
$C_NAME=__CLASS__."::".__FUNCTION__;
$dbs=new clsDB;
$exapp = new COM("Excel.Application") or Die ("Did not connect");
$intSheetCount=count($astrSheetName);
$wkb=$exapp->Workbooks->Add();
$exapp->Application->Visible = 1;
for ($int=0;$int<$intSheetCount;$int++){
$sheet=$wkb->Worksheets($int+1);
$sheet->activate;
$sheet->Name=$astrSheetName[$int];
$intRow=1;
$qrySQL=$dbs->GetQry($astrSQL[$int],$C_NAME,__LINE__);
$rstSQL=$qrySQL->fetchRow(DB_FETCHMODE_ASSOC);
$astrKeyNames=array_keys($rstSQL);
$intCols=count($astrKeyNames);
$qrySQL=$dbs->GetQry($astrSQL[$int],$C_NAME,__LINE__);
while($rstSQL=$qrySQL->fetchRow(DB_FETCHMODE_ASSOC)){
$strOut="";//initialize the output string
for ($int2=0;$int2<$intCols;$int2++){//we start at 1 because don't want to output the table's index
if($intRow==1){
$strOut=$astrKeyNames[$int2];
}else{
$strOut=$rstSQL[$astrKeyNames[$int2]];
}
$sheet->activate;
$cell=$sheet->Cells($intRow,($int2+1));//->activate;
$cell->Activate;
$cell->value = $strOut;
}//end of colcount for loop
$intRow++;
}//end while loop
}//end sheetcount for loop
if (file_exists($strPath)) {unlink($strPath);}
$wkb->SaveAs($strPath);
$wkb->Close(false);
unset($sheet);
$exapp->Workbooks->Close(false);
unset($wkb);
$exapp->Quit;
unset($exapp);
unset($dbs);
}//function WriteExcel
/***************************/
function WriteExcel($strPath,$astrSheetName,$astrSQL){
/* This function takes a file save path, and array of sheet names and a corresponding array */
/* of SQL queries for each sheet and created a multi-worksheet excel spreadsheet*/
$C_NAME=__CLASS__."::".__FUNCTION__;
$dbs=new clsDB;
$exapp = new COM("Excel.Application") or Die ("Did not connect");
$intSheetCount=count($astrSheetName);
$wkb=$exapp->Workbooks->Add();
$exapp->Application->Visible = 1;
for ($int=0;$int<$intSheetCount;$int++){
$sheet=$wkb->Worksheets($int+1);
$sheet->activate;
$sheet->Name=$astrSheetName[$int];
$intRow=1;
$qrySQL=$dbs->GetQry($astrSQL[$int],$C_NAME,__LINE__);
$rstSQL=$qrySQL->fetchRow(DB_FETCHMODE_ASSOC);
$astrKeyNames=array_keys($rstSQL);
$intCols=count($astrKeyNames);
$qrySQL=$dbs->GetQry($astrSQL[$int],$C_NAME,__LINE__);
while($rstSQL=$qrySQL->fetchRow(DB_FETCHMODE_ASSOC)){
$strOut="";//initialize the output string
for ($int2=0;$int2<$intCols;$int2++){//we start at 1 because don't want to output the table's index
if($intRow==1){
$strOut=$astrKeyNames[$int2];
}else{
$strOut=$rstSQL[$astrKeyNames[$int2]];
}
$sheet->activate;
$cell=$sheet->Cells($intRow,($int2+1));//->activate;
$cell->Activate;
$cell->value = $strOut;
}//end of colcount for loop
$intRow++;
}//end while loop
}//end sheetcount for loop
if (file_exists($strPath)) {unlink($strPath);}
$wkb->SaveAs($strPath);
$wkb->Close(false);
unset($sheet);
$exapp->Workbooks->Close(false);
unset($wkb);
$exapp->Quit;
unset($exapp);
unset($dbs);
}//function WriteExcel
Re: Parse error
А прочете ли за какво става въпрос?
А погледна ли датата?
А прочете ли коментарите отдолу?
Тогава - как "изходи", че е бъг? Parse error най-често сепоявява при грешки които се допускат при съставяне на кода - изядени символи, логическа недосмислица и т.н. и т.н. не бързай да търсиш бъгове в PHP, а си провери обстойно кода.
А погледна ли датата?
А прочете ли коментарите отдолу?
Тогава - как "изходи", че е бъг? Parse error най-често сепоявява при грешки които се допускат при съставяне на кода - изядени символи, логическа недосмислица и т.н. и т.н. не бързай да търсиш бъгове в PHP, а си провери обстойно кода.
Re: Parse error
Добре де хубаво ти си прав щом искаш ок.
Как обаче при мен работи а като го кача на хоста не върви. Което явно е доказателство че кода ми е наред.
Как обаче при мен работи а като го кача на хоста не върви. Което явно е доказателство че кода ми е наред.
Re: Parse error
А на хоста каква е версията?
И ще ни дадеш ли малко примерен код да видим за какво иде реч?
Everything louder than everything else...
И ще ни дадеш ли малко примерен код да видим за какво иде реч?
Everything louder than everything else...
Re: Parse error
На първия хост версията на PHP е 4.3.11 а на другия е 4.3.2 при мен е 5.0.3.
Ето и малко код:
$excel = new COM ("Excel.sheet") or die ("Did not connect");
$openworkfile = $excel->Application->Workbooks->Open ($excel_file)
or Die ("Did not open");
$selectedsheet = $openworkfile->Worksheets($sheet);
$allrows = $selectedsheet->UsedRange->Rows->Count;
$allcolumns = $selectedsheet->UsedRange->Columns->Count;
for ($i = 1; $i <= $allrows; $i++) {
for ($x = 1; $x <= $allcolumns; $x++) {
$returdata = $selectedsheet->Cells($i,$x)->value;
echo $returndata."\n";
}
}
Ето и малко код:
$excel = new COM ("Excel.sheet") or die ("Did not connect");
$openworkfile = $excel->Application->Workbooks->Open ($excel_file)
or Die ("Did not open");
$selectedsheet = $openworkfile->Worksheets($sheet);
$allrows = $selectedsheet->UsedRange->Rows->Count;
$allcolumns = $selectedsheet->UsedRange->Columns->Count;
for ($i = 1; $i <= $allrows; $i++) {
for ($x = 1; $x <= $allcolumns; $x++) {
$returdata = $selectedsheet->Cells($i,$x)->value;
echo $returndata."\n";
}
}
Re: Parse error
М/у другото за да ти работи перфектно връзката м/у Ексел и PHP трябва да бръкнеш в настройките на ODBC-то и да им дадеш максимум разрешен кеш за Excel driver-a. Иначе ще получаваш странни грешки от типа "с двайсе клетки може, но с 40 не може"
За да минимизираш употребата на кеша може също така да си помагаш с Activate():
$xl = COM("Excel.Application");
$wbs =$xl->Workbooks();
$wb = $wbs->Open("C:\.....");
$wb->Activate();
$ws = $wb->Worksheets(1);
$ws->Activate();
......
Освен това избягвай когато е възможно редове като този:
$selectedsheet->Cells($i,$x)->value();
Вместо това ги разбий на две:
$cell = $selectedsheet->Cells($i,$x);
$cellvalue = $cell->Value()
Тъпо и досадно е, но така ще ти дава най-малко бъгове. Ексела през COM е жива трагедия.
За да минимизираш употребата на кеша може също така да си помагаш с Activate():
$xl = COM("Excel.Application");
$wbs =$xl->Workbooks();
$wb = $wbs->Open("C:\.....");
$wb->Activate();
$ws = $wb->Worksheets(1);
$ws->Activate();
......
Освен това избягвай когато е възможно редове като този:
$selectedsheet->Cells($i,$x)->value();
Вместо това ги разбий на две:
$cell = $selectedsheet->Cells($i,$x);
$cellvalue = $cell->Value()
Тъпо и досадно е, но така ще ти дава най-малко бъгове. Ексела през COM е жива трагедия.
Re: Parse error
Смени $returdata = $selectedsheet->Cells($i,$x)->value; с
$dummy = $selectedsheet->Cells($i,$x);
$returdata = $dummy->value;
$dummy = $selectedsheet->Cells($i,$x);
$returdata = $dummy->value;
Re: Parse error
$allcolumns = $selectedsheet->UsedRange->Columns->Count;
Сигурен ли си, че това върви?
echo $allcolumns; какво ти връща?
Сигурен ли си, че това върви?
echo $allcolumns; какво ти връща?
Re: Parse error
Да това работи върви наред. Връща ми всички колони в които има въведено нещо
Re: Parse error
Много ти благодаря това за момента работи перфектно.
Можеш ли да ми обясниш причината при мен да работи както си беше по старо му а иначе не. Само с твоя пример работи на останалите хостове
Можеш ли да ми обясниш причината при мен да работи както си беше по старо му а иначе не. Само с твоя пример работи на останалите хостове
Re: Parse error
Е най - смешното е че сега пък на мойта машина не работи с промените които ме посъветва иначе на хостингите си е наред :)