excel - 如何使用 Excel::Writer::XLSX 创建插入行复制列公式的表?
问题描述
因此,在 Excel 中,我可以手动创建以下内容(我让它在 C 列中显示公式):
然后,我可以选择 A:1 到 C3,选择 Insert -> Table,然后在 Create Table 对话框中按 OK 将我的数据变成一个表,取消选中 Filter Button 框:
然后,当我右键单击第 3 行并选择“插入”时,我得到一个新的第 3 行,其中 C 列的公式正确复制。
我的问题是我似乎无法使用 Excel::Writer::XLSX 使用 Perl 生成 Excel 文件,该文件可以创建一个表格,在该表格中插入一行将导致公式被复制。它最终是空白的,如下所示:
下面是我的代码。任何见解将不胜感激。
#!/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]])'
},
]
}
);
当你打开电子表格并添加一行时,我想你会得到你想要的行为。
推荐阅读
- android-studio - android studio - 如何从命令行导出
- nlp - Dialogflow 知识(测试版功能)
- apache-flink - 有没有办法将批处理数据移动到数据流中?
- reactjs - 反应式搜索、ES 和 CORS
- mysql - 从 JOIN with IF 语句中获取行结果
- javascript - 为什么邮件没有发送到电子邮件ID作为提及?
- sql - 在 PostgreSQL 中使用 INNER JOIN 时出错?
- node.js - 使用 npm 安装时重命名包
- javascript - 有节点 API + Heroku 部署问题
- javascript - 如何检查我的节点应用程序与节点版本的向后兼容性