Hi
I still do not know why the USE statement in scriptcase does not work or if there is a way to use it and unfortunately I do not know it, but looking for a solution and spending many hours in Google, I found the way to make phpspreadsheet work for my purpose.
I leave the code in case anyone can use it as an idea. I am still modifying it so that it does everything I need, but just as it is, it creates and stores the xlsx file without problem.
I apologize for the Spanish texts in the code, but I hope this code is useful to someone.
$contenido="<?php
require ('../../../vendor/autoload.php');
use PhpOffice\PhpSpreadsheet\Helper\Sample;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;".'
require_once "../../../vendor/phpoffice/phpSpreadsheet/src/Bootstrap.php";
$helper = new Sample();
if ($helper->isCli()) {
$helper->log("C?digo para ejecutarse s?lo en un navegador Web" . PHP_EOL);
return;
}
// Create new Spreadsheet object
$spreadsheet = new Spreadsheet();
// Establecer propiedades del documento
$spreadsheet->getProperties()->setCreator("RM")
->setLastModifiedBy("RM")
->setTitle("Registro masivo")
->setSubject("Office 2007 XLSX")
->setDescription("Documento Office 2007 XLSX, generado usando RM.")
->setKeywords("office 2007 openxml php")
->setCategory("Test result file");
// Definir formatos
$spreadsheet->getDefaultStyle()
->getFont()
->setName("Arial")
->setSize(10);
$styleArray = [
"font" => [
"bold" => true,
"color" => ["argb" => "FFFFFF"],
"size" => 16,
],
"alignment" => [
"horizontal" => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT,
],
"borders" => [
"top" => [
"borderStyle" => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
],
],
"fill" => [
"fillType" => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_GRADIENT_LINEAR,
"rotation" => 90,
"startColor" => [
"argb" => "D52B1E",
],
"endColor" => [
"argb" => "D52B1E",
],
],
];
$styleArray2 = [
"borders" => [
"allBorders" => [
"borderStyle" => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
"color" => ["argb" => "000000"],
],
],
"fill" => [
"fillType" => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_GRADIENT_LINEAR,
"rotation" => 90,
"startColor" => [
"argb" => "ADAFAF",
],
"endColor" => [
"argb" => "ADAFAF",
],
],
];
$styleArray3 = [
"font" => [
"bold" => true,
"color" => ["argb" => "000000"],
"size" => 10,
],
"alignment" => [
"horizontal" => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_LEFT,
],
"borders" => [
"top" => [
"borderStyle" => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
],
],
"fill" => [
"fillType" => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_GRADIENT_LINEAR,
"rotation" => 90,
"startColor" => [
"argb" => "ADAFAF",
],
"endColor" => [
"argb" => "ADAFAF",
],
],
];
$spreadsheet->getActiveSheet()->getStyle("A1:G1")->applyFromArray($styleArray);
$spreadsheet->getActiveSheet()->getStyle("A2:G2")->applyFromArray($styleArray3);
$spreadsheet->getActiveSheet()->getStyle("A5:G5")->applyFromArray($styleArray2);
$spreadsheet->getActiveSheet()->getColumnDimension("B")->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension("C")->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension("D")->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension("E")->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension("F")->setAutoSize(true);
$spreadsheet->getActiveSheet()->getColumnDimension("G")->setAutoSize(true);
// Insertar fecha en formato Excel
$spreadsheet->getActiveSheet()->getStyle("A2")
->getNumberFormat()
->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_DDMMYYYY);
// Obtener fecha actual y hora
// Convertir a Excel date/time
$dateTime = time();
$excelDateValue = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($dateTime );
// Fijar la celda con el valor en formato date/time
$spreadsheet->setActiveSheetIndex(0)->setCellValue("A2",$excelDateValue);
// Crear encabezado de columnas
$spreadsheet->setActiveSheetIndex(0)
->setCellValue("A1", "Usuarios Registrados por proceso masivo")
->setCellValue("A5", "Pais")
->setCellValue("B5", "Gerencia")
->setCellValue("C5", "Nombre")
->setCellValue("D5", "Area")
->setCellValue("E5", "Nombre")
->setCellValue("F5", "Usuario")
->setCellValue("G5", "Nombre");
// Ejecutar consulta para leer todos los registros que cumplan con la condici?n buscada.
$serverName = "Your server"; //serverName\instanceName;
$connectionInfo = array( "Database"=>"Your database", "UID"=>"user", "PWD"=>"password");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
//echo "Conexi?n establecida.<br />";
}else{
//echo "Conexi?n no se pudo establecer.<br />";
die( print_r( sqlsrv_errors(), true));
}
$sql_string = "SELECT UMD.Pais, UMD.Gerencia, G.Nombre AS NGerencia, UMD.Area, A.Nombre, Usuario, lcname collate SQL_Latin1_General_CP1_CI_AS, UMD.Correlativo FROM UsuarioMasivoDetalle AS UMD INNER JOIN Gerencia AS G ON UMD.Gerencia = G.Gerencia AND UMD.Pais collate SQL_Latin1_General_CP1_CI_AS = G.Pais INNER JOIN AREA AS A ON UMD.Area = A.Area AND UMD.Gerencia = A.Gerencia AND UMD.Pais collate SQL_Latin1_General_CP1_CI_AS = A.Pais WHERE Procesado = 1 AND Rechazado = 0 AND Detalle IN '. $to_copy. '"'. ';
// Ejecutar la consulta
$stmt = sqlsrv_query( $conn, $sql_string);
if ( $stmt )
{
//echo "Comando ejecutado.
";
}
else
{
//echo "Error en la ejecuci?n.
";
die( print_r( sqlsrv_errors(), true));
}
$cell = 6;
// Iterar atrav?s del resultado para mover cada campo a la celda correspondiente
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_NUMERIC))
{
// Se utiliza mb_convert_encoding para convertir de UTF-8 a ISO-8859-1 a fin de que se muestren las tildes en el campo lcnombre
$spreadsheet->setActiveSheetIndex(0)
->setCellValue("A".$cell, $row[0])
->setCellValue("B".$cell, $row[1])
->setCellValue("C".$cell, mb_convert_encoding($row[2], "UTF-8", "ISO-8859-1"))
->setCellValue("D".$cell, $row[3])
->setCellValue("E".$cell, mb_convert_encoding($row[4], "UTF-8", "ISO-8859-1"))
->setCellValue("F".$cell, $row[5])
->setCellValue("G".$cell, mb_convert_encoding($row[6], "UTF-8", "ISO-8859-1"));
$cell++;
$filename= "Correlativo ".$row[7]. ".xlsx";
$path = $_SERVER["DOCUMENT_ROOT"]."/scriptcase/file/docCargaMasiva/".$filename;
}
sqlsrv_close( $conn);
// Renombrar hoja
$spreadsheet->getActiveSheet()->setTitle("Registro masivo");
// Fijar el ?ndice de la hoja a la primera hoja, as? Excel abre esta hoja al abrir el archivo
$spreadsheet->setActiveSheetIndex(0);
// Redireccionar la salia al cliente web browser (Xlsx). Estas lineas har?an que el archivo se descargue a la computadora del usuario.
//header("Content-Encoding: ISO-8859-1");
//header("Content-type: application/vnd.ms-excel; charset=ISO-8859-1");
//header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");'.'
//header("Content-Disposition: attachment; filename=$path");
//header("Cache-Control: max-age=0");
// Si se utiliza IE 9 esta linea es necesaria
header("Cache-Control: max-age=1");
// Si se usa IE sobre SSL, estas lineas son necesarias
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header("Cache-Control: cache, must-revalidate"); // HTTP/1.1
header("Pragma: public"); // HTTP/1.0
$writer = IOFactory::createWriter($spreadsheet, "Xlsx");
//$writer->save("php://output"); // Usar esta linea si se desea que el usuario descargue a su computadora, pero recuerde quitar de comentario las lineas header de arriba.
$writer->save($path);
// Liberar memoria
$spreadsheet->disconnectWorksheets();
unset($spreadsheet);?>';
//$ejecutar = "/usr/local/bin/php -f" . $_SERVER["DOCUMENT_ROOT"]."/scriptcase/file/docCargaMasiva/archivoxlsx.php";
$file = fopen("archivoxlsx.php", "a");
fwrite($file, $contenido);
fclose($file);
header ("Location: archivoxlsx.php");