Move documentation builder to infra so that it isn't included in non `--dev` composer downloads

Unit test for locale builder
Add new function stubs (as dummy) to Calculation list of functions
This commit is contained in:
MarkBaker 2021-05-28 20:15:20 +02:00 committed by Mark Baker
parent 290c125e2e
commit e0e5a81d69
23 changed files with 320 additions and 226 deletions

View File

@ -2,12 +2,13 @@
<?php <?php
use PhpOffice\PhpSpreadsheet\Calculation\Calculation; use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
use PhpOffice\PhpSpreadsheet\DocumentGenerator; use PhpOffice\PhpSpreadsheetInfra\DocumentGenerator;
require_once 'vendor/autoload.php'; require_once 'vendor/autoload.php';
try { try {
$phpSpreadsheetFunctionsProperty = (new ReflectionClass(Calculation::class))->getProperty('phpSpreadsheetFunctions'); $phpSpreadsheetFunctionsProperty = (new ReflectionClass(Calculation::class))
->getProperty('phpSpreadsheetFunctions');
$phpSpreadsheetFunctionsProperty->setAccessible(true); $phpSpreadsheetFunctionsProperty->setAccessible(true);
$phpSpreadsheetFunctions = $phpSpreadsheetFunctionsProperty->getValue(); $phpSpreadsheetFunctions = $phpSpreadsheetFunctionsProperty->getValue();
ksort($phpSpreadsheetFunctions); ksort($phpSpreadsheetFunctions);

View File

@ -7,14 +7,16 @@ use PhpOffice\PhpSpreadsheetInfra\LocaleGenerator;
require_once 'vendor/autoload.php'; require_once 'vendor/autoload.php';
try { try {
$phpSpreadsheetFunctionsProperty = (new ReflectionClass(Calculation::class))->getProperty('phpSpreadsheetFunctions'); $phpSpreadsheetFunctionsProperty = (new ReflectionClass(Calculation::class))
->getProperty('phpSpreadsheetFunctions');
$phpSpreadsheetFunctionsProperty->setAccessible(true); $phpSpreadsheetFunctionsProperty->setAccessible(true);
$phpSpreadsheetFunctions = $phpSpreadsheetFunctionsProperty->getValue(); $phpSpreadsheetFunctions = $phpSpreadsheetFunctionsProperty->getValue();
$localeGenerator = new LocaleGenerator( $localeGenerator = new LocaleGenerator(
__DIR__ . '/../src/PhpSpreadsheet/Calculation/locale/', realpath(__DIR__ . '/../src/PhpSpreadsheet/Calculation/locale/'),
'Translations.xlsx', 'Translations.xlsx',
$phpSpreadsheetFunctions $phpSpreadsheetFunctions,
true
); );
$localeGenerator->generateLocales(); $localeGenerator->generateLocales();
} catch (\Exception $e) { } catch (\Exception $e) {

View File

@ -1,195 +0,0 @@
<?php
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
use PhpOffice\PhpSpreadsheet\Calculation\Functions;
error_reporting(E_ALL);
set_time_limit(0);
date_default_timezone_set('UTC');
// Adjust the path as required to reference the PHPSpreadsheet Bootstrap file
require_once __DIR__ . '/../samples/Bootstrap.php';
class ExcelFunction
{
public $category;
public $functionName;
public $excelVersion;
public $implementation;
public function __construct(string $category, string $functionName, string $excelVersion, string $implementation)
{
$this->category = $category;
$this->functionName = $functionName;
$this->excelVersion = $excelVersion;
$this->implementation = $implementation;
}
}
class ColumnSettings
{
public $length;
public $title;
public $underline;
public function __construct(string $title, int $length)
{
$this->length = $length;
$this->title = str_pad($title, $length, ' ');
$this->underline = str_repeat('-', $length);
}
}
class ListBuilder
{
private $inputFileName;
public $list = [];
public function __construct(string $inputFileName)
{
$this->inputFileName = $inputFileName;
$this->buildList();
uasort(
$this->list,
function ($a, $b) {
$aSortName = str_replace('.', '', $a->functionName, $aCount) . str_repeat('.', $aCount);
$bSortName = str_replace('.', '', $b->functionName, $bCount) . str_repeat('.', $bCount);
return $aSortName <=> $bSortName;
}
);
}
private function buildList(): void
{
$inputFile = new \SplFileObject($this->inputFileName);
$category = null;
while (!$inputFile->eof()) {
$line = $inputFile->fgets();
if (strpos($line, '#') === 0) {
if (strpos($line, '##') === 0) {
$category = trim(substr($line, 3));
}
continue;
}
$lineData = explode('|', $line);
if (count($lineData) <= 1 || strpos($line, '--') === 0) {
continue;
}
$functionData = array_map('trim', $lineData);
if ($functionData[0] === 'Excel Function') {
continue;
}
$function = new ExcelFunction($category, ...$functionData);
if (array_key_exists($function->functionName, $this->list)) {
echo " ERROR: Duplicate entry for function {$function->functionName} in master file", PHP_EOL;
continue;
}
$this->list[$function->functionName] = $function;
}
}
}
class AlphabeticFileWriter
{
private $outputFileName;
private $outputFile;
public function __construct(string $outputFileName)
{
$this->outputFileName = $outputFileName;
}
public function generate(ExcelFunction ...$functionList): void
{
$this->outputFile = new \SplFileObject($this->outputFileName, 'w');
$this->excelFunctionColumnSettings = new ColumnSettings('Excel Function', max(array_map('strlen', array_column($functionList, 'functionName'))));
$this->categoryColumnSettings = new ColumnSettings('Category', max(array_map('strlen', array_column($functionList, 'category'))));
$this->excelVersionColumnSettings = new ColumnSettings('Excel Version', 13);
$this->phpSpreadsheetFunctionColumnSettings = new ColumnSettings('PhpSpreadsheet Function', 24);
$this->header();
$this->body(...$functionList);
}
private function header(): void
{
$this->outputFile->fwrite('# Function list by name' . PHP_EOL);
}
private function body(ExcelFunction ...$functionList): void
{
$initialCharacter = null;
foreach ($functionList as $excelFunction) {
if (substr($excelFunction->functionName, 0, 1) !== $initialCharacter) {
$initialCharacter = $this->subHeader($excelFunction);
}
$functionName = str_pad($excelFunction->functionName, $this->excelFunctionColumnSettings->length, ' ');
$category = str_pad($excelFunction->category, $this->categoryColumnSettings->length, ' ');
$excelVersion = str_pad($excelFunction->excelVersion, $this->excelVersionColumnSettings->length, ' ');
$this->outputFile->fwrite("{$functionName} | {$category} | {$excelVersion} | {$excelFunction->implementation}" . PHP_EOL);
}
}
private function subHeader(ExcelFunction $excelFunction)
{
$initialCharacter = substr($excelFunction->functionName, 0, 1);
$this->outputFile->fwrite(PHP_EOL . "## {$initialCharacter}" . PHP_EOL . PHP_EOL);
$this->outputFile->fwrite("{$this->excelFunctionColumnSettings->title} | {$this->categoryColumnSettings->title} | {$this->excelVersionColumnSettings->title} | {$this->phpSpreadsheetFunctionColumnSettings->title}" . PHP_EOL);
$this->outputFile->fwrite("{$this->excelFunctionColumnSettings->underline}-|-{$this->categoryColumnSettings->underline}-|-{$this->excelVersionColumnSettings->underline}-|-{$this->phpSpreadsheetFunctionColumnSettings->underline}" . PHP_EOL);
return $initialCharacter;
}
}
$folder = __DIR__ . '/../docs/references/';
$inputFileName = 'function-list-by-category.md';
$outputFileName = 'function-list-by-name.md';
echo "Building list of functions from master file {$inputFileName}", PHP_EOL;
$listBuilder = new ListBuilder($folder . $inputFileName);
echo "Building new documentation list of alphabetic functions in {$outputFileName}", PHP_EOL;
$alphabeticFileWriter = new AlphabeticFileWriter($folder . $outputFileName);
$alphabeticFileWriter->generate(...array_values($listBuilder->list));
echo 'Identifying discrepancies between the master file and the Calculation Engine codebase', PHP_EOL;
$definedFunctions = (new Calculation())->getFunctions();
foreach ($listBuilder->list as $excelFunction) {
if (!array_key_exists($excelFunction->functionName, $definedFunctions)) {
echo " ERROR: Function {$excelFunction->functionName}() of category {$excelFunction->category} is not defined in the Calculation Engine", PHP_EOL;
} elseif (array_key_exists($excelFunction->functionName, $definedFunctions) && $excelFunction->implementation === '**Not yet Implemented**') {
if ($definedFunctions[$excelFunction->functionName]['functionCall'] !== [Functions::class, 'DUMMY']) {
echo " ERROR: Function {$excelFunction->functionName}() of category {$excelFunction->category} is flagged as not yet implemented in the documentation", PHP_EOL;
echo ' but does have an implementation in the code', PHP_EOL;
}
}
}
foreach ($definedFunctions as $definedFunction => $definedFunctionDetail) {
if (!array_key_exists($definedFunction, $listBuilder->list)) {
echo " ERROR: Function {$definedFunction}() of category {$definedFunctionDetail['category']} is defined in the Calculation Engine, but not in the master file", PHP_EOL;
}
}

View File

@ -1,6 +1,6 @@
<?php <?php
namespace PhpOffice\PhpSpreadsheet; namespace PhpOffice\PhpSpreadsheetInfra;
use PhpOffice\PhpSpreadsheet\Calculation\Category; use PhpOffice\PhpSpreadsheet\Calculation\Category;
use PhpOffice\PhpSpreadsheet\Calculation\Functions; use PhpOffice\PhpSpreadsheet\Calculation\Functions;

View File

@ -43,6 +43,8 @@ class LocaleGenerator
*/ */
protected $translationSpreadsheet; protected $translationSpreadsheet;
protected $verbose;
/** /**
* @var Worksheet * @var Worksheet
*/ */
@ -64,11 +66,13 @@ class LocaleGenerator
public function __construct( public function __construct(
string $translationBaseFolder, string $translationBaseFolder,
string $translationSpreadsheetName, string $translationSpreadsheetName,
array $phpSpreadsheetFunctions array $phpSpreadsheetFunctions,
bool $verbose = false
) { ) {
$this->translationBaseFolder = $translationBaseFolder; $this->translationBaseFolder = $translationBaseFolder;
$this->translationSpreadsheetName = $translationSpreadsheetName; $this->translationSpreadsheetName = $translationSpreadsheetName;
$this->phpSpreadsheetFunctions = $phpSpreadsheetFunctions; $this->phpSpreadsheetFunctions = $phpSpreadsheetFunctions;
$this->verbose = $verbose;
} }
public function generateLocales(): void public function generateLocales(): void
@ -110,7 +114,7 @@ class LocaleGenerator
} else { } else {
$errorCodeTranslation = "{$errorCode}" . PHP_EOL; $errorCodeTranslation = "{$errorCode}" . PHP_EOL;
fwrite($configFile, $errorCodeTranslation); fwrite($configFile, $errorCodeTranslation);
echo "No {$language} translation available for error code {$errorCode}", PHP_EOL; $this->log("No {$language} translation available for error code {$errorCode}");
} }
} }
@ -125,7 +129,7 @@ class LocaleGenerator
$functionTranslation = "ArgumentSeparator = {$localeValue}" . PHP_EOL; $functionTranslation = "ArgumentSeparator = {$localeValue}" . PHP_EOL;
fwrite($configFile, $functionTranslation); fwrite($configFile, $functionTranslation);
} else { } else {
echo 'No Argument Separator defined', PHP_EOL; $this->log('No Argument Separator defined');
} }
} }
@ -142,12 +146,12 @@ class LocaleGenerator
if ($this->isFunctionCategoryEntry($translationCell)) { if ($this->isFunctionCategoryEntry($translationCell)) {
$this->writeFileSectionHeader($functionFile, "{$translationValue} ({$functionName})"); $this->writeFileSectionHeader($functionFile, "{$translationValue} ({$functionName})");
} elseif (!array_key_exists($functionName, $this->phpSpreadsheetFunctions)) { } elseif (!array_key_exists($functionName, $this->phpSpreadsheetFunctions)) {
echo "Function {$functionName} is not defined in PhpSpreadsheet", PHP_EOL; $this->log("Function {$functionName} is not defined in PhpSpreadsheet");
} elseif (!empty($translationValue)) { } elseif (!empty($translationValue)) {
$functionTranslation = "{$functionName} = {$translationValue}" . PHP_EOL; $functionTranslation = "{$functionName} = {$translationValue}" . PHP_EOL;
fwrite($functionFile, $functionTranslation); fwrite($functionFile, $functionTranslation);
} else { } else {
echo "No {$language} translation available for function {$functionName}", PHP_EOL; $this->log("No {$language} translation available for function {$functionName}");
} }
} }
@ -156,11 +160,11 @@ class LocaleGenerator
protected function openConfigFile(string $locale, string $language, string $localeLanguage) protected function openConfigFile(string $locale, string $language, string $localeLanguage)
{ {
echo "Building locale {$locale} ($language) configuration", PHP_EOL; $this->log("Building locale {$locale} ($language) configuration");
$localeFolder = $this->getLocaleFolder($locale); $localeFolder = $this->getLocaleFolder($locale);
$configFileName = realpath($localeFolder . DIRECTORY_SEPARATOR . 'config'); $configFileName = realpath($localeFolder . DIRECTORY_SEPARATOR . 'config');
echo "Writing locale configuration to {$configFileName}", PHP_EOL; $this->log("Writing locale configuration to {$configFileName}");
$configFile = fopen($configFileName, 'wb'); $configFile = fopen($configFileName, 'wb');
$this->writeFileHeader($configFile, $localeLanguage, $language, 'locale settings'); $this->writeFileHeader($configFile, $localeLanguage, $language, 'locale settings');
@ -170,11 +174,11 @@ class LocaleGenerator
protected function openFunctionNameFile(string $locale, string $language, string $localeLanguage) protected function openFunctionNameFile(string $locale, string $language, string $localeLanguage)
{ {
echo "Building locale {$locale} ($language) function names", PHP_EOL; $this->log("Building locale {$locale} ($language) function names");
$localeFolder = $this->getLocaleFolder($locale); $localeFolder = $this->getLocaleFolder($locale);
$functionFileName = realpath($localeFolder . DIRECTORY_SEPARATOR . 'functions'); $functionFileName = realpath($localeFolder . DIRECTORY_SEPARATOR . 'functions');
echo "Writing local function names to {$functionFileName}", PHP_EOL; $this->log("Writing local function names to {$functionFileName}");
$functionFile = fopen($functionFileName, 'wb'); $functionFile = fopen($functionFileName, 'wb');
$this->writeFileHeader($functionFile, $localeLanguage, $language, 'function name translations'); $this->writeFileHeader($functionFile, $localeLanguage, $language, 'function name translations');
@ -231,7 +235,7 @@ class LocaleGenerator
protected function mapLanguageColumns(Worksheet $translationWorksheet): array protected function mapLanguageColumns(Worksheet $translationWorksheet): array
{ {
$sheetName = $translationWorksheet->getTitle(); $sheetName = $translationWorksheet->getTitle();
echo "Mapping Languages for {$sheetName}:", PHP_EOL; $this->log("Mapping Languages for {$sheetName}:");
$baseColumn = self::ENGLISH_REFERENCE_COLUMN; $baseColumn = self::ENGLISH_REFERENCE_COLUMN;
$languagesList = $translationWorksheet->getColumnIterator(++$baseColumn); $languagesList = $translationWorksheet->getColumnIterator(++$baseColumn);
@ -245,7 +249,7 @@ class LocaleGenerator
/** @var Cell $cell */ /** @var Cell $cell */
if ($this->localeCanBeSupported($translationWorksheet, $cell)) { if ($this->localeCanBeSupported($translationWorksheet, $cell)) {
$languageNameMap[$cell->getColumn()] = $cell->getValue(); $languageNameMap[$cell->getColumn()] = $cell->getValue();
echo $cell->getColumn(), ' -> ', $cell->getValue(), PHP_EOL; $this->log($cell->getColumn() . ' -> ' . $cell->getValue());
} }
} }
} }
@ -270,7 +274,7 @@ class LocaleGenerator
protected function mapErrorCodeRows(): void protected function mapErrorCodeRows(): void
{ {
echo 'Mapping Error Codes:', PHP_EOL; $this->log('Mapping Error Codes:');
$errorList = $this->localeTranslations->getRowIterator(self::ERROR_CODES_FIRST_ROW); $errorList = $this->localeTranslations->getRowIterator(self::ERROR_CODES_FIRST_ROW);
foreach ($errorList as $errorRow) { foreach ($errorList as $errorRow) {
@ -280,7 +284,7 @@ class LocaleGenerator
foreach ($cells as $cell) { foreach ($cells as $cell) {
/** @var Cell $cell */ /** @var Cell $cell */
if ($cell->getValue() != '') { if ($cell->getValue() != '') {
echo $cell->getRow(), ' -> ', $cell->getValue(), PHP_EOL; $this->log($cell->getRow() . ' -> ' . $cell->getValue());
$this->errorCodeMap[$cell->getValue()] = $cell->getRow(); $this->errorCodeMap[$cell->getValue()] = $cell->getRow();
} }
} }
@ -289,7 +293,7 @@ class LocaleGenerator
protected function mapFunctionNameRows(): void protected function mapFunctionNameRows(): void
{ {
echo 'Mapping Functions:', PHP_EOL; $this->log('Mapping Functions:');
$functionList = $this->functionNameTranslations->getRowIterator(self::FUNCTION_NAME_LIST_FIRST_ROW); $functionList = $this->functionNameTranslations->getRowIterator(self::FUNCTION_NAME_LIST_FIRST_ROW);
foreach ($functionList as $functionRow) { foreach ($functionList as $functionRow) {
@ -300,7 +304,7 @@ class LocaleGenerator
/** @var Cell $cell */ /** @var Cell $cell */
if ($this->isFunctionCategoryEntry($cell)) { if ($this->isFunctionCategoryEntry($cell)) {
if (!empty($cell->getValue())) { if (!empty($cell->getValue())) {
echo 'CATEGORY: ', $cell->getValue(), PHP_EOL; $this->log('CATEGORY: ' . $cell->getValue());
$this->functionNameMap[$cell->getValue()] = $cell->getRow(); $this->functionNameMap[$cell->getValue()] = $cell->getRow();
} }
@ -308,10 +312,10 @@ class LocaleGenerator
} }
if ($cell->getValue() != '') { if ($cell->getValue() != '') {
if (is_bool($cell->getValue())) { if (is_bool($cell->getValue())) {
echo $cell->getRow(), ' -> ', ($cell->getValue() ? 'TRUE' : 'FALSE'), PHP_EOL; $this->log($cell->getRow() . ' -> ' . ($cell->getValue() ? 'TRUE' : 'FALSE'));
$this->functionNameMap[($cell->getValue() ? 'TRUE' : 'FALSE')] = $cell->getRow(); $this->functionNameMap[($cell->getValue() ? 'TRUE' : 'FALSE')] = $cell->getRow();
} else { } else {
echo $cell->getRow(), ' -> ', $cell->getValue(), PHP_EOL; $this->log($cell->getRow() . ' -> ' . $cell->getValue());
$this->functionNameMap[$cell->getValue()] = $cell->getRow(); $this->functionNameMap[$cell->getValue()] = $cell->getRow();
} }
} }
@ -328,4 +332,15 @@ class LocaleGenerator
return false; return false;
} }
private function log(string $message): void
{
if ($this->verbose === false) {
return;
}
echo $message, PHP_EOL;
return;
}
} }

View File

@ -299,6 +299,11 @@ class Calculation
'functionCall' => [Functions::class, 'DUMMY'], 'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '1', 'argumentCount' => '1',
], ],
'ARRAYTOTEXT' => [
'category' => Category::CATEGORY_TEXT_AND_DATA,
'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '?',
],
'ASC' => [ 'ASC' => [
'category' => Category::CATEGORY_TEXT_AND_DATA, 'category' => Category::CATEGORY_TEXT_AND_DATA,
'functionCall' => [Functions::class, 'DUMMY'], 'functionCall' => [Functions::class, 'DUMMY'],
@ -766,6 +771,11 @@ class Calculation
'functionCall' => [DateTimeExcel\Difference::class, 'interval'], 'functionCall' => [DateTimeExcel\Difference::class, 'interval'],
'argumentCount' => '2,3', 'argumentCount' => '2,3',
], ],
'DATESTRING' => [
'category' => Category::CATEGORY_DATE_AND_TIME,
'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '?',
],
'DATEVALUE' => [ 'DATEVALUE' => [
'category' => Category::CATEGORY_DATE_AND_TIME, 'category' => Category::CATEGORY_DATE_AND_TIME,
'functionCall' => [DateTimeExcel\DateValue::class, 'fromString'], 'functionCall' => [DateTimeExcel\DateValue::class, 'fromString'],
@ -1527,6 +1537,11 @@ class Calculation
'functionCall' => [Functions::class, 'isText'], 'functionCall' => [Functions::class, 'isText'],
'argumentCount' => '1', 'argumentCount' => '1',
], ],
'ISTHAIDIGIT' => [
'category' => Category::CATEGORY_TEXT_AND_DATA,
'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '?',
],
'JIS' => [ 'JIS' => [
'category' => Category::CATEGORY_TEXT_AND_DATA, 'category' => Category::CATEGORY_TEXT_AND_DATA,
'functionCall' => [Functions::class, 'DUMMY'], 'functionCall' => [Functions::class, 'DUMMY'],
@ -1842,6 +1857,11 @@ class Calculation
'functionCall' => [Financial\CashFlow\Variable\Periodic::class, 'presentValue'], 'functionCall' => [Financial\CashFlow\Variable\Periodic::class, 'presentValue'],
'argumentCount' => '2+', 'argumentCount' => '2+',
], ],
'NUMBERSTRING' => [
'category' => Category::CATEGORY_TEXT_AND_DATA,
'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '?',
],
'NUMBERVALUE' => [ 'NUMBERVALUE' => [
'category' => Category::CATEGORY_TEXT_AND_DATA, 'category' => Category::CATEGORY_TEXT_AND_DATA,
'functionCall' => [TextData\Format::class, 'NUMBERVALUE'], 'functionCall' => [TextData\Format::class, 'NUMBERVALUE'],
@ -2124,6 +2144,16 @@ class Calculation
'functionCall' => [MathTrig\Round::class, 'round'], 'functionCall' => [MathTrig\Round::class, 'round'],
'argumentCount' => '2', 'argumentCount' => '2',
], ],
'ROUNDBAHTDOWN' => [
'category' => Category::CATEGORY_MATH_AND_TRIG,
'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '?',
],
'ROUNDBAHTUP' => [
'category' => Category::CATEGORY_MATH_AND_TRIG,
'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '?',
],
'ROUNDDOWN' => [ 'ROUNDDOWN' => [
'category' => Category::CATEGORY_MATH_AND_TRIG, 'category' => Category::CATEGORY_MATH_AND_TRIG,
'functionCall' => [MathTrig\Round::class, 'down'], 'functionCall' => [MathTrig\Round::class, 'down'],
@ -2427,6 +2457,41 @@ class Calculation
'functionCall' => [TextData\Concatenate::class, 'TEXTJOIN'], 'functionCall' => [TextData\Concatenate::class, 'TEXTJOIN'],
'argumentCount' => '3+', 'argumentCount' => '3+',
], ],
'THAIDAYOFWEEK' => [
'category' => Category::CATEGORY_DATE_AND_TIME,
'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '?',
],
'THAIDIGIT' => [
'category' => Category::CATEGORY_TEXT_AND_DATA,
'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '?',
],
'THAIMONTHOFYEAR' => [
'category' => Category::CATEGORY_DATE_AND_TIME,
'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '?',
],
'THAINUMSOUND' => [
'category' => Category::CATEGORY_TEXT_AND_DATA,
'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '?',
],
'THAINUMSTRING' => [
'category' => Category::CATEGORY_TEXT_AND_DATA,
'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '?',
],
'THAISTRINGLENGTH' => [
'category' => Category::CATEGORY_TEXT_AND_DATA,
'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '?',
],
'THAIYEAR' => [
'category' => Category::CATEGORY_DATE_AND_TIME,
'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '?',
],
'TIME' => [ 'TIME' => [
'category' => Category::CATEGORY_DATE_AND_TIME, 'category' => Category::CATEGORY_DATE_AND_TIME,
'functionCall' => [DateTimeExcel\Time::class, 'fromHMS'], 'functionCall' => [DateTimeExcel\Time::class, 'fromHMS'],
@ -2532,6 +2597,11 @@ class Calculation
'functionCall' => [TextData\Format::class, 'VALUE'], 'functionCall' => [TextData\Format::class, 'VALUE'],
'argumentCount' => '1', 'argumentCount' => '1',
], ],
'VALUETOTEXT' => [
'category' => Category::CATEGORY_TEXT_AND_DATA,
'functionCall' => [Functions::class, 'DUMMY'],
'argumentCount' => '?',
],
'VAR' => [ 'VAR' => [
'category' => Category::CATEGORY_STATISTICAL, 'category' => Category::CATEGORY_STATISTICAL,
'functionCall' => [Statistical\Variances::class, 'VAR'], 'functionCall' => [Statistical\Variances::class, 'VAR'],

View File

@ -39,6 +39,7 @@ DVARP = DVARIANSP
## ##
DATE = DATO DATE = DATO
DATEDIF = DATO.FORSKEL DATEDIF = DATO.FORSKEL
DATESTRING = DATOSTRENG
DATEVALUE = DATOVÆRDI DATEVALUE = DATOVÆRDI
DAY = DAG DAY = DAG
DAYS = DAGE DAYS = DAGE
@ -53,6 +54,9 @@ NETWORKDAYS = ANTAL.ARBEJDSDAGE
NETWORKDAYS.INTL = ANTAL.ARBEJDSDAGE.INTL NETWORKDAYS.INTL = ANTAL.ARBEJDSDAGE.INTL
NOW = NU NOW = NU
SECOND = SEKUND SECOND = SEKUND
THAIDAYOFWEEK = THAILANDSKUGEDAG
THAIMONTHOFYEAR = THAILANDSKMÅNED
THAIYEAR = THAILANDSKÅR
TIME = TID TIME = TID
TIMEVALUE = TIDSVÆRDI TIMEVALUE = TIDSVÆRDI
TODAY = IDAG TODAY = IDAG
@ -301,6 +305,8 @@ RAND = SLUMP
RANDBETWEEN = SLUMPMELLEM RANDBETWEEN = SLUMPMELLEM
ROMAN = ROMERTAL ROMAN = ROMERTAL
ROUND = AFRUND ROUND = AFRUND
ROUNDBAHTDOWN = RUNDBAHTNED
ROUNDBAHTUP = RUNDBAHTOP
ROUNDDOWN = RUND.NED ROUNDDOWN = RUND.NED
ROUNDUP = RUND.OP ROUNDUP = RUND.OP
SEC = SEC SEC = SEC
@ -450,10 +456,12 @@ DOLLAR = KR
EXACT = EKSAKT EXACT = EKSAKT
FIND = FIND FIND = FIND
FIXED = FAST FIXED = FAST
ISTHAIDIGIT = ERTHAILANDSKCIFFER
LEFT = VENSTRE LEFT = VENSTRE
LEN = LÆNGDE LEN = LÆNGDE
LOWER = SMÅ.BOGSTAVER LOWER = SMÅ.BOGSTAVER
MID = MIDT MID = MIDT
NUMBERSTRING = TALSTRENG
NUMBERVALUE = TALVÆRDI NUMBERVALUE = TALVÆRDI
PHONETIC = FONETISK PHONETIC = FONETISK
PROPER = STORT.FORBOGSTAV PROPER = STORT.FORBOGSTAV
@ -465,6 +473,10 @@ SUBSTITUTE = UDSKIFT
T = T T = T
TEXT = TEKST TEXT = TEKST
TEXTJOIN = TEKST.KOMBINER TEXTJOIN = TEKST.KOMBINER
THAIDIGIT = THAILANDSKCIFFER
THAINUMSOUND = THAILANDSKNUMLYD
THAINUMSTRING = THAILANDSKNUMSTRENG
THAISTRINGLENGTH = THAILANDSKSTRENGLÆNGDE
TRIM = FJERN.OVERFLØDIGE.BLANKE TRIM = FJERN.OVERFLØDIGE.BLANKE
UNICHAR = UNICHAR UNICHAR = UNICHAR
UNICODE = UNICODE UNICODE = UNICODE

View File

@ -52,6 +52,9 @@ NETWORKDAYS = NETTOARBEITSTAGE
NETWORKDAYS.INTL = NETTOARBEITSTAGE.INTL NETWORKDAYS.INTL = NETTOARBEITSTAGE.INTL
NOW = JETZT NOW = JETZT
SECOND = SEKUNDE SECOND = SEKUNDE
THAIDAYOFWEEK = THAIWOCHENTAG
THAIMONTHOFYEAR = THAIMONATDESJAHRES
THAIYEAR = THAIJAHR
TIME = ZEIT TIME = ZEIT
TIMEVALUE = ZEITWERT TIMEVALUE = ZEITWERT
TODAY = HEUTE TODAY = HEUTE
@ -300,6 +303,8 @@ RAND = ZUFALLSZAHL
RANDBETWEEN = ZUFALLSBEREICH RANDBETWEEN = ZUFALLSBEREICH
ROMAN = RÖMISCH ROMAN = RÖMISCH
ROUND = RUNDEN ROUND = RUNDEN
ROUNDBAHTDOWN = RUNDBAHTNED
ROUNDBAHTUP = BAHTAUFRUNDEN
ROUNDDOWN = ABRUNDEN ROUNDDOWN = ABRUNDEN
ROUNDUP = AUFRUNDEN ROUNDUP = AUFRUNDEN
SEC = SEC SEC = SEC
@ -449,6 +454,7 @@ DOLLAR = DM
EXACT = IDENTISCH EXACT = IDENTISCH
FIND = FINDEN FIND = FINDEN
FIXED = FEST FIXED = FEST
ISTHAIDIGIT = ISTTHAIZAHLENWORT
LEFT = LINKS LEFT = LINKS
LEN = LÄNGE LEN = LÄNGE
LOWER = KLEIN LOWER = KLEIN
@ -463,6 +469,10 @@ SUBSTITUTE = WECHSELN
T = T T = T
TEXT = TEXT TEXT = TEXT
TEXTJOIN = TEXTVERKETTEN TEXTJOIN = TEXTVERKETTEN
THAIDIGIT = THAIZAHLENWORT
THAINUMSOUND = THAIZAHLSOUND
THAINUMSTRING = THAILANDSKNUMSTRENG
THAISTRINGLENGTH = THAIZEICHENFOLGENLÄNGE
TRIM = GLÄTTEN TRIM = GLÄTTEN
UNICHAR = UNIZEICHEN UNICHAR = UNIZEICHEN
UNICODE = UNICODE UNICODE = UNICODE

View File

@ -39,6 +39,7 @@ DVARP = BDVARP
## ##
DATE = FECHA DATE = FECHA
DATEDIF = SIFECHA DATEDIF = SIFECHA
DATESTRING = CADENA.FECHA
DATEVALUE = FECHANUMERO DATEVALUE = FECHANUMERO
DAY = DIA DAY = DIA
DAYS = DIAS DAYS = DIAS
@ -53,6 +54,9 @@ NETWORKDAYS = DIAS.LAB
NETWORKDAYS.INTL = DIAS.LAB.INTL NETWORKDAYS.INTL = DIAS.LAB.INTL
NOW = AHORA NOW = AHORA
SECOND = SEGUNDO SECOND = SEGUNDO
THAIDAYOFWEEK = DIASEMTAI
THAIMONTHOFYEAR = MESAÑOTAI
THAIYEAR = AÑOTAI
TIME = NSHORA TIME = NSHORA
TIMEVALUE = HORANUMERO TIMEVALUE = HORANUMERO
TODAY = HOY TODAY = HOY
@ -301,6 +305,8 @@ RAND = ALEATORIO
RANDBETWEEN = ALEATORIO.ENTRE RANDBETWEEN = ALEATORIO.ENTRE
ROMAN = NUMERO.ROMANO ROMAN = NUMERO.ROMANO
ROUND = REDONDEAR ROUND = REDONDEAR
ROUNDBAHTDOWN = REDONDEAR.BAHT.MAS
ROUNDBAHTUP = REDONDEAR.BAHT.MENOS
ROUNDDOWN = REDONDEAR.MENOS ROUNDDOWN = REDONDEAR.MENOS
ROUNDUP = REDONDEAR.MAS ROUNDUP = REDONDEAR.MAS
SEC = SEC SEC = SEC
@ -450,10 +456,12 @@ DOLLAR = MONEDA
EXACT = IGUAL EXACT = IGUAL
FIND = ENCONTRAR FIND = ENCONTRAR
FIXED = DECIMAL FIXED = DECIMAL
ISTHAIDIGIT = ESDIGITOTAI
LEFT = IZQUIERDA LEFT = IZQUIERDA
LEN = LARGO LEN = LARGO
LOWER = MINUSC LOWER = MINUSC
MID = EXTRAE MID = EXTRAE
NUMBERSTRING = CADENA.NUMERO
NUMBERVALUE = VALOR.NUMERO NUMBERVALUE = VALOR.NUMERO
PHONETIC = FONETICO PHONETIC = FONETICO
PROPER = NOMPROPIO PROPER = NOMPROPIO
@ -465,6 +473,10 @@ SUBSTITUTE = SUSTITUIR
T = T T = T
TEXT = TEXTO TEXT = TEXTO
TEXTJOIN = UNIRCADENAS TEXTJOIN = UNIRCADENAS
THAIDIGIT = DIGITOTAI
THAINUMSOUND = SONNUMTAI
THAINUMSTRING = CADENANUMTAI
THAISTRINGLENGTH = LONGCADENATAI
TRIM = ESPACIOS TRIM = ESPACIOS
UNICHAR = UNICAR UNICHAR = UNICAR
UNICODE = UNICODE UNICODE = UNICODE

View File

@ -39,6 +39,7 @@ DVARP = TVARIANSSIP
## ##
DATE = PÄIVÄYS DATE = PÄIVÄYS
DATEDIF = PVMERO DATEDIF = PVMERO
DATESTRING = PVMMERKKIJONO
DATEVALUE = PÄIVÄYSARVO DATEVALUE = PÄIVÄYSARVO
DAY = PÄIVÄ DAY = PÄIVÄ
DAYS = PÄIVÄT DAYS = PÄIVÄT
@ -53,6 +54,9 @@ NETWORKDAYS = TYÖPÄIVÄT
NETWORKDAYS.INTL = TYÖPÄIVÄT.KANSVÄL NETWORKDAYS.INTL = TYÖPÄIVÄT.KANSVÄL
NOW = NYT NOW = NYT
SECOND = SEKUNNIT SECOND = SEKUNNIT
THAIDAYOFWEEK = THAI.VIIKONPÄIVÄ
THAIMONTHOFYEAR = THAI.KUUKAUSI
THAIYEAR = THAI.VUOSI
TIME = AIKA TIME = AIKA
TIMEVALUE = AIKA_ARVO TIMEVALUE = AIKA_ARVO
TODAY = TÄMÄ.PÄIVÄ TODAY = TÄMÄ.PÄIVÄ
@ -301,6 +305,8 @@ RAND = SATUNNAISLUKU
RANDBETWEEN = SATUNNAISLUKU.VÄLILTÄ RANDBETWEEN = SATUNNAISLUKU.VÄLILTÄ
ROMAN = ROMAN ROMAN = ROMAN
ROUND = PYÖRISTÄ ROUND = PYÖRISTÄ
ROUNDBAHTDOWN = PYÖRISTÄ.BAHT.ALAS
ROUNDBAHTUP = PYÖRISTÄ.BAHT.YLÖS
ROUNDDOWN = PYÖRISTÄ.DES.ALAS ROUNDDOWN = PYÖRISTÄ.DES.ALAS
ROUNDUP = PYÖRISTÄ.DES.YLÖS ROUNDUP = PYÖRISTÄ.DES.YLÖS
SEC = SEK SEC = SEK
@ -450,10 +456,12 @@ DOLLAR = VALUUTTA
EXACT = VERTAA EXACT = VERTAA
FIND = ETSI FIND = ETSI
FIXED = KIINTEÄ FIXED = KIINTEÄ
ISTHAIDIGIT = ON.THAI.NUMERO
LEFT = VASEN LEFT = VASEN
LEN = PITUUS LEN = PITUUS
LOWER = PIENET LOWER = PIENET
MID = POIMI.TEKSTI MID = POIMI.TEKSTI
NUMBERSTRING = NROMERKKIJONO
NUMBERVALUE = NROARVO NUMBERVALUE = NROARVO
PHONETIC = FONEETTINEN PHONETIC = FONEETTINEN
PROPER = ERISNIMI PROPER = ERISNIMI
@ -465,6 +473,10 @@ SUBSTITUTE = VAIHDA
T = T T = T
TEXT = TEKSTI TEXT = TEKSTI
TEXTJOIN = TEKSTI.YHDISTÄ TEXTJOIN = TEKSTI.YHDISTÄ
THAIDIGIT = THAI.NUMERO
THAINUMSOUND = THAI.LUKU.ÄÄNI
THAINUMSTRING = THAI.LUKU.MERKKIJONO
THAISTRINGLENGTH = THAI.MERKKIJONON.PITUUS
TRIM = POISTA.VÄLIT TRIM = POISTA.VÄLIT
UNICHAR = UNICODEMERKKI UNICHAR = UNICODEMERKKI
UNICODE = UNICODE UNICODE = UNICODE

View File

@ -39,6 +39,7 @@ DVARP = AB.VAR2
## ##
DATE = DÁTUM DATE = DÁTUM
DATEDIF = DÁTUMTÓLIG DATEDIF = DÁTUMTÓLIG
DATESTRING = DÁTUMSZÖVEG
DATEVALUE = DÁTUMÉRTÉK DATEVALUE = DÁTUMÉRTÉK
DAY = NAP DAY = NAP
DAYS = NAPOK DAYS = NAPOK
@ -53,6 +54,9 @@ NETWORKDAYS = ÖSSZ.MUNKANAP
NETWORKDAYS.INTL = ÖSSZ.MUNKANAP.INTL NETWORKDAYS.INTL = ÖSSZ.MUNKANAP.INTL
NOW = MOST NOW = MOST
SECOND = MPERC SECOND = MPERC
THAIDAYOFWEEK = THAIHÉTNAPJA
THAIMONTHOFYEAR = THAIHÓNAP
THAIYEAR = THAIÉV
TIME = IDŐ TIME = IDŐ
TIMEVALUE = IDŐÉRTÉK TIMEVALUE = IDŐÉRTÉK
TODAY = MA TODAY = MA
@ -301,6 +305,8 @@ RAND = VÉL
RANDBETWEEN = VÉLETLEN.KÖZÖTT RANDBETWEEN = VÉLETLEN.KÖZÖTT
ROMAN = RÓMAI ROMAN = RÓMAI
ROUND = KEREKÍTÉS ROUND = KEREKÍTÉS
ROUNDBAHTDOWN = BAHTKEREK.LE
ROUNDBAHTUP = BAHTKEREK.FEL
ROUNDDOWN = KEREK.LE ROUNDDOWN = KEREK.LE
ROUNDUP = KEREK.FEL ROUNDUP = KEREK.FEL
SEC = SEC SEC = SEC
@ -450,10 +456,12 @@ DOLLAR = FORINT
EXACT = AZONOS EXACT = AZONOS
FIND = SZÖVEG.TALÁL FIND = SZÖVEG.TALÁL
FIXED = FIX FIXED = FIX
ISTHAIDIGIT = ON.THAI.NUMERO
LEFT = BAL LEFT = BAL
LEN = HOSSZ LEN = HOSSZ
LOWER = KISBETŰ LOWER = KISBETŰ
MID = KÖZÉP MID = KÖZÉP
NUMBERSTRING = SZÁM.BETŰVEL
NUMBERVALUE = SZÁMÉRTÉK NUMBERVALUE = SZÁMÉRTÉK
PHONETIC = FONETIKUS PHONETIC = FONETIKUS
PROPER = TNÉV PROPER = TNÉV
@ -465,6 +473,10 @@ SUBSTITUTE = HELYETTE
T = T T = T
TEXT = SZÖVEG TEXT = SZÖVEG
TEXTJOIN = SZÖVEGÖSSZEFŰZÉS TEXTJOIN = SZÖVEGÖSSZEFŰZÉS
THAIDIGIT = THAISZÁM
THAINUMSOUND = THAISZÁMHANG
THAINUMSTRING = THAISZÁMKAR
THAISTRINGLENGTH = THAIKARHOSSZ
TRIM = KIMETSZ TRIM = KIMETSZ
UNICHAR = UNIKARAKTER UNICHAR = UNIKARAKTER
UNICODE = UNICODE UNICODE = UNICODE

View File

@ -39,6 +39,7 @@ DVARP = DB.VAR.POP
## ##
DATE = DATA DATE = DATA
DATEDIF = DATA.DIFF DATEDIF = DATA.DIFF
DATESTRING = DATA.STRINGA
DATEVALUE = DATA.VALORE DATEVALUE = DATA.VALORE
DAY = GIORNO DAY = GIORNO
DAYS = GIORNI DAYS = GIORNI
@ -53,6 +54,9 @@ NETWORKDAYS = GIORNI.LAVORATIVI.TOT
NETWORKDAYS.INTL = GIORNI.LAVORATIVI.TOT.INTL NETWORKDAYS.INTL = GIORNI.LAVORATIVI.TOT.INTL
NOW = ADESSO NOW = ADESSO
SECOND = SECONDO SECOND = SECONDO
THAIDAYOFWEEK = THAIGIORNODELLASETTIMANA
THAIMONTHOFYEAR = THAIMESEDELLANNO
THAIYEAR = THAIANNO
TIME = ORARIO TIME = ORARIO
TIMEVALUE = ORARIO.VALORE TIMEVALUE = ORARIO.VALORE
TODAY = OGGI TODAY = OGGI
@ -301,6 +305,8 @@ RAND = CASUALE
RANDBETWEEN = CASUALE.TRA RANDBETWEEN = CASUALE.TRA
ROMAN = ROMANO ROMAN = ROMANO
ROUND = ARROTONDA ROUND = ARROTONDA
ROUNDBAHTDOWN = ARROTBAHTGIU
ROUNDBAHTUP = ARROTBAHTSU
ROUNDDOWN = ARROTONDA.PER.DIF ROUNDDOWN = ARROTONDA.PER.DIF
ROUNDUP = ARROTONDA.PER.ECC ROUNDUP = ARROTONDA.PER.ECC
SEC = SEC SEC = SEC
@ -450,10 +456,12 @@ DOLLAR = VALUTA
EXACT = IDENTICO EXACT = IDENTICO
FIND = TROVA FIND = TROVA
FIXED = FISSO FIXED = FISSO
ISTHAIDIGIT = ÈTHAICIFRA
LEFT = SINISTRA LEFT = SINISTRA
LEN = LUNGHEZZA LEN = LUNGHEZZA
LOWER = MINUSC LOWER = MINUSC
MID = STRINGA.ESTRAI MID = STRINGA.ESTRAI
NUMBERSTRING = NUMERO.STRINGA
NUMBERVALUE = NUMERO.VALORE NUMBERVALUE = NUMERO.VALORE
PHONETIC = FURIGANA PHONETIC = FURIGANA
PROPER = MAIUSC.INIZ PROPER = MAIUSC.INIZ
@ -465,6 +473,10 @@ SUBSTITUTE = SOSTITUISCI
T = T T = T
TEXT = TESTO TEXT = TESTO
TEXTJOIN = TESTO.UNISCI TEXTJOIN = TESTO.UNISCI
THAIDIGIT = THAICIFRA
THAINUMSOUND = THAINUMSUONO
THAINUMSTRING = THAISZÁMKAR
THAISTRINGLENGTH = THAILUNGSTRINGA
TRIM = ANNULLA.SPAZI TRIM = ANNULLA.SPAZI
UNICHAR = CARATT.UNI UNICHAR = CARATT.UNI
UNICODE = UNICODE UNICODE = UNICODE

View File

@ -39,6 +39,7 @@ DVARP = DVARIANSP
## ##
DATE = DATO DATE = DATO
DATEDIF = DATODIFF DATEDIF = DATODIFF
DATESTRING = DATOSTRENG
DATEVALUE = DATOVERDI DATEVALUE = DATOVERDI
DAY = DAG DAY = DAG
DAYS = DAGER DAYS = DAGER
@ -53,6 +54,9 @@ NETWORKDAYS = NETT.ARBEIDSDAGER
NETWORKDAYS.INTL = NETT.ARBEIDSDAGER.INTL NETWORKDAYS.INTL = NETT.ARBEIDSDAGER.INTL
NOW = NÅ NOW = NÅ
SECOND = SEKUND SECOND = SEKUND
THAIDAYOFWEEK = THAIUKEDAG
THAIMONTHOFYEAR = THAIMÅNED
THAIYEAR = THAIÅR
TIME = TID TIME = TID
TIMEVALUE = TIDSVERDI TIMEVALUE = TIDSVERDI
TODAY = IDAG TODAY = IDAG
@ -301,6 +305,8 @@ RAND = TILFELDIG
RANDBETWEEN = TILFELDIGMELLOM RANDBETWEEN = TILFELDIGMELLOM
ROMAN = ROMERTALL ROMAN = ROMERTALL
ROUND = AVRUND ROUND = AVRUND
ROUNDBAHTDOWN = RUNDAVBAHTNEDOVER
ROUNDBAHTUP = RUNDAVBAHTOPPOVER
ROUNDDOWN = AVRUND.NED ROUNDDOWN = AVRUND.NED
ROUNDUP = AVRUND.OPP ROUNDUP = AVRUND.OPP
SEC = SEC SEC = SEC
@ -451,10 +457,12 @@ DOLLAR = VALUTA
EXACT = EKSAKT EXACT = EKSAKT
FIND = FINN FIND = FINN
FIXED = FASTSATT FIXED = FASTSATT
ISTHAIDIGIT = ERTHAISIFFER
LEFT = VENSTRE LEFT = VENSTRE
LEN = LENGDE LEN = LENGDE
LOWER = SMÅ LOWER = SMÅ
MID = DELTEKST MID = DELTEKST
NUMBERSTRING = TALLSTRENG
NUMBERVALUE = TALLVERDI NUMBERVALUE = TALLVERDI
PHONETIC = FURIGANA PHONETIC = FURIGANA
PROPER = STOR.FORBOKSTAV PROPER = STOR.FORBOKSTAV
@ -466,6 +474,10 @@ SUBSTITUTE = BYTT.UT
T = T T = T
TEXT = TEKST TEXT = TEKST
TEXTJOIN = TEKST.KOMBINER TEXTJOIN = TEKST.KOMBINER
THAIDIGIT = THAISIFFER
THAINUMSOUND = THAINUMLYD
THAINUMSTRING = THAINUMSTRENG
THAISTRINGLENGTH = THAISTRENGLENGDE
TRIM = TRIMME TRIM = TRIMME
UNICHAR = UNICODETEGN UNICHAR = UNICODETEGN
UNICODE = UNICODE UNICODE = UNICODE

View File

@ -38,6 +38,7 @@ DVARP = DBVARP
## Datum- en tijdfuncties (Date & Time Functions) ## Datum- en tijdfuncties (Date & Time Functions)
## ##
DATE = DATUM DATE = DATUM
DATESTRING = DATUMNOTATIE
DATEVALUE = DATUMWAARDE DATEVALUE = DATUMWAARDE
DAY = DAG DAY = DAG
DAYS = DAGEN DAYS = DAGEN
@ -52,6 +53,9 @@ NETWORKDAYS = NETTO.WERKDAGEN
NETWORKDAYS.INTL = NETWERKDAGEN.INTL NETWORKDAYS.INTL = NETWERKDAGEN.INTL
NOW = NU NOW = NU
SECOND = SECONDE SECOND = SECONDE
THAIDAYOFWEEK = THAIS.WEEKDAG
THAIMONTHOFYEAR = THAIS.MAAND.VAN.JAAR
THAIYEAR = THAIS.JAAR
TIME = TIJD TIME = TIJD
TIMEVALUE = TIJDWAARDE TIMEVALUE = TIJDWAARDE
TODAY = VANDAAG TODAY = VANDAAG
@ -300,6 +304,8 @@ RAND = ASELECT
RANDBETWEEN = ASELECTTUSSEN RANDBETWEEN = ASELECTTUSSEN
ROMAN = ROMEINS ROMAN = ROMEINS
ROUND = AFRONDEN ROUND = AFRONDEN
ROUNDBAHTDOWN = BAHT.AFR.NAAR.BENEDEN
ROUNDBAHTUP = BAHT.AFR.NAAR.BOVEN
ROUNDDOWN = AFRONDEN.NAAR.BENEDEN ROUNDDOWN = AFRONDEN.NAAR.BENEDEN
ROUNDUP = AFRONDEN.NAAR.BOVEN ROUNDUP = AFRONDEN.NAAR.BOVEN
SEC = SEC SEC = SEC
@ -449,10 +455,12 @@ DOLLAR = EURO
EXACT = GELIJK EXACT = GELIJK
FIND = VIND.ALLES FIND = VIND.ALLES
FIXED = VAST FIXED = VAST
ISTHAIDIGIT = IS.THAIS.CIJFER
LEFT = LINKS LEFT = LINKS
LEN = LENGTE LEN = LENGTE
LOWER = KLEINE.LETTERS LOWER = KLEINE.LETTERS
MID = DEEL MID = DEEL
NUMBERSTRING = GETALNOTATIE
NUMBERVALUE = NUMERIEKE.WAARDE NUMBERVALUE = NUMERIEKE.WAARDE
PHONETIC = FONETISCH PHONETIC = FONETISCH
PROPER = BEGINLETTERS PROPER = BEGINLETTERS
@ -464,6 +472,10 @@ SUBSTITUTE = SUBSTITUEREN
T = T T = T
TEXT = TEKST TEXT = TEKST
TEXTJOIN = TEKST.COMBINEREN TEXTJOIN = TEKST.COMBINEREN
THAIDIGIT = THAIS.CIJFER
THAINUMSOUND = THAIS.GETAL.GELUID
THAINUMSTRING = THAIS.GETAL.REEKS
THAISTRINGLENGTH = THAIS.REEKS.LENGTE
TRIM = SPATIES.WISSEN TRIM = SPATIES.WISSEN
UNICHAR = UNITEKEN UNICHAR = UNITEKEN
UNICODE = UNICODE UNICODE = UNICODE

View File

@ -39,6 +39,7 @@ DVARP = BD.WARIANCJA.POPUL
## ##
DATE = DATA DATE = DATA
DATEDIF = DATA.RÓŻNICA DATEDIF = DATA.RÓŻNICA
DATESTRING = DATA.CIĄG.ZNAK
DATEVALUE = DATA.WARTOŚĆ DATEVALUE = DATA.WARTOŚĆ
DAY = DZIEŃ DAY = DZIEŃ
DAYS = DNI DAYS = DNI
@ -53,6 +54,9 @@ NETWORKDAYS = DNI.ROBOCZE
NETWORKDAYS.INTL = DNI.ROBOCZE.NIESTAND NETWORKDAYS.INTL = DNI.ROBOCZE.NIESTAND
NOW = TERAZ NOW = TERAZ
SECOND = SEKUNDA SECOND = SEKUNDA
THAIDAYOFWEEK = TAJ.DZIEŃ.TYGODNIA
THAIMONTHOFYEAR = TAJ.MIESIĄC.ROKU
THAIYEAR = TAJ.ROK
TIME = CZAS TIME = CZAS
TIMEVALUE = CZAS.WARTOŚĆ TIMEVALUE = CZAS.WARTOŚĆ
TODAY = DZIŚ TODAY = DZIŚ
@ -301,6 +305,8 @@ RAND = LOS
RANDBETWEEN = LOS.ZAKR RANDBETWEEN = LOS.ZAKR
ROMAN = RZYMSKIE ROMAN = RZYMSKIE
ROUND = ZAOKR ROUND = ZAOKR
ROUNDBAHTDOWN = ZAOKR.DÓŁ.BAT
ROUNDBAHTUP = ZAOKR.GÓRA.BAT
ROUNDDOWN = ZAOKR.DÓŁ ROUNDDOWN = ZAOKR.DÓŁ
ROUNDUP = ZAOKR.GÓRA ROUNDUP = ZAOKR.GÓRA
SEC = SEC SEC = SEC
@ -450,10 +456,12 @@ DOLLAR = KWOTA
EXACT = PORÓWNAJ EXACT = PORÓWNAJ
FIND = ZNAJDŹ FIND = ZNAJDŹ
FIXED = ZAOKR.DO.TEKST FIXED = ZAOKR.DO.TEKST
ISTHAIDIGIT = CZY.CYFRA.TAJ
LEFT = LEWY LEFT = LEWY
LEN = DŁ LEN = DŁ
LOWER = LITERY.MAŁE LOWER = LITERY.MAŁE
MID = FRAGMENT.TEKSTU MID = FRAGMENT.TEKSTU
NUMBERSTRING = LICZBA.CIĄG.ZNAK
NUMBERVALUE = WARTOŚĆ.LICZBOWA NUMBERVALUE = WARTOŚĆ.LICZBOWA
PROPER = Z.WIELKIEJ.LITERY PROPER = Z.WIELKIEJ.LITERY
REPLACE = ZASTĄP REPLACE = ZASTĄP
@ -464,6 +472,10 @@ SUBSTITUTE = PODSTAW
T = T T = T
TEXT = TEKST TEXT = TEKST
TEXTJOIN = POŁĄCZ.TEKSTY TEXTJOIN = POŁĄCZ.TEKSTY
THAIDIGIT = TAJ.CYFRA
THAINUMSOUND = TAJ.DŹWIĘK.NUM
THAINUMSTRING = TAJ.CIĄG.NUM
THAISTRINGLENGTH = TAJ.DŁUGOŚĆ.CIĄGU
TRIM = USUŃ.ZBĘDNE.ODSTĘPY TRIM = USUŃ.ZBĘDNE.ODSTĘPY
UNICHAR = ZNAK.UNICODE UNICHAR = ZNAK.UNICODE
UNICODE = UNICODE UNICODE = UNICODE

View File

@ -39,6 +39,7 @@ DVARP = BDVARP
## ##
DATE = DATA DATE = DATA
DATEDIF = DATADIF DATEDIF = DATADIF
DATESTRING = DATA.SÉRIE
DATEVALUE = DATA.VALOR DATEVALUE = DATA.VALOR
DAY = DIA DAY = DIA
DAYS = DIAS DAYS = DIAS
@ -454,6 +455,7 @@ LEFT = ESQUERDA
LEN = NÚM.CARACT LEN = NÚM.CARACT
LOWER = MINÚSCULA LOWER = MINÚSCULA
MID = EXT.TEXTO MID = EXT.TEXTO
NUMBERSTRING = SEQÜÊNCIA.NÚMERO
NUMBERVALUE = VALORNUMÉRICO NUMBERVALUE = VALORNUMÉRICO
PHONETIC = FONÉTICA PHONETIC = FONÉTICA
PROPER = PRI.MAIÚSCULA PROPER = PRI.MAIÚSCULA

View File

@ -39,6 +39,7 @@ DVARP = BDVARP
## ##
DATE = DATA DATE = DATA
DATEDIF = DATADIF DATEDIF = DATADIF
DATESTRING = DATA.CADEIA
DATEVALUE = DATA.VALOR DATEVALUE = DATA.VALOR
DAY = DIA DAY = DIA
DAYS = DIAS DAYS = DIAS
@ -53,6 +54,9 @@ NETWORKDAYS = DIATRABALHOTOTAL
NETWORKDAYS.INTL = DIATRABALHOTOTAL.INTL NETWORKDAYS.INTL = DIATRABALHOTOTAL.INTL
NOW = AGORA NOW = AGORA
SECOND = SEGUNDO SECOND = SEGUNDO
THAIDAYOFWEEK = DIA.DA.SEMANA.TAILANDÊS
THAIMONTHOFYEAR = MÊS.DO.ANO.TAILANDÊS
THAIYEAR = ANO.TAILANDÊS
TIME = TEMPO TIME = TEMPO
TIMEVALUE = VALOR.TEMPO TIMEVALUE = VALOR.TEMPO
TODAY = HOJE TODAY = HOJE
@ -301,6 +305,8 @@ RAND = ALEATÓRIO
RANDBETWEEN = ALEATÓRIOENTRE RANDBETWEEN = ALEATÓRIOENTRE
ROMAN = ROMANO ROMAN = ROMANO
ROUND = ARRED ROUND = ARRED
ROUNDBAHTDOWN = ARREDOND.BAHT.BAIXO
ROUNDBAHTUP = ARREDOND.BAHT.CIMA
ROUNDDOWN = ARRED.PARA.BAIXO ROUNDDOWN = ARRED.PARA.BAIXO
ROUNDUP = ARRED.PARA.CIMA ROUNDUP = ARRED.PARA.CIMA
SEC = SEC SEC = SEC
@ -450,10 +456,12 @@ DOLLAR = MOEDA
EXACT = EXATO EXACT = EXATO
FIND = LOCALIZAR FIND = LOCALIZAR
FIXED = FIXA FIXED = FIXA
ISTHAIDIGIT = É.DÍGITO.TAILANDÊS
LEFT = ESQUERDA LEFT = ESQUERDA
LEN = NÚM.CARAT LEN = NÚM.CARAT
LOWER = MINÚSCULAS LOWER = MINÚSCULAS
MID = SEG.TEXTO MID = SEG.TEXTO
NUMBERSTRING = NÚMERO.CADEIA
NUMBERVALUE = VALOR.NÚMERO NUMBERVALUE = VALOR.NÚMERO
PHONETIC = FONÉTICA PHONETIC = FONÉTICA
PROPER = INICIAL.MAIÚSCULA PROPER = INICIAL.MAIÚSCULA
@ -465,6 +473,10 @@ SUBSTITUTE = SUBST
T = T T = T
TEXT = TEXTO TEXT = TEXTO
TEXTJOIN = UNIRTEXTO TEXTJOIN = UNIRTEXTO
THAIDIGIT = DÍGITO.TAILANDÊS
THAINUMSOUND = SOM.NÚM.TAILANDÊS
THAINUMSTRING = CADEIA.NÚM.TAILANDÊS
THAISTRINGLENGTH = COMP.CADEIA.TAILANDÊS
TRIM = COMPACTAR TRIM = COMPACTAR
UNICHAR = UNICARÁT UNICHAR = UNICARÁT
UNICODE = UNICODE UNICODE = UNICODE

View File

@ -39,6 +39,7 @@ DVARP = БДДИСПП
## ##
DATE = ДАТА DATE = ДАТА
DATEDIF = РАЗНДАТ DATEDIF = РАЗНДАТ
DATESTRING = СТРОКАДАННЫХ
DATEVALUE = ДАТАЗНАЧ DATEVALUE = ДАТАЗНАЧ
DAY = ДЕНЬ DAY = ДЕНЬ
DAYS = ДНИ DAYS = ДНИ
@ -53,6 +54,9 @@ NETWORKDAYS = ЧИСТРАБДНИ
NETWORKDAYS.INTL = ЧИСТРАБДНИ.МЕЖД NETWORKDAYS.INTL = ЧИСТРАБДНИ.МЕЖД
NOW = ТДАТА NOW = ТДАТА
SECOND = СЕКУНДЫ SECOND = СЕКУНДЫ
THAIDAYOFWEEK = ТАЙДЕНЬНЕД
THAIMONTHOFYEAR = ТАЙМЕСЯЦ
THAIYEAR = ТАЙГОД
TIME = ВРЕМЯ TIME = ВРЕМЯ
TIMEVALUE = ВРЕМЗНАЧ TIMEVALUE = ВРЕМЗНАЧ
TODAY = СЕГОДНЯ TODAY = СЕГОДНЯ
@ -301,6 +305,8 @@ RAND = СЛЧИС
RANDBETWEEN = СЛУЧМЕЖДУ RANDBETWEEN = СЛУЧМЕЖДУ
ROMAN = РИМСКОЕ ROMAN = РИМСКОЕ
ROUND = ОКРУГЛ ROUND = ОКРУГЛ
ROUNDBAHTDOWN = ОКРУГЛБАТВНИЗ
ROUNDBAHTUP = ОКРУГЛБАТВВЕРХ
ROUNDDOWN = ОКРУГЛВНИЗ ROUNDDOWN = ОКРУГЛВНИЗ
ROUNDUP = ОКРУГЛВВЕРХ ROUNDUP = ОКРУГЛВВЕРХ
SEC = SEC SEC = SEC
@ -450,10 +456,12 @@ DOLLAR = РУБЛЬ
EXACT = СОВПАД EXACT = СОВПАД
FIND = НАЙТИ FIND = НАЙТИ
FIXED = ФИКСИРОВАННЫЙ FIXED = ФИКСИРОВАННЫЙ
ISTHAIDIGIT = TAYRAKAMIYSA
LEFT = ЛЕВСИМВ LEFT = ЛЕВСИМВ
LEN = ДЛСТР LEN = ДЛСТР
LOWER = СТРОЧН LOWER = СТРОЧН
MID = ПСТР MID = ПСТР
NUMBERSTRING = СТРОКАЧИСЕЛ
NUMBERVALUE = ЧЗНАЧ NUMBERVALUE = ЧЗНАЧ
PROPER = ПРОПНАЧ PROPER = ПРОПНАЧ
REPLACE = ЗАМЕНИТЬ REPLACE = ЗАМЕНИТЬ
@ -464,6 +472,10 @@ SUBSTITUTE = ПОДСТАВИТЬ
T = Т T = Т
TEXT = ТЕКСТ TEXT = ТЕКСТ
TEXTJOIN = ОБЪЕДИНИТЬ TEXTJOIN = ОБЪЕДИНИТЬ
THAIDIGIT = ТАЙЦИФРА
THAINUMSOUND = ТАЙЧИСЛОВЗВУК
THAINUMSTRING = ТАЙЧИСЛОВСТРОКУ
THAISTRINGLENGTH = ТАЙДЛИНАСТРОКИ
TRIM = СЖПРОБЕЛЫ TRIM = СЖПРОБЕЛЫ
UNICHAR = ЮНИСИМВ UNICHAR = ЮНИСИМВ
UNICODE = UNICODE UNICODE = UNICODE

View File

@ -52,6 +52,9 @@ NETWORKDAYS = NETTOARBETSDAGAR
NETWORKDAYS.INTL = NETTOARBETSDAGAR.INT NETWORKDAYS.INTL = NETTOARBETSDAGAR.INT
NOW = NU NOW = NU
SECOND = SEKUND SECOND = SEKUND
THAIDAYOFWEEK = THAIVECKODAG
THAIMONTHOFYEAR = THAIMÅNAD
THAIYEAR = THAIÅR
TIME = KLOCKSLAG TIME = KLOCKSLAG
TIMEVALUE = TIDVÄRDE TIMEVALUE = TIDVÄRDE
TODAY = IDAG TODAY = IDAG
@ -300,6 +303,8 @@ RAND = SLUMP
RANDBETWEEN = SLUMP.MELLAN RANDBETWEEN = SLUMP.MELLAN
ROMAN = ROMERSK ROMAN = ROMERSK
ROUND = AVRUNDA ROUND = AVRUNDA
ROUNDBAHTDOWN = AVRUNDABAHTNEDÅT
ROUNDBAHTUP = AVRUNDABAHTUPPÅT
ROUNDDOWN = AVRUNDA.NEDÅT ROUNDDOWN = AVRUNDA.NEDÅT
ROUNDUP = AVRUNDA.UPPÅT ROUNDUP = AVRUNDA.UPPÅT
SEC = SEK SEC = SEK
@ -463,6 +468,10 @@ SUBSTITUTE = BYT.UT
T = T T = T
TEXT = TEXT TEXT = TEXT
TEXTJOIN = TEXTJOIN TEXTJOIN = TEXTJOIN
THAIDIGIT = THAISIFFRA
THAINUMSOUND = THAITALLJUD
THAINUMSTRING = THAITALSTRÄNG
THAISTRINGLENGTH = THAISTRÄNGLÄNGD
TRIM = RENSA TRIM = RENSA
UNICHAR = UNITECKENKOD UNICHAR = UNITECKENKOD
UNICODE = UNICODE UNICODE = UNICODE

View File

@ -39,6 +39,7 @@ DVARP = VSEÇVARS
## ##
DATE = TARİH DATE = TARİH
DATEDIF = ETARİHLİ DATEDIF = ETARİHLİ
DATESTRING = TARİHDİZİ
DATEVALUE = TARİHSAYISI DATEVALUE = TARİHSAYISI
DAY = GÜN DAY = GÜN
DAYS = GÜNSAY DAYS = GÜNSAY
@ -53,6 +54,9 @@ NETWORKDAYS = TAMİŞGÜNÜ
NETWORKDAYS.INTL = TAMİŞGÜNÜ.ULUSL NETWORKDAYS.INTL = TAMİŞGÜNÜ.ULUSL
NOW = ŞİMDİ NOW = ŞİMDİ
SECOND = SANİYE SECOND = SANİYE
THAIDAYOFWEEK = TAYHAFTANINGÜNÜ
THAIMONTHOFYEAR = TAYYILINAYI
THAIYEAR = TAYYILI
TIME = ZAMAN TIME = ZAMAN
TIMEVALUE = ZAMANSAYISI TIMEVALUE = ZAMANSAYISI
TODAY = BUGÜN TODAY = BUGÜN
@ -301,6 +305,8 @@ RAND = S_SAYI_ÜRET
RANDBETWEEN = RASTGELEARADA RANDBETWEEN = RASTGELEARADA
ROMAN = ROMEN ROMAN = ROMEN
ROUND = YUVARLA ROUND = YUVARLA
ROUNDBAHTDOWN = BAHTAŞAĞIYUVARLA
ROUNDBAHTUP = BAHTYUKARIYUVARLA
ROUNDDOWN = AŞAĞIYUVARLA ROUNDDOWN = AŞAĞIYUVARLA
ROUNDUP = YUKARIYUVARLA ROUNDUP = YUKARIYUVARLA
SEC = SEC SEC = SEC
@ -450,10 +456,12 @@ DOLLAR = LİRA
EXACT = ÖZDEŞ EXACT = ÖZDEŞ
FIND = BUL FIND = BUL
FIXED = SAYIDÜZENLE FIXED = SAYIDÜZENLE
ISTHAIDIGIT = TAYRAKAMIYSA
LEFT = SOLDAN LEFT = SOLDAN
LEN = UZUNLUK LEN = UZUNLUK
LOWER = KÜÇÜKHARF LOWER = KÜÇÜKHARF
MID = PARÇAAL MID = PARÇAAL
NUMBERSTRING = SAYIDİZİ
NUMBERVALUE = SAYIDEĞERİ NUMBERVALUE = SAYIDEĞERİ
PHONETIC = SES PHONETIC = SES
PROPER = YAZIM.DÜZENİ PROPER = YAZIM.DÜZENİ
@ -465,6 +473,10 @@ SUBSTITUTE = YERİNEKOY
T = M T = M
TEXT = METNEÇEVİR TEXT = METNEÇEVİR
TEXTJOIN = METİNBİRLEŞTİR TEXTJOIN = METİNBİRLEŞTİR
THAIDIGIT = TAYRAKAM
THAINUMSOUND = TAYSAYISES
THAINUMSTRING = TAYSAYIDİZE
THAISTRINGLENGTH = TAYDİZEUZUNLUĞU
TRIM = KIRP TRIM = KIRP
UNICHAR = UNICODEKARAKTERİ UNICHAR = UNICODEKARAKTERİ
UNICODE = UNICODE UNICODE = UNICODE

View File

@ -19,7 +19,7 @@ class Font extends Supervisor
protected $name = 'Calibri'; protected $name = 'Calibri';
/** /**
* Font Size. * Font Size in points.
* *
* @var null|float * @var null|float
*/ */
@ -249,20 +249,27 @@ class Font extends Supervisor
/** /**
* Set Size. * Set Size.
* *
* @param float $pValue * @param float $fontSizeInPoints
* *
* @return $this * @return $this
*/ */
public function setSize($pValue) public function setSize($fontSizeInPoints)
{ {
if ($pValue == '') { if (is_string($fontSizeInPoints) || is_int($fontSizeInPoints)) {
$pValue = 10; $fontSizeInPoints = (float) $fontSizeInPoints; // $pValue = 0 if given string is not numeric
} }
// Size must be a positive floating point number
// ECMA-376-1:2016, part 1, chapter 18.4.11 sz (Font Size), p. 1536
if (!is_float($fontSizeInPoints) || !($fontSizeInPoints > 0)) {
$fontSizeInPoints = 10.0;
}
if ($this->isSupervisor) { if ($this->isSupervisor) {
$styleArray = $this->getStyleArray(['size' => $pValue]); $styleArray = $this->getStyleArray(['size' => $fontSizeInPoints]);
$this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray); $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
} else { } else {
$this->size = $pValue; $this->size = $fontSizeInPoints;
} }
return $this; return $this;

View File

@ -5,7 +5,7 @@ namespace PhpOffice\PhpSpreadsheetTests;
use PhpOffice\PhpSpreadsheet\Calculation\Category as Cat; use PhpOffice\PhpSpreadsheet\Calculation\Category as Cat;
use PhpOffice\PhpSpreadsheet\Calculation\Functions; use PhpOffice\PhpSpreadsheet\Calculation\Functions;
use PhpOffice\PhpSpreadsheet\Calculation\Logical; use PhpOffice\PhpSpreadsheet\Calculation\Logical;
use PhpOffice\PhpSpreadsheet\DocumentGenerator; use PhpOffice\PhpSpreadsheetInfra\DocumentGenerator;
use PHPUnit\Framework\TestCase; use PHPUnit\Framework\TestCase;
use UnexpectedValueException; use UnexpectedValueException;

View File

@ -0,0 +1,41 @@
<?php
namespace PhpOffice\PhpSpreadsheetTests;
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;
use PhpOffice\PhpSpreadsheetInfra\LocaleGenerator;
use PHPUnit\Framework\TestCase;
use ReflectionClass;
class LocaleGeneratorTest extends TestCase
{
public function testLocaleGenerator(): void
{
$phpSpreadsheetFunctionsProperty = (new ReflectionClass(Calculation::class))
->getProperty('phpSpreadsheetFunctions');
$phpSpreadsheetFunctionsProperty->setAccessible(true);
$phpSpreadsheetFunctions = $phpSpreadsheetFunctionsProperty->getValue();
$localeGenerator = new LocaleGenerator(
realpath(__DIR__ . '/../../src/PhpSpreadsheet/Calculation/locale/'),
'Translations.xlsx',
$phpSpreadsheetFunctions
);
$localeGenerator->generateLocales();
$testLocales = [
'fr',
'nl',
'pt',
'pt_br',
'ru',
];
foreach ($testLocales as $locale) {
$locale = str_replace('_', '/', $locale);
$path = realpath(__DIR__ . "/../../src/PhpSpreadsheet/Calculation/locale/{$locale}");
self::assertFileExists("{$path}/config");
self::assertFileExists("{$path}/functions");
}
}
}