Mit Hilfe von PHP-COM-Objekt mit Office 2010 (Excel.Anwendung)

Ich vor kurzem codiert ein Skript in PHP über das COM-Objekt zu Streifen Daten aus Zellen in einer Excel 2007-Tabelle in ein array. Dies wurde alles getan, die lokal auf einem XP-system mit Office 2007. Nachdem ich aktiviert den Apache-server mit dem desktop interagieren die script funktionierte wie ein Traum, dass ich zum Auffüllen meiner HTML mit der array-Werte mittels PHP.

Jetzt haben wir nur ein Upgrade auf Win 7 x64 und Office 2010 32bit - Das gleiche Skript nun wirft mir einen COM_exception:

'Microsoft Excel kann keine access" die xml/xmlx Datei (es funktionierte für beide bisher). "Es gibt mehrere mögliche Gründe:

  • Der name der Datei oder Pfad nicht vorhanden ist.
  • Die Datei wird von einem anderen Programm verwendet.
  • Die Arbeitsmappe, die Sie zu speichern versuchen, hat denselben Namen wie aktuell geöffneten Arbeitsmappe"... anscheinend.

Ich habe die Benutzerkontensteuerung deaktiviert denken, dass der übeltäter war und natürlich durfte der Apache mit dem desktop interagieren, aber ein Excel-Prozess nicht einmal den Versuch zu starten. Ich vermute, Windows 7 ist nicht so dass das Skript für die Interaktion mit Excel überhaupt. Es gibt weitere Skripte zur Verfügung, mit Hilfe von Klassen (z.B. PHPExcel) allerdings würde ich eher vermeiden, schreiben Sie die Empfänger-code, plus ich weiß gar nicht, ob die Klassen, die funktionieren würde für Excel 2010.

Wie kann ich das umgehen com_exception?

Code:

<?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>
  • Wie eine Allgemeine Punkt, wenn auch nicht unbedingt eine Lösung, PHPExcel kann Lesen/schreiben von xlsx-Dateien (generiert, ob die von Excel 2007 oder Excel 2010).
InformationsquelleAutor Storsey | 2010-11-09
Schreibe einen Kommentar