Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/03/2005, 12:52
masterhades
 
Fecha de Ingreso: agosto-2004
Mensajes: 258
Antigüedad: 22 años, 1 mes
Puntos: 0
De acuerdo

esta es la clase, hum voy a revisar la FAQ, gracias

Código PHP:
Clase para crear y modificar un archivo Excel desde PHP

2002-03-22
1876 lecturas 

Esta clase de PHP permite crear, cargar, leer, escribir y grabar en libros y hojas de Microsoft Excel. 
 

<?php 
/* Class for use with PHP4 scripts only*/ 
/* 
* This is an Excel class to create,load,read,write,save and use some of the internal 
* functionalities of workbooks and sheets. 
* Tested with Windows 98 - MS Office 2000 
* Apache 1.3.9 PHP4.02 Running as CGI 
* (c) Alain M. Samoun 09/2000. 
* [email protected] 
* Gnu GPL code (see www.fsf.org for more information). 
*/ 

class Excel { 
/* variables */ 
var $ex; 
var 
$pathin; 
var 
$pathout; 
var 
$workbook; 
var 
$sheet; 
var 
$visible; 
var 
$fformatin; 
var 
$fformatout; 
var 
$cell; 
var 
$rangesens; 
var 
$range; 
var 
$ext; 
var 
$oext; 
var 
$error = 0; 
var 
$msg_error; 

/* Constructor */ 
function excel() 
{ 
#Instantiate Excel 
$this->ex = new COM("Excel.Application") or $this->error = 1; 
if (
$this->get_error()==0) 
return 
true; 
else 
return 
false; 
} 

function 
XL($workbook,$pathin="",$sheet="Hoja1") 
{ 
if (
$workbook != "") 
{ 
#Load the workbook 
$wkb = @$this->ex->application->Workbooks->Open($pathin.$workbook) or $this->error = 2; 
}else{ 
#New workbook 
$wkb = @$this->ex->application->Workbooks->Add or $this->error = 3; 
} 
if (
$this->error==0) 
if (
$sheet != "") 
{ 
#Activate the sheet 
$sheets = @$wkb->Worksheets($sheet) or $this->error = 4; 
}else{ 
#new sheet 
$sheet = "Hoja1" ; 
} 
#Excel Won't prompt the user when replacing or closing workbooks 
#Comment the line below if you want Excel to prompt 
// $this->ex->application->DisplayAlerts = "False"; 
if ($this->get_error()==0) 
return 
true; 
else 
return 
false; 
} 

function 
readrange($sheet="Hoja1",$range) 
{ 
#Read all the cells in the range to $result and return it 
unset ($result); 
$range = trim($range); 
#Determine start and end of range 
$tokstart = strtok($range,":"); 
$tokend = strtok(":"); 
if (
$tokend =="") 
{ 
#Read one single cell 
$sheets = $this->ex->Application->Worksheets($sheet); 
$sheets->activate; 
#Select the cell 
$selcell = $sheets->Range($range); 
$selcell->activate; 
return 
$selcell->value; 
} 
#Read a range of cells 
#determine column and row numbers 
$sheets = $this->ex->Application->Worksheets($sheet); 
$sheets->activate; 
$rgstart = $sheets->range($tokstart); 
$colstart = $rgstart->column; 
$rowstart = $rgstart->row; 
$rgend = $sheets->range($tokend); 
$colend = $rgend->column; 
$rowend = $rgend->row; 
if (
$colstart>$colend or $rowstart>$rowend) 
{ 
Print (
"Notation Error! Cell Column/Row should be increasing."); 
return; 
} 
#Now read each cell 
if ($colstart == $colend) 
{ 
#Read Vertically 
$j=0; 
For (
$i= $rowstart; $i<=$rowend; $i++) 
{ 
$selcell = $sheets->cells($i,$colstart); 
$selcell->activate; 
$result[$j] = $selcell->value; 
$j++; 
} 
}else 
{ 
#Read horizontally 
$j=0; 
For (
$i= $colstart; $i<=$colend; $i++) 
{ 
$selcell = $sheets->cells($rowstart,$i); 
$selcell->activate; 
$result[$j] = $selcell->value; 
$j++; 
} 
} 
return 
$result; 
} 
 
function 
writerange($sheet="Hoja1",$range,$value) 
{ 
#Fill up all the cells in the range with array 
$range = trim($range); 
#Determine start and end of range 
$tokstart = strtok($range,":"); 
$tokend = strtok(":"); 
if (
$tokend =="") 
{ 
# Write to a single cell in the active sheet 
$cell = trim($range); 
#Select the sheet 
$sheets = $this->ex->Application->Worksheets($sheet); 
$sheets->activate; 
#Select the cell 
$selcell = $sheets->Range($cell); 
$selcell->activate; 
$selcell->value = $value; 
return; 
} 
#determine column and row numbers 
$sheets = $this->ex->Application->Worksheets($sheet); 
$sheets->activate; 
$rgstart = $sheets->range($tokstart); 
$colstart = $rgstart->column; 
$rowstart = $rgstart->row; 
$rgend = $sheets->range($tokend); 
$colend = $rgend->column; 
$rowend = $rgend->row; 
if (
$colstart>$colend or $rowstart>$rowend) 
{ 
Print (
"Notation Error! Cell Column/Row should be increasing."); 
return; 
} 
#Now write each cell 
if ($colstart == $colend) 
{ 
#write Vertically 
$j=0; 
For (
$i= $rowstart; $i<=$rowend; $i++) 
{ 
$selcell = $sheets->cells($i,$colstart); 
$selcell->activate; 
$selcell->value = $value[$j]; 
$j++; 
} 
}else 
{ 
#Write horizontally 
$j=0; 
For (
$i= $colstart; $i<=$colend; $i++) 
{ 
$selcell = $sheets->cells($rowstart,$i); 
$selcell->activate; 
$selcell->value = $value[$j]; 
$j++; 
} 
} 
return 
1; 
} 
function 
saveas($workbook,$pathout,$ext) 
{ 

#First get the file format code for the extension $ext 
$code = $this->fileformater($ext); 
$basefile = strtok($workbook,"."); 
$newworkbook = $basefile."."."$ext"; 

#If no prompt and file exists it will be replaced. 

#Save the current workbook as new workbook 
#The following line will work for converting spreadsheets file to xls 
#but if the original is an excel file and the new file another format 
#then it may not work because limitations of excel.(See excel doc) 
$this->ex->Application->ActiveWorkbook->SaveAS($pathout.$newworkbook,$code); 

return 
1; 
} 
 
function 
fileformater($ext) 
{ 
switch(
strtolower($ext)) 
{ 
case 
"slk": 
return 
2; 
break; 
case 
"xlt": 
return -
4143; 
break; 
case 
"txt": 
return -
4158; 
break; 
case 
"csv": 
return 
6; 
break; 
case 
"xlw": 
return 
35; 
break; 
case 
"w4k": 
return 
38; 
break; 
case 
"wq1": 
return 
34; 
break; 
case 
"prn": 
return -
4158; 
break; 
case 
"dif": 
return 
9; 
break; 
case 
"xla": 
return -
4143; 
break; 
case 
"wk3": 
return 
32; 
break; 
case 
"xls": 
return -
4143; 
break; 
case 
"htm": 
return 
44; 
break; 
case 
"wks": 
return 
4; 
break; 
default: 
return -
4143; 

} 
} 
function 
XLTranslate($pathin,$pathout,$oext,$ext,$kill=0) 
{ 
#This function will translate automatically all spreadsheets files, with the 
#$oext extension, in the $pathin directory, to another spreadsheet file, 
#with the $ext extension, to the $pathout directory. 
#It will erase the original file if $kill switch = 1. 
#Limitations: Will work always when translating none excel files to 
#excel files(Extension=xl*) and with the translation xls->htm . It will 
#not generally work when translating excel files to other formats because 
#the questions asked by the excel program stop the script. 
#Get all files in the source directory $pathin to the $filelist array 
chdir($pathin); 
$dir=dir ("."); 
$i=1; 
while(
$file=$dir->read()) 
{ 
$filelist [$i] = $file; 
$i++; 
} 
$dir->close; 
#Translate each file, with the original extension $oext, in the $filelist 
#to the needed extension $ext. 
for ($i=1;$i<= sizeof($filelist); $i++) 
{ 
$file = $filelist[$i]; 
$basefile = strtok($file,"."); 
$extension = strtok("."); 

if (
strtolower($extension) == strtolower($oext)) 
{ 
echo 
"<BR> $file"; 
$this->XL($file,$pathin,$sheet=""); 
$this->saveas($file,$pathout,$ext,""); 
#Erase the original file if $kill=1 
if ($kill) 
{ 
chmod ($file,0777); 
unlink ($pathin.$file); 
} 
#Close the new workbook 
$this->closeXL(); 
} 
} 
return 
1; 
} 
 
function 
closexl() 
{ 
#Close active workbook without prompt from Excel 
$this->ex->application->ActiveWorkbook->Close("False"); 
return 
1; 
} 
function 
runfunction($funct,$arrayparam) 
{ 
#Run and return value of an excel function 
$params = implode(",",$arrayparam); 
eval (
"$result = $this->ex->application->$funct($params);"); 
return 
$result; 
} 
Function 
runmacro($workbook,$macroname) 
{ 
$this->ex->application->Run("$workbook!$macroname"); 
return 
1; 
} 
Function 
createhyperlink($sheet="Hoja1",$cell,$hyperl) 
{ 
#Not working as 9/2/00 4:57PM 
print "<br>link = $hyperl <br>"; 
$sheets = $this->ex->Application->Worksheets($sheet); 
$sheets->activate; 
#Select the cell 
$selcell = $sheets->Range($cell); 
$sheets->hyperlinks->add($selcell,$hyperl); 

return 
1; 
} 
function 
calculate($sheet="Hoja1") 
{ 
#Calculate (update) the current sheet 
$sheets = $this->ex->Application->Worksheets($sheet); #Select the sheet 
$sheets->activate; 
$sheets->Calculate; 
return 
1; 
} 

function 
get_error() 
{ 
return 
$this->error; 
} 

function 
set_error($id_error) 
{ 
$this->error = $id_error; 
} 

function 
get_msg_error($id_error) 
{ 
switch(
$id_error) 
{ 
// case 1: return "Did not instantiate Excel"; 
case 1: return "No se puede abrir el fichero Excel"; 
// case 2: return "Did not open $pathin $workbook"; 
case 2: return "No se puede abrir el fichero Excel seleccionado"; 
// case 3: return "Unable to add a workbook"; 
case 3: return "Unable to add a workbook"; 
// case 4: return "Unable to activate $sheet"; 
case 4: return "No se puede abrir el fichero Excel seleccionado"; 
} 
} 
} 
/* end of Excel class */ 
?>