42 '\x{1FFFE}-\x{1FFFF}',
43 '\x{2FFFE}-\x{2FFFF}',
44 '\x{3FFFE}-\x{3FFFF}',
45 '\x{4FFFE}-\x{4FFFF}',
46 '\x{5FFFE}-\x{5FFFF}',
47 '\x{6FFFE}-\x{6FFFF}',
48 '\x{7FFFE}-\x{7FFFF}',
49 '\x{8FFFE}-\x{8FFFF}',
50 '\x{9FFFE}-\x{9FFFF}',
51 '\x{AFFFE}-\x{AFFFF}',
52 '\x{BFFFE}-\x{BFFFF}',
53 '\x{CFFFE}-\x{CFFFF}',
54 '\x{DFFFE}-\x{DFFFF}',
55 '\x{EFFFE}-\x{EFFFF}',
56 '\x{FFFFE}-\x{FFFFF}',
57 '\x{10FFFE}-\x{10FFFF}',
72 $this->
lng = $DIC->language();
74 $this->workbook =
new Spreadsheet();
75 $this->workbook->removeSheetByIndex(0);
87 $this->workbook = IOFactory::load($filename);
99 return [self::FORMAT_XML, self::FORMAT_BIFF];
108 $this->format = $a_format;
124 bool $a_activate =
true 128 $invalid = [
'*',
':',
'/',
'\\',
'?',
'[',
']',
'\'-
', '\
''];
130 $a_name = str_replace($invalid,
'', $a_name);
136 $sheet =
new Worksheet($this->workbook, $a_name);
137 $this->workbook->addSheet($sheet);
138 $new_index = $this->workbook->getSheetCount() - 1;
152 $this->workbook->setActiveSheetIndex($a_index);
161 return $this->workbook->getSheetCount();
170 return $this->workbook->getActiveSheet()->getTitle();
186 if (is_bool($value)) {
194 if (is_string($value)) {
208 case $a_value instanceof
ilDate:
224 return $a_value ? $lng->
txt(
'yes') : $lng->
txt(
'no');
229 bool $disable_strip_tags =
false 231 if (!mb_check_encoding($value,
'UTF-8')) {
236 $disable_strip_tags ? $value : strip_tags($value)
248 if ($a_value instanceof
ilDate) {
249 $a_cell->getStyle()->getNumberFormat()->setFormatCode(
'dd.mm.yyyy');
251 $a_cell->getStyle()->getNumberFormat()->setFormatCode(
'dd.mm.yyyy hh:mm:ss');
263 $wb = $this->workbook->getActiveSheet()->setCellValue(
267 $cell = $wb->getCell($a_coords);
269 } elseif (is_numeric($a_value)) {
270 $this->workbook->getActiveSheet()->setCellValueExplicit(
273 DataType::TYPE_NUMERIC
276 $this->workbook->getActiveSheet()->setCellValueExplicit(
279 DataType::TYPE_STRING
295 ?
string $datatype =
null,
296 bool $disable_strip_tags_for_strings =
false 300 if ($datatype === DataType::TYPE_STRING) {
301 $this->workbook->getActiveSheet()->setCellValueExplicit(
303 $this->
prepareString($value, $disable_strip_tags_for_strings),
306 } elseif ($datatype !==
null) {
307 $this->workbook->getActiveSheet()->setCellValueExplicit(
313 $wb = $this->workbook->getActiveSheet()->setCellValue(
318 } elseif (is_numeric($value)) {
319 $this->workbook->getActiveSheet()->setCellValueExplicit(
322 DataType::TYPE_NUMERIC
325 $this->workbook->getActiveSheet()->setCellValueExplicit(
328 DataType::TYPE_STRING
342 string $a_top_left =
'A1',
345 foreach ($a_values as $row_idx => $cols) {
346 if (is_array($cols)) {
347 foreach ($cols as $col_idx => $col_value) {
348 $a_values[$row_idx][$col_idx] = $this->
prepareValue($col_value);
355 $this->workbook->getActiveSheet()->fromArray($a_values, $a_null_value, $a_top_left);
368 return $this->workbook->getActiveSheet()->getCell($coordinate)->getValue();
376 return $this->workbook->getActiveSheet()->toArray();
384 return Coordinate::columnIndexFromString($this->workbook->getActiveSheet()->getHighestDataColumn());
393 return Coordinate::stringFromColumnIndex($col);
402 foreach ($this->workbook->getWorksheetIterator() as $worksheet) {
403 $this->workbook->setActiveSheetIndex($this->workbook->getIndex($worksheet));
404 $sheet = $this->workbook->getActiveSheet();
405 $cellIterator = $sheet->getRowIterator()->current()->getCellIterator();
406 $cellIterator->setIterateOnlyExistingCells(
true);
407 foreach ($cellIterator as $cell) {
408 $sheet->getColumnDimension($cell->getColumn())->setAutoSize(
true);
423 $this->workbook->setActiveSheetIndex(0);
425 switch ($this->format) {
426 case self::FORMAT_BIFF:
427 if (stripos($a_file_name,
'.xls') ===
false) {
428 $a_file_name .=
'.xls';
432 case self::FORMAT_XML:
433 if (stripos($a_file_name,
'.xlsx') ===
false) {
434 $a_file_name .=
'.xlsx';
449 switch ($this->format) {
450 case self::FORMAT_BIFF:
451 $a_mime_type = MimeType::APPLICATION__VND_MS_EXCEL;
454 case self::FORMAT_XML:
455 $a_mime_type = MimeType::APPLICATION__VND_OPENXMLFORMATS_OFFICEDOCUMENT_SPREADSHEETML_SHEET;
458 $a_mime_type = MimeType::APPLICATION__OCTET_STREAM;
463 $writer = IOFactory::createWriter($this->workbook, $this->format);
464 $writer->save($tmp_name);
478 $writer = IOFactory::createWriter($this->workbook, $this->format);
479 $writer->save($a_file);
487 $writer = IOFactory::createWriter($this->workbook, $this->format);
497 public function setBold(
string $a_coords): void
499 $this->workbook->getActiveSheet()->getStyle($a_coords)->getFont()->setBold(
true);
507 string $a_background,
508 ?
string $a_font =
null 512 'fillType' => Fill::FILL_SOLID,
513 'color' => [
'rgb' => $a_background]
519 'color' => [
'rgb' => $a_font]
523 $this->workbook->getActiveSheet()->getStyle($a_coords)->applyFromArray($opts);
532 bool $a_right =
false,
533 bool $a_bottom =
false,
536 $style = $this->workbook->getActiveSheet()->getStyle($a_coords);
540 $style->getBorders()->getTop()->setBorderStyle(Border::BORDER_THIN);
543 $style->getBorders()->getRight()->setBorderStyle(Border::BORDER_THIN);
546 $style->getBorders()->getBottom()->setBorderStyle(Border::BORDER_THIN);
549 $style->getBorders()->getLeft()->setBorderStyle(Border::BORDER_THIN);
561 $columnLetter = Coordinate::stringFromColumnIndex($col);
563 return $columnLetter . $pRow;
575 $this->workbook->getActiveSheet()->getCell($coordinate)->getHyperlink()->setUrl($a_path);
593 $this->workbook->getActiveSheet()->mergeCells($coordinatesRange);
598 return mb_ereg_replace(
'[' . implode(
'', $this->noncharacters) .
']',
'', $string);
get(int $a_format, string $a_format_str='', string $a_tz='')
get formatted date
prepareBooleanValue(bool $a_value)
prepareStorage(string $a_file_name)
Prepare workbook for storage/delivery.
getSheetAsArray()
Returns the active sheet as an array.
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
setDateFormat(Cell $a_cell, $a_value)
Set date format of cell.
getColumnCoord(int $a_col)
Get column "name" from number.
setBorders(string $a_coords, bool $a_top, bool $a_right=false, bool $a_bottom=false, bool $a_left=false)
Toggle cell(s) borders.
getColumnCount()
Returns the number of columns the sheet contains.
addLink(int $a_row, int $a_column, string $a_path)
cleanupNonCharachters(string $string)
setFormat(string $a_format)
Set file format.
setGlobalAutoSize()
Set all existing columns on all sheets to autosize.
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
prepareValue($value)
Prepare value for cell.
setColors(string $a_coords, string $a_background, ?string $a_font=null)
Set cell(s) colors.
setCell(int $a_row, int $col, $value, ?string $datatype=null, bool $disable_strip_tags_for_strings=false)
Set cell value.
setBold(string $a_coords)
Set cell(s) to bold.
static deliverFileAttached(string $path_to_file, ?string $download_file_name=null, ?string $mime_type=null, bool $delete_file=false)
getSheetTitle()
Return the current sheet title.
getCoordByColumnAndRow(int $pColumn=1, int $pRow=1)
Get cell coordinate (e.g.
getSheetCount()
Returns number of sheets.
writeToFile(string $a_file)
Save workbook to file.
addSheet(string $a_name, bool $a_activate=true)
Add sheet.
getCell(int $a_row, int $a_col)
Returns the value of a cell.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setCellByCoordinates($a_coords, $a_value)
Set cell value by coordinates.
columnIndexAdjustment(int $column)
Adjustment needed because of migration PHPExcel to PhpSpreadsheet.
static ilTempnam(?string $a_temp_path=null)
Returns a unique and non existing Path for e temporary file or directory.
setCellArray(array $a_values, string $a_top_left='A1', $a_null_value=null)
Set cell values from array.
mergeCells(string $coordinatesRange)
prepareDateValue(ilDateTime $a_value)
setActiveSheet(int $a_index)
static shortenTextExtended(string $a_str, int $a_len, bool $a_dots=false, bool $a_next_blank=false, bool $a_keep_extension=false)
loadFromFile(string $filename)
Loads a spreadsheet from file.
prepareString(string $value, bool $disable_strip_tags=false)
sendToClient(string $a_file_name)
Send workbook to client.