<?php
$exapp = new COM("Excel.application") or Die ("Did not connect");
$wkb=$exapp->Workbooks->add();
$ex->Application->Visible = 1; 
$sheets = $wkb->Worksheets(1); //选择第一个sheet
$sheets->activate; //激活
$sheets->name="Report First page";//更名
//填充单元格
$maxi=20;
$m=1;
for ($i=1;$i<$maxi;$i++) {
for($n=1;$n<5;$n++){
$cell = $sheets->Cells($i,$n) ; #Select the cell (Row Column number) $cell->activate;
$cell->value = $m;
$m++;
}
}
//画图
$ch = $sheets->chartobjects->add(50, 40, 400, 100); #作图
$chartje = $ch->chart; 
$chartje->activate; 
$chartje->ChartType=63;
$selected = $sheets->range("E1:E$maxi");  
$chartje->setsourcedata($selected); 
//存盘
$file_name="D:/test.xls"; //路径
if (file_exists($file_name)) {@unlink($file_name) or die("文件已经存在,并无法删除!");}
$wkb->SaveAs($file_name); //save
$exapp->Quit();
unset($exapp);
echo "生成成功!";
?>

解决方案 »

  1.   

    vivanboy(被迫早起的鸟儿),你手头有没有这方面的资料呢,我急着用,可是到处都找不到,扔了帖子,也只有你来回答,谢谢你!真的!
      

  2.   

    我也没有相关资料。上面的还是来自php.net:
    http://www.php.net/manual/en/ref.com.php#上面只是新建exel并添加数据的例子可惜找不到修改已有的execl文件的资料
      

  3.   

    我是想往一个已经存在的excel文件里写数据啊,上面那段代码能实现吗?我看得不是很明白,你能解释一下吗?谢谢
      

  4.   

    修改excel文件我还不知道怎么坐
    抱歉
      

  5.   

    我看上面的代码如果要能运行的话只能在windows系统下, 但是我想我们更需要在linux下的办法啊。
    还有,一个怎么将Excel 数据倒入数据库比如mysql 或者是 postgresql 
    或者使用后台的shell脚本也行。因该分析excel 文档格式把
      

  6.   

    linux下面当然不行。必须要有office的支持。不然哪来COM("Excel.application")呢明天再研究
      

  7.   

    换一种思路:
    在本地更改 excel 文件,上传至服务器,导入数据库中
      

  8.   

    我找到一个类,就是下面这个
    <?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 <a href="http://www.fsf.org" target="_blank">www.fsf.org</a> 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 excel doc) $this->ex->Application->ActiveWorkbook->SaveAS($pathout.$newworkbook,$code); 
    return 1; 
    } 未完接下面
      

  9.   

    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 */ ?>
    可是我不知道怎么用,也不知道里面那些函数的作用,上面的几位大哥能帮我解释一下吗?