便利で役立つPerl好きな私🐪

2019/11/28

Perlからxlsx形式でExcel(エクセル)ファイルを書き出す

欲しいが見つかるCPANよりExcel::Writer::XLSXモジュール

PerlでCSVファイルを加工した後、 加工後のデータを複数のシートに分けてエクセルファイルに保存してほしい、という要望をもらいました。

エクセルへの書き出しとかってなると、マイクロソフト絡みだしC#とかVBなのかな?とか JavaのApache POIを使おうかな?とか迷ってましたが、CPANを巡回してたら見つけました。

Excel::Writer::XLSX

ドキュメントを読むとかなり直感的に使えそうでイイ感じです。

2019年プロ野球ペナントレースの結果をエクセルに書き出す from Perl

複数シートへの書き出しの動作確認を行いたかったので、セリーグとパリーグをシートに分けてみました。

#!/usr/bin/perl

use strict;
use warnings;
use utf8;

use Excel::Writer::XLSX;

# Create a new Excel workbook
my $workbook = Excel::Writer::XLSX->new('write03.xlsx');

# Add and define a format
my $format = $workbook->add_format(); # Add a format
$format->set_font('MS Pゴシック');

{
    # Add a worksheet
    my $worksheet = $workbook->add_worksheet('セリーグ');

    # Write using row and column notation.
    my $col = my $row = 0;
    $worksheet->write( $row, $col, '2019年ペナントレース結果',
    $format );
    $worksheet->write( 1, $col, '順位', $format );
    $worksheet->write( 2, $col, '1位', $format );
    $worksheet->write( 3, $col, '2位', $format );
    $worksheet->write( 4, $col, '3位', $format );
    $worksheet->write( 5, $col, '4位', $format );
    $worksheet->write( 6, $col, '5位', $format );
    $worksheet->write( 7, $col, '6位', $format );

    # Write using A1 notation
    $worksheet->write( 'B2', 'チーム名', $format );
    $worksheet->write( 'B3', '巨 人', $format );
    $worksheet->write( 'B4', 'DeNA', $format );
    $worksheet->write( 'B5', '阪 神', $format );
    $worksheet->write( 'B6', '広 島', $format );
    $worksheet->write( 'B7', '中 日', $format );
    $worksheet->write( 'B8', 'ヤクルト', $format );

    $worksheet->write( 'C2', '試合', $format );
    $worksheet->write( 'C3', '143' );
    $worksheet->write( 'C4', '143' );
    $worksheet->write( 'C5', '143' );
    $worksheet->write( 'C6', '143' );
    $worksheet->write( 'C7', '143' );
    $worksheet->write( 'C8', '143' );

    $worksheet->write( 'D2', '勝利数', $format );
    $worksheet->write( 'D3', '77' );
    $worksheet->write( 'D4', '71' );
    $worksheet->write( 'D5', '69' );
    $worksheet->write( 'D6', '70' );
    $worksheet->write( 'D7', '68' );
    $worksheet->write( 'D8', '58' );

    $worksheet->write( 'E2', '敗北数', $format );
    $worksheet->write( 'E3', '64' );
    $worksheet->write( 'E4', '69' );
    $worksheet->write( 'E5', '68' );
    $worksheet->write( 'E6', '70' );
    $worksheet->write( 'E7', '73' );
    $worksheet->write( 'E8', '82' );

    $worksheet->write( 'F2', '引分数', $format );
    $worksheet->write( 'F3', '2' );
    $worksheet->write( 'F4', '3' );
    $worksheet->write( 'F5', '6' );
    $worksheet->write( 'F6', '3' );
    $worksheet->write( 'F7', '2' );
    $worksheet->write( 'F8', '2' );
}

{
    # Add a worksheet
    my $worksheet = $workbook->add_worksheet('パリーグ');

    # Write using row and column notation.
    my $col = my $row = 0;
    $worksheet->write( $row, $col, '2019年ペナントレース結果',
    $format );
    $worksheet->write( 1, $col, '順位', $format );
    $worksheet->write( 2, $col, '1位', $format );
    $worksheet->write( 3, $col, '2位', $format );
    $worksheet->write( 4, $col, '3位', $format );
    $worksheet->write( 5, $col, '4位', $format );
    $worksheet->write( 6, $col, '5位', $format );
    $worksheet->write( 7, $col, '6位', $format );

    # Write using A1 notation
    $worksheet->write( 'B2', 'チーム名', $format );
    $worksheet->write( 'B3', '西 武', $format );
    $worksheet->write( 'B4', 'ソフトバンク', $format );
    $worksheet->write( 'B5', '楽 天', $format );
    $worksheet->write( 'B6', 'ロッテ', $format );
    $worksheet->write( 'B7', '日本ハム', $format );
    $worksheet->write( 'B8', 'オリックス', $format );

    $worksheet->write( 'C2', '試合', $format );
    $worksheet->write( 'C3', '143' );
    $worksheet->write( 'C4', '143' );
    $worksheet->write( 'C5', '143' );
    $worksheet->write( 'C6', '143' );
    $worksheet->write( 'C7', '143' );
    $worksheet->write( 'C8', '143' );

    $worksheet->write( 'D2', '勝利数', $format );
    $worksheet->write( 'D3', '80' );
    $worksheet->write( 'D4', '76' );
    $worksheet->write( 'D5', '71' );
    $worksheet->write( 'D6', '69' );
    $worksheet->write( 'D7', '65' );
    $worksheet->write( 'D8', '61' );

    $worksheet->write( 'E2', '敗北数', $format );
    $worksheet->write( 'E3', '62' );
    $worksheet->write( 'E4', '62' );
    $worksheet->write( 'E5', '68' );
    $worksheet->write( 'E6', '70' );
    $worksheet->write( 'E7', '73' );
    $worksheet->write( 'E8', '75' );

    $worksheet->write( 'F2', '引分数', $format );
    $worksheet->write( 'F3', '1' );
    $worksheet->write( 'F4', '5' );
    $worksheet->write( 'F5', '4' );
    $worksheet->write( 'F6', '4' );
    $worksheet->write( 'F7', '5' );
    $worksheet->write( 'F8', '7' );

}

