Запись в файл Excel в определенном формате с использованием Perl - PullRequest
0 голосов
/ 14 июня 2019

Как мне напечатать строку файла csv, которая выглядит следующим образом:

string1, string2, string3, String4

string5, string6, String7, string8

.

в файл Excel, который выглядит следующим образом:

строка1 строка2 строка3 строка4

строка5 строка6 строка7 строка8

.

со строками 1 и 5 в столбце А, 2 и 6 в столбце В и т. Д.

Я только начал использовать Perl, и я не уверен, как подойти к этому. Спасибо!

1 Ответ

1 голос
/ 14 июня 2019

Программирование - это решение проблем. Но иногда проблема действительно большая и кажется слишком сложной. Тогда вам нужно разбить его на более мелкие проблемы, которые легче решить.

Вы говорите, что хотите превратить файл CSV в файл Excel. Вам нужно будет решить, хотите ли вы сначала XLS или XLSX . Оба формата выглядят одинаково, когда вы открываете их в Excel, но на самом деле они очень разные.

При поиске чего-либо в Perl первое место для поиска всегда будет metacpan . Давайте попробуем:

Я выберу Excel :: Writer :: XLSX. Quick Start часть документов предлагает создать файл и написать один столбец.

use Excel::Writer::XLSX;                                   # Step 0

my $workbook = Excel::Writer::XLSX->new( 'perl.xlsx' );    # Step 1
$worksheet = $workbook->add_worksheet();                   # Step 2
$worksheet->write( 'A1', 'Hi Excel!' );                    # Step 3

$workbook->close();                                        # Step 4

Теперь мы знаем, где искать записи в файл Excel. Но есть еще некоторые проблемы. Давайте разберемся с этим.

Googling "Как мне прочитать файл CSV в Perl?" дает нам эту статью как первый хит У него есть пара решений (как это часто бывает в Perl). Лучше всего использовать Text :: CSV, так как он делает всю работу за вас. Снова обратитесь к документации по metacpan для получения более подробной информации.

# Object interface
use Text::CSV;

my @rows;
# Read/parse CSV
my $csv = Text::CSV->new ({ binary => 1, auto_diag => 1 });
open my $fh, "<:encoding(utf8)", "test.csv" or die "test.csv: $!";
while (my $row = $csv->getline ($fh)) {
    $row->[2] =~ m/pattern/ or next; # 3rd field should match
    push @rows, $row;
    }
close $fh;

Конечно, это не совсем то, что вы хотите, но это хорошее начало.

Теперь вам нужно перебрать каждую строку, взять каждый столбец и записать это в файл Excel. Я предполагаю, что вы знаете, как перебирать список. Приведенный выше пример уже делает это. Что нам нужно сделать именно это:

  • для каждой строки в файле CSV
    • принять значение каждого столбца файла CSV ...
    • ... и поместите его в соответствующий столбец в вашем файле Excel
  • сохранить файл Excel

Если у вас сейчас есть проблемы с этими шагами, вы можете искать более конкретные проблемы.


Многие модули Perl поставляются с примерами. Если вы посмотрите на выпуск в metacpan, вы увидите, что есть немало для Excel :: Writer :: XLSX . Нажмите на название модуля, чтобы перейти на страницу распространения, и прокрутите вниз.

click this link

Text :: CSV также содержит похожие примеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...