我最近使用COM對象編寫了一個PHP腳本,用於將數據從Excel 2007電子表格中的單元格中去除到數組中。這一切都是在Office 2007的XP系統上本地完成的。一旦我啓用Apache服務器與桌面進行交互,腳本就像絕對的夢一樣工作,允許我通過PHP填充我的HTML與數組值。在Office 2010中使用PHP的COM對象(Excel.Application)
現在我們剛剛升級到Win 7的64位和Office 2010 32位 - 相同的腳本現在拋出我發出com_exception:
「Microsoft Excel不能訪問」的XML/xmlx文件(它的工作對兩先前)。 「有幾個可能的原因:
- 文件名或路徑不存在
- 文件正被另一個程序使用
- 您試圖保存工作簿具有相同的名稱作爲。目前開放的工作簿「......顯然。
我已禁用UAC還以爲那就是允許Apache以與桌面交互的罪魁禍首,當然還有,而是一個Excel進程甚至沒有嘗試啓動。我猜測Windows 7不允許腳本與Excel進行交互。還有其他腳本可以使用類(例如PHPExcel),但是我寧願避免編寫收件人代碼,另外我甚至不知道這些類是否適用於Excel 2010.
我該如何克服這種錯誤com_exception?
代碼:
<?php
error_reporting(E_ALL);
function getDataFromExcel($file, $sheet, $rows, $cols)
{
// COM CREATE
fwrite(STDOUT, "----------------------------------------\r\n");
$excel = new COM("Excel.Application") or die ("ERROR: Unable to instantaniate COM!\r\n");
$excel->Visible = true; // so that we see the window on screen
fwrite(STDOUT, "Application name: {$excel->Application->value}\r\n") ;
fwrite(STDOUT, "Loaded version: {$excel->Application->version}\r\n");
fwrite(STDOUT, "----------------------------------------\r\n\r\n");
// DATA RETRIEVAL
$Workbook = $excel->Workbooks->Open($file) or die("ERROR: Unable to open " . $file . "!\r\n");
$Worksheet = $Workbook->Worksheets($sheet);
$Worksheet->Activate;
$i = 0;
foreach ($rows as $row)
{
$i++; $j = 0;
foreach ($cols as $col)
{
$j++;
$cell = $Worksheet->Range($col . $row);
$cell->activate();
$matrix[$i][$j] = $cell->value;
}
}
// COM DESTROY
$Workbook->Close();
unset($Worksheet);
unset($Workbook);
$excel->Workbooks->Close();
$excel->Quit();
unset($excel);
return $matrix;
}
// define inputs
$xls_path = "D:\\xampp\\htdocs\\path_to_document\\test.xls"; // input file
$xls_sheet = 1; // sheet #1 from file
$xls_rows = range(3, 20, 1); // I want extract rows 3 - 20 from test.xls with 1 row stepping
$xls_cols = array("B", "D", "E", "G"); // I want to extract columns B, D, E and G from the file
// retrieve data from excel
$data = getDataFromExcel($xls_path, $xls_sheet, $xls_rows, $xls_cols);
?>
<html>
<pre>
<?php print_r ($data);?>
</pre>
</html>
一般來說,PHPExcel雖然不一定是解決方案,但可以讀/寫xlsx文件(無論是由Excel 2007還是由Excel 2010生成)。 – 2010-11-09 19:52:44