Foros del Web » Programando para Internet » PHP »

problema con COM y Word 2007

Estas en el tema de problema con COM y Word 2007 en el foro de PHP en Foros del Web. Hola, tengo que sustitur en un fichero word unos marcadores. tengo un codigo que funciona perfectamente en el servidor, donde esta instalado el office 2003 ...
  #1 (permalink)  
Antiguo 03/10/2011, 03:39
Avatar de navarone86  
Fecha de Ingreso: octubre-2009
Mensajes: 62
Antigüedad: 14 años, 6 meses
Puntos: 2
problema con COM y Word 2007

Hola,

tengo que sustitur en un fichero word unos marcadores. tengo un codigo que funciona perfectamente en el servidor, donde esta instalado el office 2003

al lanzarlo en mi equipo, donde tengo office 2007 me da el siguiente error:

Fatal error: Uncaught exception 'com_exception' with message '<b>Source:</b> Microsoft Word<br/><b>Description:</b> El comando no está disponible porque no hay ningún documento abierto.'

mi codigo es el siguiente:

Código PHP:
Ver original
  1. $template_file = $APPCONF_RutaInformes."/plantillas/a".$nombre_plantilla.".doc";
  2.    
  3.     //Comprobamos que el archivo exista y sea editable 
  4.     if(is_writable($template_file)){           
  5.         //2. Instanciate Word
  6.         $word = new COM("Word.Application") or die("Unable to instantiate Word");
  7.         $word->Documents->Open($template_file);
  8.         $word->Application->Visible = True;
  9.        
  10.         //Para cada equivalencia, buscamos su marcador y lo cambiamos
  11.         foreach ($equivalencias as $dato) {
  12.             //4. get the value
  13.              $value = $dato[1];
  14.              //5. get the bookmark and create a new MS Word Range (to enable text substitution)
  15.              $bookmarkname = $dato[0];
  16.              //Comprobamos que el marcador existe para hacer el reemplazo
  17.              if ($word->ActiveDocument->Bookmarks->Exists($bookmarkname)){
  18.                 $objBookmark = $word->ActiveDocument->Bookmarks($bookmarkname);
  19.                 $range = $objBookmark->Range;
  20.                 //6. now substitute the bookmark with actual value
  21.                 $range->Text = no_null($value);
  22.              }
  23.         }

y la aplicación me casca concretamente en la linea:

Código PHP:
Ver original
  1. if ($word->ActiveDocument->Bookmarks->Exists($bookmarkname)){

por la función "$word->Documents->Open($template_file);" pasa bien, pero parece que no abre el documento

sabeis si hay que hacer alguna otra cosa para trabajar con el word 2007??


un saludo y gracias

Última edición por navarone86; 03/10/2011 a las 04:12
  #2 (permalink)  
Antiguo 03/10/2011, 04:52
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: problema con COM y Word 2007

No he probado el ejemplo, pero ¿no se supone que la extension es docx para 2007 en adelante?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 03/10/2011, 07:42
Avatar de navarone86  
Fecha de Ingreso: octubre-2009
Mensajes: 62
Antigüedad: 14 años, 6 meses
Puntos: 2
Respuesta: problema con COM y Word 2007

.docx es la extension propia de office 2007, pero puede trabajar con otros formatos, incluido .doc, y en mi caso me surge este problema

tengo que editar un documento .doc (no me sirve .rtf), y tengo que poder hacerlo independientemente de la version office instalada en la maquina
  #4 (permalink)  
Antiguo 03/10/2011, 09:13
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: problema con COM y Word 2007

¿Qué tienes en $equivalencias? Estoy haciendo pruebas y no me ha dado problemas con conectarme, pero me da error con $equivalencias porque no la mencionas en ningun lado anteriormente en el código que brindaste.

Por ahora lo hice así y no sale error alguno
Código PHP:
Ver original
  1. <?php
  2. $template_file = realpath("Foobar.docx");
  3.  
  4. if(is_writable($template_file)){          
  5.     // Instanciate Word
  6.     $word = new COM("Word.Application") or die("Unable to instantiate Word");
  7.     $word->Documents->Open($template_file);
  8.     $word->Application->Visible = true;
  9.  
  10.     // Print the document.
  11.     $word->Printout();
  12.  
  13.     // closing word
  14.     $word->Quit();
  15.  
  16.     // free the object
  17.     $word->Release();
  18.     $word = null;
  19. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 03/10/2011 a las 09:35
  #5 (permalink)  
Antiguo 04/10/2011, 01:15
Avatar de navarone86  
Fecha de Ingreso: octubre-2009
Mensajes: 62
Antigüedad: 14 años, 6 meses
Puntos: 2
Respuesta: problema con COM y Word 2007

hola de nuevo,

$equivalencias es un array de arrays. en cada posición hay un array que contiene en la primera posición el nombre del marcador a sustituir, y el la segunda el valor (string) por el que se desea sustituir
  #6 (permalink)  
Antiguo 04/10/2011, 05:35
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: problema con COM y Word 2007

Podrias brindar el ejemplo pata asi tratarlo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 05/10/2011, 01:28
Avatar de navarone86  
Fecha de Ingreso: octubre-2009
Mensajes: 62
Antigüedad: 14 años, 6 meses
Puntos: 2
Busqueda Respuesta: problema con COM y Word 2007

hola de nuevo,

el codigo es el siguiente:

Código PHP:
Ver original
  1. $template_file = $APPCONF_RutaInformes."/plantillas/a".$nombre_plantilla.".doc";
  2.    
  3. //Comprobamos que el archivo exista y sea editable 
  4. if(is_writable($template_file)){           
  5.     //2. Instanciate Word
  6.     $word = new COM("Word.Application") or die("Unable to instantiate Word");
  7.     $word->Documents->Open($template_file);
  8.     $word->Application->Visible = True;
  9.        
  10.     //Para cada equivalencia, buscamos su marcador y lo cambiamos
  11.     foreach ($equivalencias as $dato) {
  12.         //4. get the value
  13.             $value = $dato[1];
  14.             //5. get the bookmark and create a new MS Word Range (to enable text substitution)
  15.             $bookmarkname = $dato[0];
  16.             //Comprobamos que el marcador existe para hacer el reemplazo
  17.             if ($word->ActiveDocument->Bookmarks->Exists($bookmarkname)){
  18.                 $objBookmark = $word->ActiveDocument->Bookmarks($bookmarkname);
  19.                     $range = $objBookmark->Range;
  20.                     //6. now substitute the bookmark with actual value
  21.                    $range->Text = no_null($value);
  22.             }
  23.         }
  24.        
  25.         //7. save the template as a new document
  26.         $pre= time();
  27.         $nombre_completo=$nombre_plantilla.$pre.".doc";
  28.     $new_file = $APPCONF_RutaInformes."/documentos/".$nombre_completo;
  29.     $word->Documents[1]->SaveAs($new_file);
  30.     $word->Application->Quit;  
  31.     $word = null;

y el contenido de $equivalencias es este:

Código PHP:
Ver original
  1. $equivalencias=array();
  2. $equivalencias[0][0]="mcd_nombre";
  3. $equivalencias[0][1]="fulanito";
  4. $equivalencias[1][0]="mcd_fecha";
  5. $equivalencias[1][1]="05/10/2011";

un saludo

Etiquetas: word
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 04:30.