Excel::Writer::XLSX добавляет неожиданный @ в формулу

Я пишу формулу в файл xlsx, используя Excel::Writer::XLSX

use Excel::Writer::XLSX;
my $workbook  = Excel::Writer::XLSX->new( "test.xlsx" );
my $worksheet = $workbook->add_worksheet();
$worksheet->write( 'A1', "4");
$worksheet->write( 'A2', "=ERF.PRECISE(A1/SQRT(2))");

Но когда я открываю свой лист Excel, я вижу в ячейке

A2:
[email protected](A1/SQRT(2))

Откуда @?


person Jean-Marc    schedule 04.11.2020    source источник
comment
Я пробовал это на Ubuntu. После создания .xlsx с помощью вашего скрипта я открыл test.xlsx в libreoffice. Здесь символ @ не отображается, но результат для ячейки A2 отображается как 0, хотя должен отображаться как 0.99994. Если отредактировать формулу для A2, например, удалив =, а затем повторно набрав ее, а затем нажать клавишу ввода, для A2 будет показано правильное значение. Очень странно.   -  person Håkon Hægland    schedule 04.11.2020


Ответы (1)


Вместо -

$worksheet->write( 'A2', "=ERF.PRECISE(A1/SQRT(2))");

Используйте метод ниже:

$worksheet->write( 'A2', "=_xlfn.ERF.PRECISE(A1/SQRT(2))");

Посмотрите документацию по формулам. для Excel 2010 и более поздних версий.

Полный сценарий:

#!/usr/bin/perl

use strict;
use warnings;

use Excel::Writer::XLSX;

my $workbook  = Excel::Writer::XLSX->new( "test.xlsx" );
my $worksheet = $workbook->add_worksheet();

$worksheet->write( 'A1', "4");
$worksheet->write( 'A2', "=_xlfn.ERF.PRECISE(A1/SQRT(2))");

$workbook->close();

Вывод: test.xlsx

person vkk05    schedule 04.11.2020