PHP操作Excel(200分)

  • 主题发起人 主题发起人 T618
  • 开始时间 开始时间
T

T618

Unregistered / Unconfirmed
GUEST, unregistred user!
如何让PHP操作Excel,将Excel中的数据导入到mysql或sybase中???
 
建个ODBC连接到Excel,然后php连接到ODBC这个数据源,不就可以了吗.
 
怎么可能呀?
 
以前写PHP的时候在一个站点上看到过相关的类库!
我帮你再找找看!
 
<?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.
* alain@sonic.net
* 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;

/* Constructor */
function excel()
{
#Instantiate Excel
$this->ex = new COM("Excel.sheet") or Die ("Did not instantiate Excel");
return 1;
}

function XL($workbook,$pathin="",$sheet="sheet1")
{

if ($workbook != "")
{
#Load the workbook
$wkb = $this->ex->application->Workbooks->Open($pathin.$workbook) or Die ("Did not open $pathin $workbook");

}else
{
#New workbook
$wkb = $this->ex->application->Workbooks->Add or Die ("Unable to add a workbook");
}

if ($sheet != "")
{
#Activate the sheet
$sheets = $wkb->Worksheets($sheet) or Die ("Unable to activate $sheet");

}else
{
#new sheet
$sheet = "sheet1" ;

}
#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";
return 1;

}

function readrange($sheet="sheet1",$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="sheet1",$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
#print "cell:$cell";
$selcell = $sheets->Range($cell);
$selcell->activate;
#print "value:$value <BR>";
$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 exceldo
c)

$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 "wk4":
return 38;
break;

case "wq1":
return -4158;
#was 34
break;

case "dif":
return 9;
break;

case "xla":
return -4143;
break;

case "wk3":
return 32;#doesn't work anymore
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="sheet1",$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="sheet1")
{
#Calculate (update) the current sheet

$sheets = $this->ex->Application->Worksheets($sheet); #Select the sheet
$sheets->activate;
$sheets->Calculate;
return 1;

}

function writetoname($sheet,$name,$value)# Added on 9/12/00 7:19PM
{

#Will change the value of the cell called $name

$sheets = $this->ex->Application->Worksheets($sheet);
$selcell = $sheets->Range($name);
$selcell->activate;
@$selcell->value = $value;
#@: Some values produced variant not supported 9/13/00 2:49PM

}


function detectcode($sheet,$ext) # Added on 9/12/00 10:00PM
{

#To test the code for each file type.

print "<br>Format for $ext is: ".$this->ex->application->ActiveWorkbook->FileFormat;

}
/*
function search($wkb,$sheet,$range,$value) #Doesn't work9/29/00 1:00PM
{
$sheets = $this->ex->Application->Worksheets($sheet);
#$rangesel = $sheets->Range("A1");
$i=1;
print empty($rangesel->Find($value));
while ($i<2)
{
$rangesel = $sheets->Range("A$i:A$i");
if (empty($rangesel->Find($value)))
{
print "$gotit->row <BR>";
print "$gotit->column <BR>";
}else
{
print "Non object";
}

$i++;
}

return ;

}
*/
} /* end of Excel class */
?>
全部贴上来了!你自己看看吧!
 
老兄的名字(T618手机)我很喜欢[:D]
 
我今天才看见,首先谢谢你的关心,我正是买了T618之后才重新注册这个名称的
 
接受答案了.
 
后退
顶部