FAQ
Hola a tod@s,

Mi nombre es Pablo Siciliano, y escribo para presentarme luego de mucho
tiempo de no participar de la lista, y con la intencion de consultarlos
acerca de un problema puntual.

Escribi la clase que figura mas abajo en el mail, adonde en principio trato
de acceder a un excel via com object. Y el error que recibo es:

Source: Microsoft Office ExcelDescription: No se puede obtener acceso al
archivo 'C:\AppServ\www\credivico\test_excel.xlsx'. Puede haber varios
motivos:

• El nombre del archivo o la ruta no existen.
• Otro programa está usando el archivo.
• El libro que está intentando guardar tiene el mismo nombre que otro libro
que está abierto en estos momentos.#0
C:\AppServ\www\credivico\index.php(26): variant->Open('C:\\AppServ\www...')
#1 C:\AppServ\www\credivico\index.php(72):
ExcelViaCom->init('C:/AppServ/www/...')
#2 {main}You must init this object


Revise ya el path, probe reiniciando la maquina en la que corro esto como
para asegurarme que nadie mas tenga tomado el archivo y en principio el
codigo tiene los correspondientes false en los close como para asegurarme
de que se cierra sin grabar. Ademas, hice la prueba de no ejecutar el close
en una de las corridas y por otro lado el error aparece claramente en el
Open, por lo que en principio pareceria que puedo descartar que el libro se
este tratando de guardar con otro nombre.

Probe ademas darle permisos de todo a todos los usuarios y al propio excel
con el dcomcnfg.exe y no quiere saber nada ... Y aparentemente no pasa por
ahi, porque el error me esta diciendo que no tengo permisos para acceder al
xlsx, pero al objeto com obviamente llego. Google no me ha ayudado
demasiado esta vez.

Alguno tiene idea de que puede estar pasando? Necesito encarar por aca,
porque la idea es usar php como front end de varias calculadoras que mis
usuarios escriben en Excel y quiero que el mismo Excel sea el que las
resuelva. No es la intension solo parsear el excel, con lo cual no me sirve
grabarlo en otro formato, tomar las formulas con alguna biblioteca
especifica o soluciones similares.

Por si los orienta, estoy trabajando en Windows 7 + Apache 2.2 + PHP 6.

Saludos, y desde ya muchas gracias por su ayuda.


class ExcelViaCom
{
var $error="";
var $excel="";
var $path="";
var $Workbook;
var $Worksheet;
var $isOpen=false;

function init($path)
{
try
{
$this->path=$path;
$this->excel = new COM("Excel.Sheet");
if($this->error=="")
{


$this->path=str_replace(chr(47),'\\',$this->path);
$this->path=str_replace('C:\\','C:\\\\',$this->path);
$this->Workbook =
$this->excel->Application->Workbooks->Open($this->path);
}
$this->isOpen=true;
}
catch(Exception $e)
{
print "<br /><br />".$e->getMessage()."<br />";
print $e->getTraceAsString();
}
}

function getDatum($sheet,$strcell)
{
if(!$this->isOpen) return "You must init this object";
$Worksheet = $Workbook->Worksheets($sheet);
$Worksheet->Activate;
$cell=$Worksheet->Range($strcell);
$cell->Activate;
return $cell->value;
}

function close()
{
if(!$this->isOpen) return "";
$this->Workbook->Close(false);
unset($this->Worksheet);
unset($this->Workbook);
$this->excel->Application->Workbooks->Close(false);
$this->excel->Quit();
unset($this->excel);
$this->isOpen=false;
}
}

Search Discussions

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedJan 8, '12 at 5:13p
activeJan 8, '12 at 5:13p
posts1
users1
websitephp.net

1 user in discussion

Pablo Siciliano: 1 post

People

Translate

site design / logo © 2021 Grokbase