2014-12-16 2 views
-1

Я перепроведении мой вопрос и мой ответ ниже для любого из вас, кто хотел бы знать , как это сделать:Модуль Perl для чтения содержимого ячейки, который является ссылкой на ячейку на другом листе. Нужна формула или ссылка

Как один извлечь формулу (в том числе ссылки на ячейки) из Excel (2007) .xlsx файл с использованием Perl?

Проблема:

Пусть клетка [0] [0] на 'Лист1' содержит 123 Предположим, ячейка [2] [2] на 'Лист2' содержит 'Лист1' A0 ссылка на ячейку! Лист1.

Использование модуля Perl и ths; Spreadsheet :: XLSX вы получите следующее:

#!/usr/local/bin/perl -w 

use strict; 
use warnings; 

use Spreadsheet::XLSX; 

my $excelFile = Spreadsheet::XLSX -> new ("MyExcelFile.xlsx"); 

foreach my $sheet (@{$excelFile -> {Worksheet}}) { 
    my $name = $sheet -> {Name}; 
    if ($name eq 'Sheet2') { 
     my $cell = $sheet -> {Cells} [2] [2];  # cell (C3) 
     my $curCellContent = $cell -> {Value}; 
     print "$curCellContent\n";  # OUTPUT: 123 
    } 
} 

Это, как правило, хорошо, но мне нужна формула (ссылка): «Лист1» A0

+0

См. Http://stackoverflow.com/help/on-topic. – pnuts

ответ

1

Проблема заключается в том, что электронная таблица :: XLSX не обрабатывает forumlas , Решение состоит в том, чтобы вместо этого использовать Таблицу :: ParseXLSX.

# Tested with perl version 5.16 Spreadsheet::XLSX version 0.13 
#!/usr/local/bin/perl -w 

use strict; 
use warnings; 

use Spreadsheet::ParseXLSX; 

my $parser = Spreadsheet::ParseXLSX->new; 
my $excelWorkbook = $parser->parse("MyExcelFile.xlsx"); 

foreach my $sheet (@{$excelWorkbook -> {Worksheet}}) { 
    my $name = $sheet -> {Name}; 
    print "\$name = $name\n"; 
    if ($name eq 'Sheet2') { 
     my $cell = $sheet -> {Cells} [2] [2];    # cell (C3) 
     my $curCellContentValue = $cell -> Value; 
     print "$curCellContentValue\n";      # OUTPUT: 123 
     my $#!/usr/local/bin/perl -w = $cell -> {Formula}; 
     print "$curCellContentFormula\n";     # OUTPUT: 'Sheet1'!A0 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^