$workbook->close();

結果はコチラ

 ↓

セ・リーグ

2019年ペナントレースの結果をPerlからエクセルに書き出してみた(セリーグ)

パ・リーグ

2019年ペナントレースの結果をPerlからエクセルに書き出してみた(パリーグ)

イイ感じですね:)

2019/11/23

Perlのハッシュの配列について完全に理解した😁

データ構造について理解を深めるぞい!

Perlでちょっと複雑なデータ構造を扱うときに避けて通れないのが 「配列の配列」「ハッシュのハッシュ」「ハッシュの配列」「配列のハッシュ」といった リファレンス絡みのものです。イメージしやすい実例があれば、理解も進むのではないか? ということで書いてみました。

Perlへの愛の告白を、日本各地の方言でランダムにSayする

  use strict;
  use warnings;
  use utf8;
  use feature qw(say);
  use open IO => qw/:encoding(utf8) :std/;
  
  # use open IO => qw/:encoding(cp932) :std/; # Windowsコマンドプロンプト用
  
  my $love = [
      {
          city    => '北海道',
          message => 'Perlのことがなまら好き!',
      },
      {
          city    => '岩手',
          message => 'Perlのことが好きだっちゃ!',
      },
      {
          city    => '宮城',
          message => 'Perlのことが好ぎだがら!',
      },
      {
          city    => '山形',
          message => 'Perlのことが好きだず!',
      },
      {
          city    => '茨城',
          message => 'Perlのことが好きだっぺ!',
      },
      {
          city => '愛知',
          message =>
            'Perlのことが、どえりゃぁ好きだもんでよぉ!',
      },
      {
          city    => '石川',
          message => 'Perlのことがたった好きねん!',
      },
      {
          city    => '三重',
          message => 'Perlのことが好きなんさ!',
      },
      {
          city    => '大阪',
          message => 'Perlのことが、やっぱ好きやねん!',
      },
      {
          city    => '岡山',
          message => 'Perlのことが好きじゃけぇ!',
      },
      {
          city    => '高知',
          message => 'Perlのことが好きやき!',
      },
      {
          city    => '福岡',
          message => 'Perlのこと、好いとーよ!',
      },
      {
          city    => '宮崎',
          message => 'Perlのことが好きやっちゃ!',
      },
      {
          city    => '熊本',
          message => 'Perlのことが好きばい!',
      },
      {
          city    => '鹿児島',
          message => 'Perlのことが、ほんのこて好きです!',
      },
      {
          city    => '沖縄',
          message => 'Perlのことが、めっちゃ好きさー!',
      },
  ];
  
  my $count = @$love;
  my $index = int( rand $count );
  say "$love->[ $index ]{message}($love->[ $index ]{city})";
  
  =encoding utf8
  =head1 love.pl
  
  Perlへの愛の告白を、日本各地の方言でランダムにSayする
  
  =head1 SYNOPSIS
  
  $ perl love.pl
  
  =head1 DESCRIPTION
  
  「ハッシュリファレンスの配列」というデータ構造について理解を深めるためのスクリプト。
  「好き」って言葉は最高さ!
  
  =head1 AUTHOR
  
  Kamioka Nobuhiro @inazawa32
  
  =cut
  
2019/03/19

How to use Giblog😁

How to use Giblog.

Create web site

Create web site by new command.

giblog new mysite

Other prototypes is also available.

giblog new_website mysite
giblog new_blog mysite

After creating web site, change directory to mysite

cd mysite

Add new entry

Add new entry by add command.

giblog add

Build

Build web site.

giblog build

If you want to customize build process, you open lib/Giblog/Command/Build.pm and edit run subroutine.

Serve

You can serve your web site by morbo command if you have Mojolicious.

morbo serve.pl

build command is automatically executed after editting files in templates directory.

Examples

Some examples.

This is a quote.
Hello

Sub header

<><><>
1 > 2;
1 < 3;
  • Item1
  • Item2
  • Item3
Head1Head2
Item1Item2

Giblog

2019/03/18

Hello Giblog 7

Hello Giblog 7.

2019/03/17

Hello Giblog 6

Hello Giblog 6.

2019/03/16

Hello Giblog 5

Hello Giblog 5.

2019/03/15

Hello Giblog 4

Hello Giblog 4.