gpt4 book ai didi

excel - 如何使用 Excel::Writer::XLSX 创建一个表,其中插入行复制列的公式?

转载 作者:行者123 更新时间:2023-12-02 06:37:03 24 4
gpt4 key购买 nike

因此,在 Excel 中,我可以手动创建以下内容(我让它在 C 列中显示公式):

enter image description here

然后,我可以选择 A:1 到 C3,选择“插入”->“表格”,然后在“创建表格”对话框中按“确定”将我的数据放入表格中,同时取消选中“筛选按钮”框:

enter image description here

然后,当我右键单击第 3 行并选择“插入”时,我会得到一个新的第 3 行,其中 C 列的公式已正确复制。

enter image description here

我的问题是我似乎无法使用 Excel::Writer::XLSX 使用 Perl 生成 Excel 文件,该文件可以创建一个表,在该表中插入一行将导致复制公式。它最终会变成空白,如下所示:

enter image description here

下面是我的代码。任何见解将不胜感激。

#!/usr/bin/env perl

use strict;
use warnings;

use Excel::Writer::XLSX;

my $filePath = shift;
my $workbook = Excel::Writer::XLSX->new( $filePath );
my $worksheet = $workbook->add_worksheet( 'Metadata' );

my @data = ( [1,2,"=SUM(A2:B2)"], [3,4,"=SUM(A3:B3)"], [5,6,"=SUM(A4:B4)"] );

my $rowCount = (scalar @data) + 1;

$worksheet->add_table(
"A1:C$rowCount",
{
data => \@data,
name => 'Table1',
style => 'Table Style Medium 2',
autofilter => 0,
header_row => 1,
columns => [
{ header => 'Value 1' },
{ header => 'Value 2' },
{ header => 'Sum' },
]
}
);

$workbook->close();

最佳答案

Excel 表格未得到充分利用...很高兴看到有人欣赏他们所提供的功能,并对模块作者添加表格支持表示赞赏。

有几件事...如果您想要一个基于表的公式,请在表列的公式属性中声明它。这将导致它被复制到创建的任何新行。

{ header => 'Title', formula => '=1+2' }

其次,可能有一种方法可以通过 R1C1 语法来做到这一点(Excel 支持它,但我不知道 Excel::Writer::XLSX 是否支持),但我发现当您引用对于表格,最简单的做法是基于表格列而不是单元格引用 - 这是 Excel 表格相对于标准范围的一大优势。

formula => '=[@[Header A]]*[@[Header B]]'

受影响的代码应如下所示:

my @data = ( [1,2], [3,4], [5,6] );

my $rowCount = (scalar @data) + 1;

$worksheet->add_table(
"A1:C$rowCount",
{
data => \@data,
name => 'Table1',
style => 'Table Style Medium 2',
autofilter => 0,
header_row => 1,
columns => [
{ header => 'Value 1' },
{ header => 'Value 2' },
{ header => 'Sum',
formula => '=SUM([@[Value 1]]:[@[Value 2]])'
},
]
}
);

当您打开电子表格并添加一行时,我想您会得到您想要的行为。

关于excel - 如何使用 Excel::Writer::XLSX 创建一个表,其中插入行复制列的公式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53750268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com