Office 2010 (Excel.Application) ile PHP'nin COM nesnesi kullanarak

0 Cevap php

Geçenlerde bir diziye bir Excel 2007 elektronik tablodaki hücrelerin dışarı veri şerit COM nesnesi kullanarak PHP bir komut kodlanmış. Bu, tüm Office 2007 ile bir XP sistem üzerinde lokal yapıldı. Bana php aracılığıyla dizi değerleri ile benim HTML doldurmak için izin, komut mutlak bir rüya gibi çalıştı masaüstü ile etkileşim Apache sunucusunu etkin ediyorum kez.

Şimdi biz sadece 7 x64 ve Office 2010 32bit Win yükseltilmiş ettik - Aynı komut artık beni com_exception atar:

(Her ikisi daha önce çalıştı) xml / xmlx dosyası 'Microsoft Excel erişemiyor'. "Birkaç olası nedeni vardır: Dosya adı veya yolu • yok • dosya başka bir program tarafından kullanılıyor • kaydetmeye çalıştığınız çalışma kitabı açık bir çalışma kitabı ile aynı adı taşıyor.." Görünüşe göre ....

Ben Apache masaüstü ile etkileşimine izin suçlu ve tabii ki engelli UAC düşünme var, ama bir Excel süreç başlamak için bile denemez. Windows 7 komut tüm Excel ile etkileşim sağlayan değil tahmin ediyorum. Orada sınıfları (örneğin PHPExcel) kullanılarak mevcut diğer Komut ancak ben oldukça alıcı kod yazma önleyeceğini, artı sınıflar Excel 2010 için çalışmak istiyorsunuz eğer ben bile bilmiyorum.

Ben nasıl bu com_exception aşabiliriz? Herhangi bir görüş çok konu tam anlamıyla belgelenmiş değil, takdir edilir.

Kod:

<?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>

0 Cevap