2015-03-23 1 views
1

J'ai un problème avec PEAR et ce problème semble assez étrange.PHP PEAR tableur Excel Writer limite de données

Je génère une feuille de calcul avec PHP où je boucle plusieurs passages pour créer une table de dimensionnement. Tant que je n'utilise que peu de détails dans le tableau, le script sera exécuté, mais il semble y avoir une limite. Une fois au-dessus de ce nombre, j'obtiendrai un message d'erreur fatale.

C'est le code que je utilise pour le classeur:

require_once '../Spreadsheet/Excel/Writer.php';

 $workbook = new Spreadsheet_Excel_Writer('sizecharts/'.$file.'.xls'); 

     $worksheet =& $workbook->addWorksheet('NL Worksheet '.$itemname); 
     $workbook->setVersion(8); 

     $format_top =& $workbook->addFormat(); 
     $format_top->setAlign('top'); 
     $format_top->setTextWrap(1); 

     $format_center =& $workbook->addFormat(); 
     $format_center->setAlign('center'); 

     $format_heading1 =& $workbook->addFormat(); 
     $format_heading1->setAlign('center'); 
     $format_heading1->setBold(1); 
     $format_heading1->setSize(16); 

     $format_info =& $workbook->addFormat(); 
     $format_info->setAlign('center'); 
     $format_info->setBold(1); 
     $format_info->setSize(12); 

     $bold =& $workbook->addFormat(); 
     $bold->setBold(1); 

     $details =& $workbook->addFormat(); 
     $details->setBorder(1); 

     $details_header =& $workbook->addFormat(); 
     $details_header->setBold(1); 
     $details_header->setBorder(1); 

     $details_cell =& $workbook->addFormat(); 
     $details_cell->setBorder(1); 
     $details_cell->setAlign('center'); 

     $details_cell_header =& $workbook->addFormat(); 
     $details_cell_header->setBold(1); 
     $details_cell_header->setBorder(1); 
     $details_cell_header->setAlign('center'); 

     $details_num =& $workbook->addFormat(); 
     $details_num->setBold(1); 
     $details_num->setBorder(1); 
     $details_num->setAlign('right'); 


     $worksheet->setMerge(1,0,1,$size_count-1); 
     $worksheet->setMerge(3,0,3,$size_count-1); 
     $worksheet->setMerge(5,0,5,$size_count-1); 

     $worksheet->setInputEncoding('utf-8'); 
     $worksheet->write(1, 0, 'MYCOMPANY', $format_heading1); 
     $worksheet->write(3, 0, '耐斯德克服饰(上海)有限公司', $format_heading1); 
     $worksheet->write(5, 0, 'Measurements '.$itemname, $format_info); 

     $worksheet->setInputEncoding('ISO-8859-7'); 
     $worksheet->write(7, $size_count-2, 'File#:'); 
     $worksheet->write(7, $size_count-1, $file); 

     $worksheet->write(8, 0, 'Date:'); 
     $worksheet->write(8, 1, $date); 

     $worksheet->write(9, 0, 'Customer:'); 
     $worksheet->write(9, 1, $customer); 

     $worksheet->write(10, 0, 'Item Type:'); 
     $worksheet->write(10, 1, $type); 

     $worksheet->write(11, 0, 'Units:'); 
     $worksheet->write(11, 1, $unit); 

     $worksheet->setColumn(0,0,10); 
     $worksheet->setColumn(0,1,30); 

     $worksheet->write(13, 0, '#',$details_num); 
     $worksheet->write(13, 1, 'Details:',$details_header); 




     for($k=1;$k<($size_count-1);$k++){ 

      $size_collect_xls = $sizes_arr[$k]; 

      $worksheet->setInputEncoding('utf-8'); 
      $worksheet->write(13,$k+1, $size_collect_xls,$details_cell_header); 
      $worksheet->setInputEncoding('ISO-8859-7'); 

     } 


     for($i=0;$i<$count;$i++){ 

      if(isset($_POST['details'][$i])){ 

      $detail    = $_POST['details'][$i];  

      $worksheet->write(14+$i, 0, ($i+1).'.',$details_num); 
      $worksheet->write(14+$i, 1, $detail,$details); 

      $det_collect  = ""; 

         for($k=1;$k<($size_count-1);$k++){ 


          $key    = "det".$k; 

          $det_collect_val = $_POST[$key][$i]; 

          $worksheet->write(14+$i,$k+1, $det_collect_val,$details_cell); 

         } 


      } 

     }   


     // We still need to explicitly close the workbook 
     $workbook->close(); 
     ?> 

J'utilise ceci pour écrire le fichier.

Ce que je reçois plus tard est cette erreur message

<b>Fatal error</b>: Call to undefined method PEAR_Error::setInputEncoding() in <b>/home/MYCOMPANY/www/www/quotbot/sizechartinput.php</b> on line <b>740</b><br /> 

Ce qui fait référence à cette ligne de code:

$worksheet->setMerge(1,0,1,$size_count-1); 

Si j'échanger cette ligne avec laisse dire ceci:

$worksheet->setInputEncoding('utf-8'); 

Mon message d'erreur Message change à ceci:

<b>Fatal error</b>: Call to undefined method PEAR_Error::setInputEncoding() 

Dans ce cas, l'erreur signale un problème avec le codage au lieu de la cellule. Donc, cela signifie qu'il n'y a pas de problème avec la commande. C'est plus un problème avec la quantité de données dans la feuille de calcul générée.

Y a-t-il des restrictions quant à la quantité de données insérées dans la feuille de calcul Excel?

Répondre

2

Ce n'est pas apparenté.

La ligne

$worksheet =& $workbook->addWorksheet('NL Worksheet '.$itemname); 

peut soit retour "une référence à un objet de feuille de calcul en cas de succès, PEAR_Error en cas d'échec" (ref here). Le message d'erreur vous indique que vous appelez une méthode non définie sur PEAR_Error, ce qui signifie que votre appel a échoué.

Vous devez vérifier après cette ligne que addWorksheet a été réussie. Exemple simple tiré de la documentation:

// Make sure the worksheet name is less than 31 characters 
$worksheet =& $workbook->addWorksheet(substr('NL Worksheet '.$itemname, 0, 31)); 
if (PEAR::isError($worksheet)) { 
    die($worksheet->getMessage()); 
} 
+0

OK, affiche le message suivant: Sheetname *************** T-shirt doit être <= 31 caractères –

+0

Ensuite, cela signifie ce qu'il dit;) Le nom de la feuille de calcul est trop long. J'ai mis à jour ma réponse pour montrer ce que vous devez faire. –

+0

Je crains que le format de fichier BIFF MS Excel a cette petite limitation méchant de 31 caractères pour un nom de feuille de calcul –