diff --git a/CHANGE.md b/CHANGE.md index d3dbbe8..4030a2b 100755 --- a/CHANGE.md +++ b/CHANGE.md @@ -1,6 +1,11 @@ Change Log: `yii2-export` ========================= +## version 2.0.0 + +- (enh #357): *BC Breaking*: Use `openspout/openspout` rather than `PHPSpreadsheet` for XLSX and CSV exports +- (enh #378): Update `ExportWriterPdf::createExternalWriterInstance` declaration to be compatible with `PHPSpreadsheet` version 2 + ## version 1.4.3 **Date:** 25-Jul-2023 diff --git a/composer.json b/composer.json index eebce39..862f86c 100755 --- a/composer.json +++ b/composer.json @@ -27,9 +27,11 @@ } ], "require": { + "php": ">=8.1", "kartik-v/yii2-dynagrid": ">=1.5.5", "kartik-v/yii2-mpdf": ">=1.0", - "phpoffice/phpspreadsheet": ">=1.0" + "phpoffice/phpspreadsheet": ">=1.0", + "openspout/openspout": "^v4.25.0" }, "autoload": { "psr-4": { diff --git a/src/ExportColumnAsset.php b/src/ExportColumnAsset.php index 2eccf0c..58e7b8c 100644 --- a/src/ExportColumnAsset.php +++ b/src/ExportColumnAsset.php @@ -3,7 +3,7 @@ /** * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2015 - 2023 * @package yii2-export - * @version 1.4.3 + * @version 2.0.0 */ namespace kartik\export; diff --git a/src/ExportMenu.php b/src/ExportMenu.php index ec28f57..5e8bfb6 100644 --- a/src/ExportMenu.php +++ b/src/ExportMenu.php @@ -4,7 +4,7 @@ * @package yii2-export * @author Kartik Visweswaran * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2015 - 2023 - * @version 1.4.3 + * @version 2.0.0 */ namespace kartik\export; @@ -15,6 +15,27 @@ use kartik\dialog\Dialog; use kartik\dynagrid\Dynagrid; use kartik\grid\GridView; +use OpenSpout\Common\Entity\Cell as OpenspoutCell; +use OpenSpout\Common\Entity\Row; +use OpenSpout\Common\Entity\Style\Style; +use OpenSpout\Common\Exception\InvalidArgumentException; +use OpenSpout\Common\Exception\IOException; +use OpenSpout\Writer\AutoFilter; +use OpenSpout\Writer\Common\AbstractOptions; +use OpenSpout\Writer\Common\Entity\Sheet; +use OpenSpout\Writer\CSV\Options as OpenspoutCsvOptions; +use OpenSpout\Writer\CSV\Writer as OpenspoutCsvWriter; +use OpenSpout\Writer\Exception\Border\InvalidNameException; +use OpenSpout\Writer\Exception\Border\InvalidStyleException; +use OpenSpout\Writer\Exception\Border\InvalidWidthException; +use OpenSpout\Writer\Exception\InvalidSheetNameException; +use OpenSpout\Writer\Exception\WriterNotOpenedException; +use OpenSpout\Writer\ODS\Options as OpenspoutOdsOptions; +use OpenSpout\Writer\ODS\Writer as OpenspoutOdsWriter; +use OpenSpout\Writer\XLSX\Entity\SheetView; +use OpenSpout\Writer\XLSX\Options; +use OpenSpout\Writer\XLSX\Properties; +use OpenSpout\Writer\XLSX\Writer; use PhpOffice\PhpSpreadsheet\Cell\Cell; use PhpOffice\PhpSpreadsheet\Cell\DataValidation; use PhpOffice\PhpSpreadsheet\IOFactory; @@ -87,6 +108,18 @@ class ExportMenu extends GridView * @var string Microsoft Excel 2007+ export format */ const FORMAT_EXCEL_X = 'Xlsx'; + /** + * @var string OpenOffice document format + */ + const FORMAT_ODS = 'Ods'; + /** + * @var array Formats supported by PHPSpreadsheet. + */ + protected const PHPSPREADSHEET_FORMATS = [self::FORMAT_HTML, self::FORMAT_CSV, self::FORMAT_TEXT, self::FORMAT_PDF, self::FORMAT_EXCEL, self::FORMAT_EXCEL_X]; + /** + * @var array Formats supported by Openspout. + */ + protected const OPENSPOUT_FORMATS = [self::FORMAT_CSV, self::FORMAT_TEXT, self::FORMAT_EXCEL_X, self::FORMAT_ODS]; /** * @var string Set download target for grid export to a popup browser window */ @@ -385,6 +418,11 @@ class ExportMenu extends GridView */ public $autoWidth = true; + /** + * @var array The number of characters for each column - used to approximate an autoWidth for openspout + */ + protected $autoWidthColumns = []; + /** * @var string encoding for the downloaded file header. Defaults to [[ENCODING_UTF8]]. */ @@ -618,6 +656,19 @@ class ExportMenu extends GridView */ public $exportType = self::FORMAT_EXCEL_X; + /** + * @var bool whether to use the `openspout` backend rather than `PHPSpreadsheet` for the export. + * This option only applies for the formats `FORMAT_EXCEL_X`, `FORMAT_CSV` and `FORMAT_TEXT`, + * as other formats are only supported in either `openspout` or `PHPSpreadsheet`. + * + * Setting this to `true` will generally speed up those three exports and allow for larger export sizes, + * but will lose some styling options: + * + * - The option `$dataValidation` loses its effect. + * - The `onInit*` and `onRender*` callbacks are not called. + */ + public $useOpenspout = false; + /** * @var boolean flag to identify if download is triggered */ @@ -637,17 +688,32 @@ class ExportMenu extends GridView /** * @var Spreadsheet object instance */ - protected $_objSpreadsheet; + protected $_objSpreadsheet = null; /** * @var BaseWriter object instance */ - protected $_objWriter; + protected $_objWriter = null; /** * @var Worksheet object instance */ - protected $_objWorksheet; + protected $_objWorksheet = null; + + /** + * @var Writer|OpenspoutCsvWriter|OpenspoutOdsWriter object instance + */ + protected $_objOpenspoutWriter = null; + + /** + * @var Options|OpenspoutCsvOptions|OpenspoutOdsOptions object instance + */ + protected $_objOpenspoutOptions = null; + + /** + * @var Sheet object instance + */ + protected $_objOpenspoutSheet = null; /** * @var integer the header beginning row @@ -719,6 +785,23 @@ public static function slash($path, $s = DIRECTORY_SEPARATOR) return $path; } + /** + * Determine the target directory for this export. + * @param $config + * @return string + */ + public function getTargetDirectory($config) + { + $this->folder = trim(Yii::getAlias($this->folder)); + if (!file_exists($this->folder) && !mkdir($this->folder, 0777, true)) { + throw new InvalidConfigException( + "Invalid permissions to write to '{$this->folder}' as set in `ExportMenu::folder` property." + ); + } + $filename = static::sanitize($this->filename); + return self::slash($this->folder).$filename.'.'.$config['extension']; + } + /** * Returns an excel column name. * @@ -767,14 +850,27 @@ public function run() set_time_limit($this->timeout); } $config = ArrayHelper::getValue($this->exportConfig, $this->_exportType, []); - if (empty($config['writer'])) { - throw new InvalidConfigException( - "The 'writer' setting for '\PhpOffice\PhpSpreadsheet\Spreadsheet' must be setup in 'exportConfig'." - ); + $file = $this->getTargetDirectory($config); + if (!in_array($this->_exportType, self::PHPSPREADSHEET_FORMATS, true)) { + $this->useOpenspout = true; + } + if (!in_array($this->_exportType, self::OPENSPOUT_FORMATS, true)) { + $this->useOpenspout = false; + } + if ($this->useOpenspout) { + $this->initOpenspout(); + $this->_objOpenspoutWriter->openToFile($file); + $this->initOpenspoutSheetView(); + } else { + if (empty($config['writer'])) { + throw new InvalidConfigException( + "The 'writer' setting for '\PhpOffice\PhpSpreadsheet\Spreadsheet' must be setup in 'exportConfig'." + ); + } + $this->initPhpSpreadsheet(); + $this->initPhpSpreadsheetWriter($config['writer']); + $this->initPhpSpreadsheetWorksheet(); } - $this->initPhpSpreadsheet(); - $this->initPhpSpreadsheetWriter($config['writer']); - $this->initPhpSpreadsheetWorksheet(); $this->generateBeforeContent(); $this->generateHeader(); $this->generateBody(); @@ -788,29 +884,38 @@ public function run() if (!empty($this->supplementSheets)) { $this->createSupplementSheets(); } - $this->_objSpreadsheet->setActiveSheetIndex(0)->setTitle($this->sheetName); + if ($this->_objSpreadsheet !== null) { + $this->_objSpreadsheet->setActiveSheetIndex(0)->setTitle($this->sheetName); + } + if ($this->_objOpenspoutWriter !== null && $this->_objOpenspoutSheet !== null) { + $this->_objOpenspoutWriter->setCurrentSheet($this->_objOpenspoutSheet); + } $row = $this->generateFooter(); $this->generateAfterContent($row); - $writer = $this->_objWriter; - $sheet = $this->_objWorksheet; - if ($this->autoWidth) { - foreach ($this->getVisibleColumns() as $n => $column) { - $sheet->getColumnDimension(self::columnName($n + 1))->setAutoSize(true); + if ($this->_objWriter !== null) { + $writer = $this->_objWriter; + $sheet = $this->_objWorksheet; + if ($this->autoWidth) { + foreach ($this->getVisibleColumns() as $n => $column) { + $sheet->getColumnDimension(self::columnName($n + 1))->setAutoSize(true); + } } + $this->raiseEvent('onRenderSheet', [$sheet, $this]); + if ($this->stream) { + $this->clearOutputBuffers(); + } + $writer->save($file); + } + if ($this->_objOpenspoutWriter !== null){ + if ($this->autoWidth && ($this->_objOpenspoutOptions instanceof AbstractOptions)) { + foreach ($this->autoWidthColumns as $n => $width) { + // ODS and XLSX files scale widths differently, so use different scaling factor + $factor = $this->_exportType === self::FORMAT_ODS ? 6.0 : 1.2; + $this->_objOpenspoutOptions->setColumnWidth($width * $factor, $n); + } + } + $this->_objOpenspoutWriter->close(); } - $this->raiseEvent('onRenderSheet', [$sheet, $this]); - $this->folder = trim(Yii::getAlias($this->folder)); - if (!file_exists($this->folder) && !mkdir($this->folder, 0777, true)) { - throw new InvalidConfigException( - "Invalid permissions to write to '{$this->folder}' as set in `ExportMenu::folder` property." - ); - } - $filename = static::sanitize($this->filename); - $file = self::slash($this->folder).$filename.'.'.$config['extension']; - if ($this->stream) { - $this->clearOutputBuffers(); - } - $writer->save($file); if ($this->stream) { $this->setHttpHeaders(); $this->clearOutputBuffers(); @@ -897,25 +1002,37 @@ protected function initSettings() /** * Create supplement sheets, usually from dropDownList used by gridView. Needed for using dataValidation. * - * @throws \PhpOffice\PhpSpreadsheet\Exception + * @throws IOException + * @throws WriterNotOpenedException + * @throws InvalidSheetNameException */ public function createSupplementSheets() { - if ($this->_exportType != self::FORMAT_EXCEL && $this->_exportType != self::FORMAT_EXCEL_X) { + if (!in_array($this->_exportType, [self::FORMAT_EXCEL, self::FORMAT_EXCEL_X, self::FORMAT_ODS], true)) { return; } $sheetIndex = 1; foreach ($this->supplementSheets as $sheetName => $sheetData) { - // sheet index & name - $this->_objSpreadsheet->createSheet($sheetIndex); - $sheet = $this->_objSpreadsheet->setActiveSheetIndex($sheetIndex)->setTitle($sheetName); - $sheetIndex++; - // generate header - $sheet->setCellValue('A1', Yii::t('kvexport', 'Key'))->setCellValue('B1', Yii::t('kvexport', 'Value')); - // generate body - $index = 2; - foreach ($sheetData as $key => $value) { - $sheet->setCellValue('A'.$index, $key)->setCellValue('B'.$index++, $value); + if ($this->_objSpreadsheet !== null) { + // sheet index & name + $this->_objSpreadsheet->createSheet($sheetIndex); + $sheet = $this->_objSpreadsheet->setActiveSheetIndex($sheetIndex)->setTitle($sheetName); + $sheetIndex++; + // generate header + $sheet->setCellValue('A1', Yii::t('kvexport', 'Key'))->setCellValue('B1', Yii::t('kvexport', 'Value')); + // generate body + $index = 2; + foreach ($sheetData as $key => $value) { + $sheet->setCellValue('A' . $index, $key)->setCellValue('B' . $index++, $value); + } + } + if ($this->_objOpenspoutWriter !== null) { + $newSheet = $this->_objOpenspoutWriter->addNewSheetAndMakeItCurrent(); + $newSheet->setName($sheetName); + $this->_objOpenspoutWriter->addRow(Row::fromValues([OpenspoutCell::fromValue(Yii::t('kvexport', 'Key')), OpenspoutCell::fromValue(Yii::t('kvexport', 'Value'))])); + foreach ($sheetData as $key => $value) { + $this->_objOpenspoutWriter->addRow(Row::fromValues([$key, $value])); + } } } } @@ -933,6 +1050,9 @@ public function setDataValidation($sheetName, $cell, $length) if ($this->_exportType != self::FORMAT_EXCEL && $this->_exportType != self::FORMAT_EXCEL_X) { return; } + if ($this->_objSpreadsheet === null) { + return; + } $objValidation = $this->_objSpreadsheet->getActiveSheet()->getCell($cell)->getDataValidation(); $objValidation->setType(DataValidation::TYPE_LIST) ->setErrorStyle(DataValidation::STYLE_INFORMATION) @@ -1115,6 +1235,59 @@ public function renderColumnSelector() ); } + /** + * Initializes Openspout Object Instance + */ + public function initOpenspout() + { + if ($this->_exportType === self::FORMAT_EXCEL_X) { + $this->_objOpenspoutOptions = new Options(); + // Properties is only supported from openspout 4.28.0, but we need to support down to 4.26.0 for php8.1 support + if (class_exists('Properties')) { + $creator = $title = $subject = $category = $keywords = ''; + $description = Yii::t('kvexport', 'Grid export generated by Krajee ExportMenu widget (yii2-export)'); + $lastModifiedBy = 'krajee'; + extract($this->docProperties); + $properties = new Properties( + title : $title, + subject : $subject, + creator : $creator, + lastModifiedBy: $lastModifiedBy, + keywords : $keywords, + description : $description, + category : $category + ); + $this->_objOpenspoutOptions->setProperties($properties); + } + $this->_objOpenspoutWriter = new Writer($this->_objOpenspoutOptions); + } elseif ($this->_exportType === self::FORMAT_ODS) { + $this->_objOpenspoutOptions = new OpenspoutOdsOptions(); + $this->_objOpenspoutWriter = new OpenspoutOdsWriter($this->_objOpenspoutOptions); + } else { + $this->_objOpenspoutOptions = new OpenspoutCsvOptions(); + $this->_objOpenspoutOptions->FIELD_DELIMITER = $this->getSetting('delimiter', "\t"); + $this->_objOpenspoutWriter = new OpenspoutCsvWriter($this->_objOpenspoutOptions); + } + } + + /** + * Initialise the Openspout sheet view. + * @return void + * @throws InvalidArgumentException + * @throws WriterNotOpenedException + */ + public function initOpenspoutSheetView() + { + if (!in_array($this->_exportType, [self::FORMAT_EXCEL_X, self::FORMAT_ODS], true)) { + return; + } + $sheetView = new SheetView(); + // freeze header row + $sheetView->setFreezeRow(2 + count($this->contentBefore)); + $this->_objOpenspoutSheet = $this->_objOpenspoutWriter->getCurrentSheet(); + $this->_objOpenspoutSheet->setSheetView($sheetView); + } + /** * Initializes PhpSpreadsheet Object Instance */ @@ -1186,7 +1359,12 @@ public function initPhpSpreadsheetWorksheet() /** * Generates the before content at the top of the exported sheet - * @throws \PhpOffice\PhpSpreadsheet\Exception + * @throws IOException + * @throws InvalidArgumentException + * @throws InvalidNameException + * @throws InvalidStyleException + * @throws InvalidWidthException + * @throws WriterNotOpenedException */ public function generateBeforeContent() { @@ -1194,16 +1372,27 @@ public function generateBeforeContent() $sheet = $this->_objWorksheet; foreach ($this->contentBefore as $contentBefore) { $format = ArrayHelper::getValue($contentBefore, 'cellFormat'); - $this->setOutCellValue($sheet, $colFirst.$this->_beginRow, $contentBefore['value'], $format); $opts = $this->getStyleOpts($contentBefore); - $sheet->getStyle($colFirst.$this->_beginRow)->applyFromArray($opts); - $this->_beginRow += 1; + if ($sheet !== null) { + $this->setOutCellValue($sheet, $colFirst . $this->_beginRow, $contentBefore['value'], $format); + $sheet->getStyle($colFirst.$this->_beginRow)->applyFromArray($opts); + } + if ($this->_objOpenspoutWriter !== null) { + $cell = OpenspoutCell::fromValue($contentBefore['value'], OpenspoutHelper::createStyleFromPhpSpreadsheetOptions($opts)); + $this->_objOpenspoutWriter->addRow(new Row([$cell])); + } + $this->_beginRow++; } } /** * Generates the output data header content. - * @throws \PhpOffice\PhpSpreadsheet\Exception + * @throws IOException + * @throws InvalidArgumentException + * @throws WriterNotOpenedException + * @throws InvalidNameException + * @throws InvalidStyleException + * @throws InvalidWidthException */ public function generateHeader() { @@ -1216,32 +1405,49 @@ public function generateHeader() $colFirst = self::columnName(1); $this->_endCol = 0; - foreach ($this->getVisibleColumns() as $column) { + $openspoutCells = []; + foreach ($columns as $column) { $opts = $styleOpts; $this->_endCol++; /** * @var DataColumn $column */ $head = ($column instanceof DataColumn) ? $this->getColumnHeader($column) : $column->header; - $id = self::columnName($this->_endCol).$this->_beginRow; $format = ArrayHelper::remove($column->headerOptions, 'cellFormat'); - $cell = $this->setOutCellValue($sheet, $id, $head, $format); if (isset($column->hAlign) && !isset($opts['alignment']['horizontal'])) { $opts['alignment']['horizontal'] = $column->hAlign; } if (isset($column->vAlign) && !isset($opts['alignment']['vertical'])) { $opts['alignment']['vertical'] = $column->vAlign; } - // Apply formatting to header cell - $sheet->getStyle($id)->applyFromArray($opts); - $this->raiseEvent('onRenderHeaderCell', [$cell, $head, $this]); + if ($sheet !== null) { + $id = self::columnName($this->_endCol).$this->_beginRow; + $cell = $this->setOutCellValue($sheet, $id, $head, $format); + // Apply formatting to header cell + $sheet->getStyle($id)->applyFromArray($opts); + $this->raiseEvent('onRenderHeaderCell', [$cell, $head, $this]); + } + if ($this->_objOpenspoutWriter !== null) { + $style = OpenspoutHelper::createStyleFromPhpSpreadsheetOptions(array_replace_recursive($this->getBoxStyleArrayForCell($this->_endCol, true, false), $opts)); + if (!empty($format)) { + $style->setFormat($format); + } + $this->autoWidthColumns[$this->_endCol] = strlen((string)$head); + $openspoutCells[] = OpenspoutCell::fromValue($head, $style); + } + } + if ($this->_objOpenspoutWriter !== null) { + $this->_objOpenspoutWriter->addRow(new Row($openspoutCells)); } for ($i = $this->_headerBeginRow; $i < ($this->_beginRow); $i++) { - $sheet->mergeCells($colFirst.$i.':'.self::columnName($this->_endCol).$i); + $this->mergeCells($sheet, 1, $i, $this->_endCol, $i); } - // Freeze the top row - $sheet->freezePane($colFirst.($this->_beginRow + 1)); + if ($sheet !== null) { + // Freeze the top row + $sheet->freezePane($colFirst . ($this->_beginRow + 1)); + // this was done ahead of time for openspout, so no call needed here + } } /** @@ -1327,7 +1533,12 @@ public function getColumnHeader($col) * Generates the output data body content. * * @return integer the number of output rows. - * @throws \PhpOffice\PhpSpreadsheet\Exception + * @throws IOException + * @throws InvalidArgumentException + * @throws InvalidNameException + * @throws InvalidStyleException + * @throws InvalidWidthException + * @throws WriterNotOpenedException */ public function generateBody() { @@ -1335,43 +1546,63 @@ public function generateBody() $columns = $this->getVisibleColumns(); $models = array_values($this->_provider->getModels()); if (count($columns) == 0) { - $cell = $this->setOutCellValue($this->_objWorksheet, 'A1', $this->emptyText); - $model = reset($models); - $this->raiseEvent('onRenderDataCell', [$cell, $this->emptyText, $model, null, 0, $this]); + if ($this->_objWorksheet !== null) { + $cell = $this->setOutCellValue($this->_objWorksheet, 'A1', $this->emptyText); + $model = reset($models); + $this->raiseEvent('onRenderDataCell', [$cell, $this->emptyText, $model, null, 0, $this]); + } + if ($this->_objOpenspoutWriter !== null) { + $this->_objOpenspoutWriter->addRow(Row::fromValues([$this->emptyText])); + } return 0; } // do not execute multiple COUNT(*) queries $totalCount = $this->_provider->getTotalCount(); + // we need to keep track of the current row to know when we've arrived at the last row + $currentRow = 1; $this->findGroupedColumn(); while (count($models) > 0) { $keys = $this->_provider->getKeys(); - if ($this->_provider instanceof ArrayDataProvider) { - $models = array_values($models); - } foreach ($models as $index => $model) { $key = $keys[$index]; - $this->generateRow($model, $key, $this->_endRow); - $this->_endRow++; - if ($index === $totalCount) { + $isLastRow = $currentRow === $totalCount; + if ($isLastRow) { //a little hack to generate last grouped footer - $this->checkGroupedRow($model, $models[0], $key, $this->_endRow); + $this->checkGroupedRow($model, $models[0], $key, $this->_endRow + 1); } elseif (isset($models[$index + 1])) { - $this->checkGroupedRow($model, $models[$index + 1], $key, $this->_endRow); + $this->checkGroupedRow($model, $models[$index + 1], $key, $this->_endRow + 1); } + $this->generateRow($model, $key, $this->_endRow, $isLastRow && $this->_groupedRow === null); + $this->_endRow++; if (!is_null($this->_groupedRow)) { $this->_endRow++; - $this->_objWorksheet->fromArray($this->_groupedRow, null, 'A'.($this->_endRow + 1), true); - $cell = 'A'.($this->_endRow + 1).':'.self::columnName(count($columns)).($this->_endRow + 1); - $this->_objWorksheet->getStyle($cell)->applyFromArray($this->groupedRowStyle); + if ($this->_objWorksheet !== null) { + $this->_objWorksheet->fromArray($this->_groupedRow, null, 'A' . ($this->_endRow + 1), true); + $cell = 'A' . ($this->_endRow + 1) . ':' . self::columnName(count($columns)) . ($this->_endRow + 1); + $this->_objWorksheet->getStyle($cell)->applyFromArray($this->groupedRowStyle); + } + if ($this->_objOpenspoutWriter !== null) { + $cells = array_map(function ($value, $idx) use ($isLastRow) { + $groupedRowStyle = OpenspoutHelper::createStyleFromPhpSpreadsheetOptions( + array_replace_recursive( + $this->getBoxStyleArrayForCell($idx + 1, false, $isLastRow), + $this->groupedRowStyle + ) + ); + return OpenspoutCell::fromValue($value, $groupedRowStyle); + }, $this->_groupedRow, array_keys($this->_groupedRow)); + $this->_objOpenspoutWriter->addRow(new Row($cells)); + } $this->_groupedRow = null; } + $currentRow++; } if ($this->_provider->pagination) { $this->_provider->pagination->page++; $this->_provider->refresh(); $this->_provider->setTotalCount($totalCount); - $models = $this->_provider->getModels(); + $models = array_values($this->_provider->getModels()); } else { $models = []; } @@ -1384,17 +1615,24 @@ public function generateBody() /** * Generates an output data row with the given data model and key. * - * @param mixed $model the data model to be rendered - * @param mixed $key the key associated with the data model - * @param integer $index the zero-based index of the data model among the model array returned by [[dataProvider]]. - * @throws \PhpOffice\PhpSpreadsheet\Exception - */ - public function generateRow($model, $key, $index) + * @param mixed $model the data model to be rendered + * @param mixed $key the key associated with the data model + * @param integer $index the zero-based index of the data model among the model array returned by [[dataProvider]]. + * @param bool $isLastRow Whether this is the last row in the table. + * @throws IOException + * @throws InvalidArgumentException + * @throws InvalidNameException + * @throws InvalidStyleException + * @throws InvalidWidthException + * @throws WriterNotOpenedException + */ + public function generateRow($model, $key, $index, $isLastRow = false) { /** * @var Column $column */ $this->_endCol = 0; + $openspoutCells = []; foreach ($this->getVisibleColumns() as $column) { $format = $this->enableFormatter && isset($column->format) ? $column->format : 'raw'; $value = null; @@ -1429,16 +1667,33 @@ public function generateRow($model, $key, $index) $format = null; } - $cell = $this->setOutCellValue( - $this->_objWorksheet, - self::columnName($this->_endCol).($index + $this->_beginRow + 1), - $value, - $format - ); - if ($this->enableAutoFormat && $format === null) { - $this->autoFormat($model, $key, $index, $column, $cell); + if ($this->_objWorksheet !== null) { + $cell = $this->setOutCellValue( + $this->_objWorksheet, + self::columnName($this->_endCol).($index + $this->_beginRow + 1), + $value, + $format + ); + if ($this->enableAutoFormat && $format === null) { + $this->autoFormat($model, $key, $index, $column, $cell); + } + $this->raiseEvent('onRenderDataCell', [$cell, $value, $model, $key, $index, $this]); + } + if ($this->_objOpenspoutWriter !== null) { + $opts = $this->getBoxStyleArrayForCell($this->_endCol, false, $isLastRow); + if ($format === null && $this->enableAutoFormat) { + $opts = array_replace_recursive($opts, $this->getAutoFormattedOpts($model, $key, $index, $column)); + } + $style = OpenspoutHelper::createStyleFromPhpSpreadsheetOptions($opts); + if ($format !== null) { + $style->setFormat($format); + } + $this->autoWidthColumns[$this->_endCol] = max(strlen($value), $this->autoWidthColumns[$this->_endCol]); + $openspoutCells[] = OpenspoutCell::fromValue($value, $style); } - $this->raiseEvent('onRenderDataCell', [$cell, $value, $model, $key, $index, $this]); + } + if ($this->_objOpenspoutWriter !== null) { + $this->_objOpenspoutWriter->addRow(new Row($openspoutCells)); } } @@ -1446,7 +1701,8 @@ public function generateRow($model, $key, $index) * Generates the output footer row after a specific row number * * @return integer the row number after which the footer is to be generated - * @throws \PhpOffice\PhpSpreadsheet\Exception + * @throws IOException + * @throws WriterNotOpenedException */ public function generateFooter() { @@ -1457,23 +1713,37 @@ public function generateFooter() return 0; } $this->_endCol = 0; + $openspoutCells = []; foreach ($this->getVisibleColumns() as $column) { - $this->_endCol = $this->_endCol + 1; + $this->_endCol++; if ($column->footer) { $footerExists = true; $footer = trim($column->footer) !== '' ? $column->footer : $column->grid->blankDisplay; $format = ArrayHelper::remove($column->footerOptions, 'cellFormat'); - $cell = $this->setOutCellValue( - $this->_objSpreadsheet->getActiveSheet(), - self::columnName($this->_endCol).($row + 1), - $footer, - $format - ); - $this->raiseEvent('onRenderFooterCell', [$cell, $footer, $this]); + if ($this->_objSpreadsheet !== null) { + $cell = $this->setOutCellValue( + $this->_objSpreadsheet->getActiveSheet(), + self::columnName($this->_endCol) . ($row + 1), + $footer, + $format + ); + $this->raiseEvent('onRenderFooterCell', [$cell, $footer, $this]); + } + if ($this->_objOpenspoutWriter !== null) { + $style = new Style(); + $style->setFormat($format); + $this->autoWidthColumns[$this->_endCol] = max(strlen($footer), $this->autoWidthColumns[$this->_endCol]); + $openspoutCells[] = OpenspoutCell::fromValue($footer, $style); + } + } elseif ($this->_objOpenspoutWriter !== null) { + $openspoutCells[] = OpenspoutCell::fromValue(''); } } if ($footerExists) { $row++; + if ($this->_objOpenspoutWriter !== null) { + $this->_objOpenspoutWriter->addRow(new Row($openspoutCells)); + } } return $row; @@ -1482,8 +1752,13 @@ public function generateFooter() /** * Generates the after content at the bottom of the exported sheet * - * @param integer $row the row number after which the content is to be generated - * @throws \PhpOffice\PhpSpreadsheet\Exception + * @param integer $row the row number after which the content is to be generated + * @throws IOException + * @throws InvalidArgumentException + * @throws InvalidNameException + * @throws InvalidStyleException + * @throws InvalidWidthException + * @throws WriterNotOpenedException */ public function generateAfterContent($row) { @@ -1493,13 +1768,19 @@ public function generateAfterContent($row) $sheet = $this->_objWorksheet; foreach ($this->contentAfter as $contentAfter) { $format = ArrayHelper::getValue($contentAfter, 'cellFormat'); - $this->setOutCellValue($sheet, $colFirst.$row, $contentAfter['value'], $format); $opts = $this->getStyleOpts($contentAfter); - $sheet->getStyle($colFirst.$row)->applyFromArray($opts); + if ($sheet !== null) { + $this->setOutCellValue($sheet, $colFirst . $row, $contentAfter['value'], $format); + $sheet->getStyle($colFirst . $row)->applyFromArray($opts); + } + if ($this->_objOpenspoutWriter !== null) { + $cell = OpenspoutCell::fromValue($contentAfter['value'], OpenspoutHelper::createStyleFromPhpSpreadsheetOptions($opts)); + $this->_objOpenspoutWriter->addRow(new Row([$cell])); + } $row += 1; } for ($i = $afterContentBeginRow; $i < $row; $i++) { - $sheet->mergeCells($colFirst.$i.':'.self::columnName($this->_endCol).$i); + $this->mergeCells($sheet, 1, $i, $this->_endCol, $i); } } @@ -1627,29 +1908,59 @@ protected function setDefaultStyles($section) self::FORMAT_PDF => $defaultStyle, self::FORMAT_EXCEL => $defaultStyle, self::FORMAT_EXCEL_X => $defaultStyle, + self::FORMAT_ODS => $defaultStyle, ]; $this->$opts = array_replace_recursive($defaultStyleOptions, $this->$opts); } /** - * Generates the box + * Generates the box. + * + * Box styles for openspout are created on the fly, so for openspout, this just sets the AutoFilter. */ protected function generateBox() { - // Set autofilter on - $from = self::columnName(1).$this->_beginRow; - $to = self::columnName($this->_endCol).($this->_endRow + $this->_beginRow); - $box = "{$from}:{$to}"; - $this->_objWorksheet->setAutoFilter($box); - if (isset($this->boxStyleOptions[$this->_exportType])) { - $this->_objWorksheet->getStyle($box)->applyFromArray($this->boxStyleOptions[$this->_exportType]); + if ($this->_objWorksheet !== null) { + // Set autofilter on + $from = self::columnName(1) . $this->_beginRow; + $to = self::columnName($this->_endCol) . ($this->_endRow + $this->_beginRow); + $box = "{$from}:{$to}"; + $this->_objWorksheet->setAutoFilter($box); + if (isset($this->boxStyleOptions[$this->_exportType])) { + $this->_objWorksheet->getStyle($box)->applyFromArray($this->boxStyleOptions[$this->_exportType]); + } + + if (isset($this->headerStyleOptions[$this->_exportType])) { + $to = self::columnName($this->_endCol) . $this->_beginRow; + $box = "{$from}:{$to}"; + $this->_objWorksheet->getStyle($box)->applyFromArray($this->headerStyleOptions[$this->_exportType]); + } } + if ($this->_objOpenspoutSheet !== null) { + $autoFilter = new AutoFilter(0, $this->_beginRow, $this->_endCol - 1, $this->_endRow + $this->_beginRow); + $this->_objOpenspoutSheet->setAutoFilter($autoFilter); + } + } - if (isset($this->headerStyleOptions[$this->_exportType])) { - $to = self::columnName($this->_endCol).$this->_beginRow; - $box = "{$from}:{$to}"; - $this->_objWorksheet->getStyle($box)->applyFromArray($this->headerStyleOptions[$this->_exportType]); + /** + * @param int $col + * @param bool $isHeader + * @param bool $isLastRow + * @return array the style array. + */ + protected function getBoxStyleArrayForCell(int $col, bool $isHeader, bool $isLastRow): array + { + if (!isset($this->boxStyleOptions[$this->_exportType]) && (!$isHeader || !isset($this->headerStyleOptions[$this->_exportType]))) { + return []; + } + $opts = $this->boxStyleOptions[$this->_exportType] ?? []; + OpenspoutHelper::setInsideAndOutlineBorders($opts, $isHeader, $isLastRow, $col === 1, $col === count($this->getVisibleColumns())); + if ($isHeader && isset($this->headerStyleOptions[$this->_exportType])) { + unset($opts['borders']['inside'], $opts['borders']['outline']); + $opts = array_replace_recursive($opts, $this->headerStyleOptions[$this->_exportType]); + OpenspoutHelper::setInsideAndOutlineBorders($opts, true, true, $col === 1, $col === count($this->getVisibleColumns())); } + return $opts; } /** @@ -1666,6 +1977,21 @@ protected function autoFormat($model, $key, $index, $column, $cell) { $ord = $cell->getCoordinate(); $style = $this->_objWorksheet->getStyle($ord); + $opts = $this->getAutoFormattedOpts($model, $key, $index, $column); + $style->applyFromArray($opts); + } + + /** + * Autoformats a cell by auto detecting the grid column alignment and format + * + * @param mixed $model the data model to be rendered + * @param mixed $key the key associated with the data model + * @param integer $index the zero-based index of the data model among the model array returned by [[dataProvider]]. + * @param Column $column + * @return array|mixed + */ + protected function getAutoFormattedOpts($model, $key, $index, $column) + { $opts = ArrayHelper::getValue($this->styleOptions, $this->_exportType, []); if (isset($column->exportMenuStyle)) { $opts = $column->exportMenuStyle; @@ -1691,7 +2017,7 @@ protected function autoFormat($model, $key, $index, $column, $cell) $code = ArrayHelper::getValue($fmt, 1, $this->formatter->currencyCode).' '; } $decimals = ArrayHelper::getValue($fmt, 1, ($f === 'percent' ? 0 : 2)); - $d = intval($decimals); + $d = (int)$decimals; $code .= '#'.$this->formatter->thousandSeparator.'##0'; if ($d > 0) { $code .= $this->formatter->decimalSeparator.str_repeat('0', $d); @@ -1704,7 +2030,7 @@ protected function autoFormat($model, $key, $index, $column, $cell) $opts['numberFormat'] = ['formatCode' => $code]; } } - $style->applyFromArray($opts); + return $opts; } /** @@ -1931,6 +2257,17 @@ protected function setDefaultExportConfig() 'extension' => 'xlsx', 'writer' => self::FORMAT_EXCEL_X, ], + self::FORMAT_ODS => [ + 'label' => Yii::t('kvexport', 'OpenOffice'), + 'icon' => $notBs3 ? 'fas fa-file-alt' : ($isFa ? 'fa fa-file-text' : 'glyphicon glyphicon-save'), + 'iconOptions' => ['class' => 'text-success'], + 'linkOptions' => [], + 'options' => ['title' => Yii::t('kvexport', 'OpenOffice (ods)')], + 'alertMsg' => Yii::t('kvexport', 'The OPENOFFICE export file will be generated for download.'), + 'mime' => 'application/vnd.oasis.opendocument.spreadsheet', + 'extension' => 'ods', + 'writer' => self::FORMAT_ODS, + ], ]; } @@ -2085,6 +2422,7 @@ protected function checkGroupedRow($model, $nextModel, $key, $index) $this->_groupedColumn[$endCol]['firstLine'] = $index; } $this->_groupedColumn[$endCol]['value'] = $nextValue; + $this->autoWidthColumns[$endCol] = max(strlen($nextValue), $this->autoWidthColumns[$endCol]); } $endCol++; } @@ -2103,16 +2441,16 @@ protected function generateGroupedRow($groupFooter, $groupedCol) $this->_groupedRow = []; $fLine = ArrayHelper::getValue($this->_groupedColumn[$groupedCol], 'firstLine', -1); $fLine = ($fLine == $this->_beginRow) ? $this->_beginRow + 1 : ($fLine + 3); - $firstLine = ($this->_endRow == ($this->_beginRow + 3) && $fLine == 2) ? $this->_beginRow + 3 : $fLine; - $endLine = $this->_endRow + 1; - list($endLine, $firstLine) = ($endLine > $firstLine) ? [$endLine, $firstLine] : [$firstLine, $endLine]; + $firstLine = ($this->_endRow == ($this->_beginRow + 2) && $fLine == 2) ? $this->_beginRow + 3 : $fLine; + $endLine = $this->_endRow + 2; + [$endLine, $firstLine] = ($endLine > $firstLine) ? [$endLine, $firstLine] : [$firstLine, $endLine]; foreach ($this->getVisibleColumns() as $key => $column) { $value = $groupFooter[$key] ?? ''; //$endGroupedCol++; $groupedRange = self::columnName($key + 1).$firstLine.':'.self::columnName($key + 1).$endLine; //$lastCell = self::columnName($key + 1) . $endLine - 1; if (isset($column->group) && $column->group) { - $this->_objWorksheet->mergeCells($groupedRange); + $this->mergeCells($this->_objWorksheet, $key + 1, $firstLine, $key + 1, $endLine); } switch ($value) { case self::F_SUM: @@ -2183,6 +2521,28 @@ protected function setOutCellValue($sheet, $index, $value, $format = null) return $cell; } + /** + * Merge the given set of cells. + * All column and row parameters are 1-indexed. + * + * @param Worksheet $sheet The excel worksheet. This is usually $this->_objWorksheet. + * @param int $topLeftColumn the leftmost column of the group to merge. + * @param int $topLeftRow the top row of the group to merge. + * @param int $bottomRightColumn The rightmost column of the group to merge. + * @param int $bottomRightRow The bottom row of the group to merge. + * @return void + */ + protected function mergeCells($sheet, $topLeftColumn, $topLeftRow, $bottomRightColumn, $bottomRightRow) + { + if ($sheet !== null) { + $sheet->mergeCells(self::columnName($topLeftColumn) . $topLeftRow . ':' . self::columnName($bottomRightColumn) . $bottomRightRow); + } + // mergeCells is only supported for Excel! + if ($this->_objOpenspoutOptions instanceof Options && $this->_objOpenspoutSheet !== null) { + $this->_objOpenspoutOptions->mergeCells($topLeftColumn - 1, $topLeftRow, $bottomRightColumn - 1, $bottomRightRow, $this->_objOpenspoutSheet->getIndex()); + } + } + /** * Cleans up the export file and current object instance * diff --git a/src/ExportMenuAsset.php b/src/ExportMenuAsset.php index 3507a1a..cf2d28a 100644 --- a/src/ExportMenuAsset.php +++ b/src/ExportMenuAsset.php @@ -3,7 +3,7 @@ /** * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2015 - 2023 * @package yii2-export - * @version 1.4.3 + * @version 2.0.0 */ namespace kartik\export; diff --git a/src/ExportWriterPdf.php b/src/ExportWriterPdf.php index 3c5a9d2..db600a1 100644 --- a/src/ExportWriterPdf.php +++ b/src/ExportWriterPdf.php @@ -3,7 +3,7 @@ /** * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2015 - 2023 * @package yii2-export - * @version 1.4.3 + * @version 2.0.0 */ namespace kartik\export; @@ -32,7 +32,7 @@ class ExportWriterPdf extends Mpdf /** * @inheritdoc */ - protected function createExternalWriterInstance($config = []) + protected function createExternalWriterInstance($config = []): \Mpdf\Mpdf { if (isset($config['tempDir'])) { unset($config['tempDir']); diff --git a/src/OpenspoutHelper.php b/src/OpenspoutHelper.php new file mode 100644 index 0000000..86ba2ee --- /dev/null +++ b/src/OpenspoutHelper.php @@ -0,0 +1,191 @@ +setFontName($opts['font']['name']); + } + if (!empty($opts['font']['bold'])) { + $style->setFontBold(); + } + if (!empty($opts['font']['italic'])) { + $style->setFontItalic(); + } + if (!empty($opts['font']['underline'])) { + $style->setFontUnderline(); + } + if (!empty($opts['font']['strikethrough'])) { + $style->setFontStrikethrough(); + } + if (!empty($opts['font']['color'])) { + $color = $opts['font']['color']; + $style->setFontColor($color['rgb'] ?? $color['argb'] ?? $color); + } + } + if (isset($opts['alignment'])) { + if (isset($opts['alignment']['horizontal'])) { + $style->setCellAlignment(self::mapPhpSpreadsheetHorizontalAlignmentConstant($opts['alignment']['horizontal'])); + } + if (isset($opts['alignment']['vertical'])) { + $style->setCellVerticalAlignment(self::mapPhpSpreadsheetVerticalAlignmentConstant($opts['alignment']['vertical'])); + } + if (!empty($opts['alignment']['wrapText'])) { + $style->setShouldWrapText(true); + } + } + if (!empty($opts['borders'])) { + $borderParts = []; + foreach ([Border::TOP, Border::LEFT, Border::BOTTOM, Border::RIGHT] as $name) { + if (isset($opts['borders'][$name])) { + $color = $opts['borders'][$name]['color']['rgb'] ?? Color::BLACK; + $width = Border::WIDTH_MEDIUM; + $borderStyle = Border::STYLE_NONE; + if (isset($opts['borders'][$name]['borderStyle'])) { + [$width, $borderStyle] = self::mapPhpSpreadsheetBorderConstant($opts['borders'][$name]['borderStyle']); + } + $borderParts[] = new BorderPart($name, $color, $width, $borderStyle); + } + } + if (!empty($borderParts)) { + $style->setBorder(new Border(...$borderParts)); + } + } + if (isset($opts['fill']['fillType']) && $opts['fill']['fillType'] === 'solid') { + $color = $opts['fill']['color']; + $style->setBackgroundColor($color['rgb'] ?? $color['argb'] ?? $color); + } + return $style; + } + + /** + * Map PhpSpreadsheet constants to Openspout ones. + * Note that because Openspout will throw an error for alignments other than "Left", "Right", "Justify" and "Center", + * other values are mapped to "Center" rather than a proper equivalent. + * @param string $constant + * @return string + */ + protected static function mapPhpSpreadsheetHorizontalAlignmentConstant(string $constant): string + { + return match ($constant) { + Alignment::HORIZONTAL_LEFT => CellAlignment::LEFT, + Alignment::HORIZONTAL_RIGHT => CellAlignment::RIGHT, + Alignment::HORIZONTAL_JUSTIFY => CellAlignment::JUSTIFY, + default => CellAlignment::CENTER, + }; + } + + /** + * Map PhpSpreadsheet constants to Openspout ones. + * @param string $constant + * @return string + */ + protected static function mapPhpSpreadsheetVerticalAlignmentConstant(string $constant): string + { + return match ($constant) { + Alignment::VERTICAL_TOP => CellVerticalAlignment::TOP, + Alignment::VERTICAL_BOTTOM => CellVerticalAlignment::BOTTOM, + Alignment::VERTICAL_DISTRIBUTED => CellVerticalAlignment::DISTRIBUTED, + Alignment::VERTICAL_JUSTIFY => CellVerticalAlignment::JUSTIFY, + default => CellVerticalAlignment::CENTER, + }; + } + + /** + * Map PhpSpreadsheet constants to Openspout ones. + * Note that Openspout's supported border types are limited by comparison, so all "Dashdot" styles are just turned into medium dashed borders. + * @param string $constant + * @return array + */ + protected static function mapPhpSpreadsheetBorderConstant(string $constant): array + { + return match ($constant) { + PhpSpreadsheetBorder::BORDER_NONE => [Border::WIDTH_MEDIUM, Border::STYLE_NONE], + PhpSpreadsheetBorder::BORDER_DOTTED => [Border::WIDTH_MEDIUM, Border::STYLE_DOTTED], + PhpSpreadsheetBorder::BORDER_DOUBLE => [Border::WIDTH_MEDIUM, Border::STYLE_DOUBLE], + PhpSpreadsheetBorder::BORDER_HAIR, PhpSpreadsheetBorder::BORDER_THIN => [Border::WIDTH_THIN, Border::STYLE_SOLID], + PhpSpreadsheetBorder::BORDER_MEDIUM => [Border::WIDTH_MEDIUM, Border::STYLE_SOLID], + PhpSpreadsheetBorder::BORDER_SLANTDASHDOT => [Border::WIDTH_THIN, Border::STYLE_DASHED], + PhpSpreadsheetBorder::BORDER_THICK => [Border::WIDTH_THICK, Border::STYLE_SOLID], + PhpSpreadsheetBorder::BORDER_OMIT => [Border::WIDTH_THIN, Border::STYLE_NONE], + default => [Border::WIDTH_MEDIUM, Border::STYLE_DASHED], + }; + } + + /** + * Set the normal (top, left, right, bottom) border values based on the 'inside' and 'outline' border settings. + * + * This is necessary because openspout does not support 'inside' nor 'outline'. + * @param array $opts The options to update. This will be edited in-place. + * @param bool $isFirstRow Whether this is the first row of the inside/outline box. + * @param bool $isLastRow Whether this is the last row of the inside/outline box. + * @param bool $isFirstColumn Whether this is the first column of the inside/outline box. + * @param bool $isLastColumn Whether this is the last column of the inside/outline box. + * @return void + */ + public static function setInsideAndOutlineBorders(array &$opts, bool $isFirstRow, bool $isLastRow, bool $isFirstColumn, bool $isLastColumn): void + { + if (isset($opts['borders']['inside'])) { + foreach ([Border::TOP, Border::LEFT, Border::BOTTOM, Border::RIGHT] as $name) { + $opts['borders'][$name] = $opts['borders']['inside']; + } + } + if (isset($opts['borders']['outline'])) { + $keys = []; + if ($isFirstColumn) { + $keys[] = Border::LEFT; + } + if ($isLastColumn) { + $keys[] = Border::RIGHT; + } + if ($isFirstRow) { + $keys[] = Border::TOP; + } + if ($isLastRow) { + $keys[] = Border::BOTTOM; + } + foreach ($keys as $name) { + $opts['borders'][$name] = $opts['borders']['outline']; + } + } + } +} \ No newline at end of file diff --git a/src/assets/js/kv-export-columns.js b/src/assets/js/kv-export-columns.js index 61aa379..cf4f7da 100644 --- a/src/assets/js/kv-export-columns.js +++ b/src/assets/js/kv-export-columns.js @@ -2,7 +2,7 @@ * @package yii2-export * @author Kartik Visweswaran * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2015 - 2023 - * @version 1.4.3 + * @version 2.0.0 * * Export Columns Selector Validation Module. * diff --git a/src/assets/js/kv-export-columns.min.js b/src/assets/js/kv-export-columns.min.js index e2d3101..702d0a4 100644 --- a/src/assets/js/kv-export-columns.min.js +++ b/src/assets/js/kv-export-columns.min.js @@ -2,7 +2,7 @@ * @package yii2-export * @author Kartik Visweswaran * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2015 - 2023 - * @version 1.4.3 + * @version 2.0.0 * * Export Columns Selector Validation Module. * diff --git a/src/assets/js/kv-export-data.js b/src/assets/js/kv-export-data.js index 965974d..aa10556 100644 --- a/src/assets/js/kv-export-data.js +++ b/src/assets/js/kv-export-data.js @@ -2,7 +2,7 @@ * @package yii2-export * @author Kartik Visweswaran * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2015 - 2023 - * @version 1.4.3 + * @version 2.0.0 * * Export Data Validation Module. * diff --git a/src/assets/js/kv-export-data.min.js b/src/assets/js/kv-export-data.min.js index aa89101..51a75d5 100644 --- a/src/assets/js/kv-export-data.min.js +++ b/src/assets/js/kv-export-data.min.js @@ -2,7 +2,7 @@ * @package yii2-export * @author Kartik Visweswaran * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2015 - 2023 - * @version 1.4.3 + * @version 2.0.0 * * Export Data Validation Module. * diff --git a/src/messages/af/kvexport.php b/src/messages/af/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/af/kvexport.php +++ b/src/messages/af/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/ar/kvexport.php b/src/messages/ar/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/ar/kvexport.php +++ b/src/messages/ar/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/az/kvexport.php b/src/messages/az/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/az/kvexport.php +++ b/src/messages/az/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/bg/kvexport.php b/src/messages/bg/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/bg/kvexport.php +++ b/src/messages/bg/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/bs/kvexport.php b/src/messages/bs/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/bs/kvexport.php +++ b/src/messages/bs/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/ca/kvexport.php b/src/messages/ca/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/ca/kvexport.php +++ b/src/messages/ca/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/cs/kvexport.php b/src/messages/cs/kvexport.php index c8d49a3..2bd7329 100644 --- a/src/messages/cs/kvexport.php +++ b/src/messages/cs/kvexport.php @@ -44,6 +44,7 @@ 'The HTML export file will be generated for download.' => 'Soubor HTML bude vygenerován a stažen.', 'The PDF export file will be generated for download.' => 'Soubor PDF bude vygenerován a stažen.', 'The TEXT export file will be generated for download.' => 'Soubor Text bude vygenerován a stažen.', + 'The OPENOFFICE export file will be generated for download.' => 'Soubor OpenOffice bude vygenerován a stažen.', 'grid-export' => 'export', 'Download exported file' => '', 'Exported File' => '', diff --git a/src/messages/da/kvexport.php b/src/messages/da/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/da/kvexport.php +++ b/src/messages/da/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/de/kvexport.php b/src/messages/de/kvexport.php index 997f118..11b57d0 100644 --- a/src/messages/de/kvexport.php +++ b/src/messages/de/kvexport.php @@ -36,6 +36,7 @@ 'The HTML export file will be generated for download.' => 'Die HTML-Export-Datei wird für den Download erstellt.', 'The PDF export file will be generated for download.' => 'Die PDF-Export-Datei wird für den Download erstellt.', 'The TEXT export file will be generated for download.' => 'Die Text-Export-Datei wird für den Download erstellt.', + 'The OPENOFFICE export file will be generated for download.' => 'Die OpenOffice-Export-Datei wird für den Download erstellt.', 'CSV' => '', 'Excel 2007+' => '', 'Excel 95 +' => '', @@ -44,6 +45,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'PDF' => '', 'Pick from list' => '', diff --git a/src/messages/el/kvexport.php b/src/messages/el/kvexport.php index 0de7760..216ee28 100644 --- a/src/messages/el/kvexport.php +++ b/src/messages/el/kvexport.php @@ -50,6 +50,7 @@ 'The HTML export file will be generated for download.' => 'Θα δημιουργηθεί το αρχείο δεδομένων σε μορφή HTML.', 'The PDF export file will be generated for download.' => 'Θα δημιουργηθεί το αρχείο δεδομένων σε μορφή PDF.', 'The TEXT export file will be generated for download.' => 'Θα δημιουργηθεί το αρχείο δεδομένων σε μορφή TEXT.', + 'The OPENOFFICE export file will be generated for download.' => 'Θα δημιουργηθεί το αρχείο δεδομένων σε μορφή OPENOFFICE.', 'Value' => 'Τιμή', 'Value is not in list.' => 'Η τιμή δεν είναι στη λίστα.', 'grid-export' => 'grid-export', diff --git a/src/messages/en/kvexport.php b/src/messages/en/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/en/kvexport.php +++ b/src/messages/en/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/eo/kvexport.php b/src/messages/eo/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/eo/kvexport.php +++ b/src/messages/eo/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/es/kvexport.php b/src/messages/es/kvexport.php index 77b4acd..681ee81 100644 --- a/src/messages/es/kvexport.php +++ b/src/messages/es/kvexport.php @@ -36,6 +36,7 @@ 'The HTML export file will be generated for download.' => 'El archivo HTML será generado para descargar', 'The PDF export file will be generated for download.' => 'El archivo PDF será generado para descargar', 'The TEXT export file will be generated for download.' => 'El archivo TEXT será generado para descargar', + 'The OPENOFFICE export file will be generated for download.' => 'El archivo OPENOFFICE será generado para descargar', 'CSV' => '', 'Excel 2007+' => '', 'Excel 95 +' => '', @@ -44,6 +45,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'PDF' => '', 'Pick from list' => '', diff --git a/src/messages/et/kvexport.php b/src/messages/et/kvexport.php index a9e1e27..210706d 100644 --- a/src/messages/et/kvexport.php +++ b/src/messages/et/kvexport.php @@ -46,6 +46,7 @@ 'The HTML export file will be generated for download.' => 'Genereerin HTML faili alla laadimiseks.', 'The PDF export file will be generated for download.' => 'Genereerin PDF faili alla laadimiseks.', 'The TEXT export file will be generated for download.' => 'Genereerin TEXT faili alla laadimiseks.', + 'The OPENOFFICE export file will be generated for download.' => 'Genereerin OPENOFFICE faili alla laadimiseks.', 'grid-export' => 'grid-export', 'Input error' => '', 'Key' => '', diff --git a/src/messages/eu/kvexport.php b/src/messages/eu/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/eu/kvexport.php +++ b/src/messages/eu/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/fa/kvexport.php b/src/messages/fa/kvexport.php index 243ad3d..fb2224d 100644 --- a/src/messages/fa/kvexport.php +++ b/src/messages/fa/kvexport.php @@ -41,6 +41,7 @@ 'The HTML export file will be generated for download.' => 'فایل HTML خروجی برای دانلود ایجاد خواهد شد.', 'The PDF export file will be generated for download.' => 'فایل PDF خروجی برای دانلود ایجاد خواهد شد.', 'The TEXT export file will be generated for download.' => 'فایل TEXT خروجی برای دانلود ایجاد خواهد شد.', + 'The OPENOFFICE export file will be generated for download.' => 'فایل OPENOFFICE خروجی برای دانلود ایجاد خواهد شد.', 'Value' => 'مقدار', 'Value is not in list.' => 'مقدار در لیست وجود ندارد', 'grid-export' => 'خروجی گرید', @@ -50,6 +51,7 @@ 'Grid export generated by Krajee ExportMenu widget (yii2-export)' => '', 'HTML' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'PDF' => '', 'Portable Document Format' => '', diff --git a/src/messages/fi/kvexport.php b/src/messages/fi/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/fi/kvexport.php +++ b/src/messages/fi/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/fo/kvexport.php b/src/messages/fo/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/fo/kvexport.php +++ b/src/messages/fo/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/fr/kvexport.php b/src/messages/fr/kvexport.php index b2c4d3d..bc9ddc2 100644 --- a/src/messages/fr/kvexport.php +++ b/src/messages/fr/kvexport.php @@ -34,6 +34,7 @@ 'The HTML export file will be generated for download.' => 'Le fichier HTML va être généré', 'The PDF export file will be generated for download.' => 'Le fichier PDF va être généré', 'The TEXT export file will be generated for download.' => 'Le fichier texte va être généré', + 'The OPENOFFICE export file will be generated for download.' => 'Le fichier OpenOffice va être généré', 'CSV' => '', 'Comma Separated Values' => '', 'Excel 2007+' => '', @@ -44,6 +45,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'PDF' => '', 'Pick from list' => '', diff --git a/src/messages/gl/kvexport.php b/src/messages/gl/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/gl/kvexport.php +++ b/src/messages/gl/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/gu/kvexport.php b/src/messages/gu/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/gu/kvexport.php +++ b/src/messages/gu/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/he/kvexport.php b/src/messages/he/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/he/kvexport.php +++ b/src/messages/he/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/hi/kvexport.php b/src/messages/hi/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/hi/kvexport.php +++ b/src/messages/hi/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/hr/kvexport.php b/src/messages/hr/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/hr/kvexport.php +++ b/src/messages/hr/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/hu/kvexport.php b/src/messages/hu/kvexport.php index 3fb6a31..0b1c3c1 100644 --- a/src/messages/hu/kvexport.php +++ b/src/messages/hu/kvexport.php @@ -37,6 +37,7 @@ 'The HTML export file will be generated for download.' => 'A HTML fájl előkészítése letöltésre.', 'The PDF export file will be generated for download.' => 'A PDF fájl előkészítése a letöltésre.', 'The TEXT export file will be generated for download.' => 'A szöveges export fájl előkészítése letöltésre.', + 'The OPENOFFICE export file will be generated for download.' => 'A OpenOffice fájl előkészítése a letöltésre.', 'CSV' => '', 'Excel 2007+' => '', 'Excel 95 +' => '', @@ -45,6 +46,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'PDF' => '', 'Pick from list' => '', diff --git a/src/messages/hy/kvexport.php b/src/messages/hy/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/hy/kvexport.php +++ b/src/messages/hy/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/id/kvexport.php b/src/messages/id/kvexport.php index a876ed2..b237cfb 100644 --- a/src/messages/id/kvexport.php +++ b/src/messages/id/kvexport.php @@ -32,6 +32,7 @@ 'The HTML export file will be generated for download.' => 'Berkas HTML akan dibuat untuk di-unduh', 'The PDF export file will be generated for download.' => 'Berkas PDF akan dibuat untuk di-unduh', 'The TEXT export file will be generated for download.' => 'Berkas TEXT akan dibuat untuk di-unduh', + 'The OPENOFFICE export file will be generated for download.' => 'Berkas OPENOFFICE akan dibuat untuk di-unduh', 'CSV' => '', 'Comma Separated Values' => '', 'Download exported file' => '', @@ -43,6 +44,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', diff --git a/src/messages/is/kvexport.php b/src/messages/is/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/is/kvexport.php +++ b/src/messages/is/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/it/kvexport.php b/src/messages/it/kvexport.php index 3a77b61..b371338 100644 --- a/src/messages/it/kvexport.php +++ b/src/messages/it/kvexport.php @@ -37,6 +37,7 @@ 'The HTML export file will be generated for download.' => 'Il file esportato in HTML sarà generato per il download', 'The PDF export file will be generated for download.' => 'Il file esportato in PDF sarà generato per il download', 'The TEXT export file will be generated for download.' => 'Il file esportato in TEXT sarà generato per il download', + 'The OPENOFFICE export file will be generated for download.' => 'Il file esportato in OPENOFFICE sarà generato per il download', 'CSV' => '', 'Excel 2007+' => '', 'Excel 95 +' => '', @@ -45,6 +46,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'PDF' => '', 'Pick from list' => '', diff --git a/src/messages/ja/kvexport.php b/src/messages/ja/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/ja/kvexport.php +++ b/src/messages/ja/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/ka/kvexport.php b/src/messages/ka/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/ka/kvexport.php +++ b/src/messages/ka/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/kk/kvexport.php b/src/messages/kk/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/kk/kvexport.php +++ b/src/messages/kk/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/kn/kvexport.php b/src/messages/kn/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/kn/kvexport.php +++ b/src/messages/kn/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/ko/kvexport.php b/src/messages/ko/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/ko/kvexport.php +++ b/src/messages/ko/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/ky/kvexport.php b/src/messages/ky/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/ky/kvexport.php +++ b/src/messages/ky/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/lt/kvexport.php b/src/messages/lt/kvexport.php index 876d744..a2d7e21 100644 --- a/src/messages/lt/kvexport.php +++ b/src/messages/lt/kvexport.php @@ -46,6 +46,7 @@ 'The HTML export file will be generated for download.' => 'Bus sugeneruotas HTML eksporto failas parsisiuntimui.', 'The PDF export file will be generated for download.' => 'Bus sugeneruotas PDF eksporto failas parsisiuntimui.', 'The TEXT export file will be generated for download.' => 'Bus sugeneruotas TEXT eksporto failas parsisiuntimui.', + 'The OPENOFFICE export file will be generated for download.' => 'Bus sugeneruotas OPENOFFICE eksporto failas parsisiuntimui.', 'grid-export' => 'lentelės eksportas', 'Input error' => '', 'Key' => '', diff --git a/src/messages/lv/kvexport.php b/src/messages/lv/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/lv/kvexport.php +++ b/src/messages/lv/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/mi/kvexport.php b/src/messages/mi/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/mi/kvexport.php +++ b/src/messages/mi/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/mk/kvexport.php b/src/messages/mk/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/mk/kvexport.php +++ b/src/messages/mk/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/mn/kvexport.php b/src/messages/mn/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/mn/kvexport.php +++ b/src/messages/mn/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/mr/kvexport.php b/src/messages/mr/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/mr/kvexport.php +++ b/src/messages/mr/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/ms/kvexport.php b/src/messages/ms/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/ms/kvexport.php +++ b/src/messages/ms/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/mt/kvexport.php b/src/messages/mt/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/mt/kvexport.php +++ b/src/messages/mt/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/nb/kvexport.php b/src/messages/nb/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/nb/kvexport.php +++ b/src/messages/nb/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/nl/kvexport.php b/src/messages/nl/kvexport.php index a587d4f..eb6f199 100644 --- a/src/messages/nl/kvexport.php +++ b/src/messages/nl/kvexport.php @@ -46,6 +46,7 @@ 'The HTML export file will be generated for download.' => 'Het HTML export bestand zal gegenereerd worden om te downloaden', 'The PDF export file will be generated for download.' => 'Het PDF export bestand zal gegenereerd worden om te downloaden', 'The TEXT export file will be generated for download.' => 'Het TEXT export bestand zal gegenereerd worden om te downloaden', + 'The OPENOFFICE export file will be generated for download.' => 'Het OPENOFFICE export bestand zal gegenereerd worden om te downloaden', 'grid-export' => 'raster-export', 'Input error' => '', 'Key' => '', diff --git a/src/messages/nn/kvexport.php b/src/messages/nn/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/nn/kvexport.php +++ b/src/messages/nn/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/pl/kvexport.php b/src/messages/pl/kvexport.php index 2815159..d9f0ae0 100644 --- a/src/messages/pl/kvexport.php +++ b/src/messages/pl/kvexport.php @@ -38,6 +38,7 @@ 'The HTML export file will be generated for download.' => 'Plik HTML zostanie wygenerowany do pobrania.', 'The PDF export file will be generated for download.' => 'Plik PDF zostanie wygenerowany do pobrania.', 'The TEXT export file will be generated for download.' => 'Plik tekstowy zostanie wygenerowany do pobrania.', + 'The OPENOFFICE export file will be generated for download.' => 'Plik OPENOFFICE zostanie wygenerowany do pobrania.', 'grid-export' => 'eksport', 'Excel 2007+' => '', 'Excel 95 +' => '', @@ -46,6 +47,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'PDF' => '', 'Pick from list' => '', diff --git a/src/messages/pt-BR/kvexport.php b/src/messages/pt-BR/kvexport.php index 33e4a3c..d1522ae 100644 --- a/src/messages/pt-BR/kvexport.php +++ b/src/messages/pt-BR/kvexport.php @@ -46,6 +46,7 @@ 'The HTML export file will be generated for download.' => 'O arquivo HTML será gerado para download', 'The PDF export file will be generated for download.' => 'O arquivo PDF será gerado para download', 'The TEXT export file will be generated for download.' => 'O arquivo de Texto será gerado para download', + 'The OPENOFFICE export file will be generated for download.' => 'O arquivo OPENOFFICE será gerado para download', 'Input error' => '', 'Key' => '', 'Pick from list' => '', diff --git a/src/messages/pt-PT/kvexport.php b/src/messages/pt-PT/kvexport.php index cd06c7c..8e96d51 100644 --- a/src/messages/pt-PT/kvexport.php +++ b/src/messages/pt-PT/kvexport.php @@ -46,6 +46,7 @@ 'The HTML export file will be generated for download.' => 'O ficheiro HTML será gerado para download', 'The PDF export file will be generated for download.' => 'O ficheiro PDF será gerado para download', 'The TEXT export file will be generated for download.' => 'O ficheiro de Texto será gerado para download', + 'The OPENOFFICE export file will be generated for download.' => 'O ficheiro OPENOFFICE será gerado para download', 'grid-export' => '', 'Toggle All' => '', ]; diff --git a/src/messages/pt/kvexport.php b/src/messages/pt/kvexport.php index a713cd0..315e47d 100644 --- a/src/messages/pt/kvexport.php +++ b/src/messages/pt/kvexport.php @@ -40,6 +40,7 @@ 'The HTML export file will be generated for download.' => 'O ficheiro HTML será gerado para download', 'The PDF export file will be generated for download.' => 'O ficheiro PDF será gerado para download', 'The TEXT export file will be generated for download.' => 'O ficheiro de Texto será gerado para download', + 'The OPENOFFICE export file will be generated for download.' => 'O ficheiro OPENOFFICE será gerado para download', 'Column' => '', 'Download exported file' => '', 'Export data in selected format' => '', diff --git a/src/messages/qu/kvexport.php b/src/messages/qu/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/qu/kvexport.php +++ b/src/messages/qu/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/ro/kvexport.php b/src/messages/ro/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/ro/kvexport.php +++ b/src/messages/ro/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/ru/kvexport.php b/src/messages/ru/kvexport.php index 8c020e0..0c76820 100644 --- a/src/messages/ru/kvexport.php +++ b/src/messages/ru/kvexport.php @@ -32,6 +32,7 @@ 'The HTML export file will be generated for download.' => 'Будет сгенерирован файл в формате HTML.', 'The PDF export file will be generated for download.' => 'Будет сгенерирован файл в формате PDF.', 'The TEXT export file will be generated for download.' => 'Будет сгенерирован файл в формате TEXT.', + 'The OPENOFFICE export file will be generated for download.' => 'Будет сгенерирован файл в формате OPENOFFICE.', 'CSV' => '', 'Comma Separated Values' => '', 'Download exported file' => 'Скачать экспортированный файл', @@ -43,6 +44,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'PDF' => '', 'Pick from list' => '', diff --git a/src/messages/sa/kvexport.php b/src/messages/sa/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/sa/kvexport.php +++ b/src/messages/sa/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/se/kvexport.php b/src/messages/se/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/se/kvexport.php +++ b/src/messages/se/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/sk/kvexport.php b/src/messages/sk/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/sk/kvexport.php +++ b/src/messages/sk/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/sl/kvexport.php b/src/messages/sl/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/sl/kvexport.php +++ b/src/messages/sl/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/sq/kvexport.php b/src/messages/sq/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/sq/kvexport.php +++ b/src/messages/sq/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/sr/kvexport.php b/src/messages/sr/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/sr/kvexport.php +++ b/src/messages/sr/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/sv/kvexport.php b/src/messages/sv/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/sv/kvexport.php +++ b/src/messages/sv/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/sw/kvexport.php b/src/messages/sw/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/sw/kvexport.php +++ b/src/messages/sw/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/ta/kvexport.php b/src/messages/ta/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/ta/kvexport.php +++ b/src/messages/ta/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/te/kvexport.php b/src/messages/te/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/te/kvexport.php +++ b/src/messages/te/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/th/kvexport.php b/src/messages/th/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/th/kvexport.php +++ b/src/messages/th/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/tj/kvexport.php b/src/messages/tj/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/tj/kvexport.php +++ b/src/messages/tj/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/tl/kvexport.php b/src/messages/tl/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/tl/kvexport.php +++ b/src/messages/tl/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/tn/kvexport.php b/src/messages/tn/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/tn/kvexport.php +++ b/src/messages/tn/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/tr/kvexport.php b/src/messages/tr/kvexport.php index 01cf5b6..30dc287 100644 --- a/src/messages/tr/kvexport.php +++ b/src/messages/tr/kvexport.php @@ -44,6 +44,7 @@ 'The HTML export file will be generated for download.' => 'HTML aktarım dosyası oluşturulacak.', 'The PDF export file will be generated for download.' => 'PDF aktarım dosyası oluşturulacak.', 'The TEXT export file will be generated for download.' => 'Text aktarım dosyası oluşturulacak.', + 'The OPENOFFICE export file will be generated for download.' => 'OpenOffice aktarım dosyası oluşturulacak.', 'grid-export' => 'export', 'Download exported file' => '', 'Exported File' => '', diff --git a/src/messages/ts/kvexport.php b/src/messages/ts/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/ts/kvexport.php +++ b/src/messages/ts/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/tt/kvexport.php b/src/messages/tt/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/tt/kvexport.php +++ b/src/messages/tt/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/uk/kvexport.php b/src/messages/uk/kvexport.php index ed89a4f..b2355ed 100644 --- a/src/messages/uk/kvexport.php +++ b/src/messages/uk/kvexport.php @@ -46,6 +46,7 @@ 'The HTML export file will be generated for download.' => 'Згенерується файл у форматі HTML.', 'The PDF export file will be generated for download.' => 'Згенерується файл у форматі PDF.', 'The TEXT export file will be generated for download.' => 'Згенерується файл у форматі TEXT.', + 'The OPENOFFICE export file will be generated for download.' => 'Згенерується файл у форматі OPENOFFICE.', 'Input error' => '', 'Key' => '', 'Pick from list' => '', diff --git a/src/messages/ur/kvexport.php b/src/messages/ur/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/ur/kvexport.php +++ b/src/messages/ur/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/vi/kvexport.php b/src/messages/vi/kvexport.php index 2528e38..572a01c 100644 --- a/src/messages/vi/kvexport.php +++ b/src/messages/vi/kvexport.php @@ -44,7 +44,7 @@ 'The EXCEL 95+ (xls) export file will be generated for download.' => 'Tiệp EXCEL 95+ (xls) sẽ được xuất để tải về.', 'The HTML export file will be generated for download.' => 'Tiệp HTML sẽ được xuất để tải về.', 'The PDF export file will be generated for download.' => 'Tiệp PDF sẽ được xuất để tải về.', - 'The TEXT export file will be generated for download.' => 'Tiệp TXT sẽ được xuất để tải về.', + 'The OPENOFFICE export file will be generated for download.' => 'Tiệp OPENOFFICE sẽ được xuất để tải về.', 'Grid export generated by Krajee ExportMenu widget (yii2-export)' => '', 'Input error' => '', 'Key' => '', diff --git a/src/messages/zh-CN/kvexport.php b/src/messages/zh-CN/kvexport.php index 028d1d8..0a6fce8 100644 --- a/src/messages/zh-CN/kvexport.php +++ b/src/messages/zh-CN/kvexport.php @@ -32,7 +32,7 @@ 'The EXCEL 95+ (xls) export file will be generated for download.' => 'EXCEL 95+ (xls)文件即将生成下载。', 'The HTML export file will be generated for download.' => 'HTML文件即将生成下载。', 'The PDF export file will be generated for download.' => 'PDF文件即将生成下载。', - 'The TEXT export file will be generated for download.' => 'TEXT文件即将生成下载。', + 'The OPENOFFICE export file will be generated for download.' => 'OPENOFFICE文件即将生成下载。', 'grid-export' => '表格导出', 'CSV' => '', 'Comma Separated Values' => '', @@ -45,6 +45,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'PDF' => '', 'Pick from list' => '', diff --git a/src/messages/zh-TW/kvexport.php b/src/messages/zh-TW/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/zh-TW/kvexport.php +++ b/src/messages/zh-TW/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/messages/zu/kvexport.php b/src/messages/zu/kvexport.php index 4a92c96..1cada82 100644 --- a/src/messages/zu/kvexport.php +++ b/src/messages/zu/kvexport.php @@ -33,6 +33,7 @@ 'Input error' => '', 'Key' => '', 'Microsoft Excel 2007+ (xlsx)' => '', + 'OpenOffice (ods)' => '', 'Microsoft Excel 95+ (xls)' => '', 'Ok to proceed?' => '', 'PDF' => '', @@ -50,6 +51,7 @@ 'The HTML export file will be generated for download.' => '', 'The PDF export file will be generated for download.' => '', 'The TEXT export file will be generated for download.' => '', + 'The OPENOFFICE export file will be generated for download.' => '', 'Value' => '', 'Value is not in list.' => '', 'grid-export' => '', diff --git a/src/views/_columns.php b/src/views/_columns.php index a94ff7e..25ff013 100644 --- a/src/views/_columns.php +++ b/src/views/_columns.php @@ -3,7 +3,7 @@ * @package yii2-export * @author Kartik Visweswaran * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2015 - 2023 - * @version 1.4.3 + * @version 2.0.0 * * Column Selector View * diff --git a/src/views/_view.php b/src/views/_view.php index ad60180..3cb4106 100644 --- a/src/views/_view.php +++ b/src/views/_view.php @@ -3,7 +3,7 @@ * @package yii2-export * @author Kartik Visweswaran * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2015 - 2023 - * @version 1.4.3 + * @version 2.0.0 * * Export Submission View *