SlideShare une entreprise Scribd logo
1  sur  61
Officeで使うPerl
    Excel編
        by risou
  YAPC::Asia Tokyo 2012
はじめに
• お詫びと訂正
お詫びと訂正
お詫びと訂正
お詫びと訂正
えっ……
(これ以上ないハードルの上げ方……!)
はじめに
• お詫びと訂正
 • ごめんなさい、そんなに難しい話しません。
お詫びと訂正
お詫びと訂正
はじめに
• お詫びと訂正
 • ごめんなさい、そんなに難しい話しません。
 • 本トークは、ビギナーを想定しています(強調)
今日のお話




        ※写真はイメージです
今日のお話




        ※写真はイメージです
Excel、使ってますか?
• Excel大好きな人
• 業務で使ってる人
• 一切使っていない人
Excel、使ってますか?
• Excel大好きな人
• 業務で使ってる人     ←私はココ
• 一切使っていない人
Excel縛り
• 出退勤時間はWebで登録しているのに残業時間の報告
  はExcelファイル!
• (なぜか)今までExcelで管理されてたデータをDBに
  突っ込みたい!
• 自作ツールのマニュアルをExcelで欲しいと言われた
  けど、Markdownで書いたものしかない……

    ※上記例はイメージであり、発表者の実体験に基づくものではありません。
そうだ!   スクリプト書いて楽しよう!
Perl on Windows
WindowsにPerlを入れよう
• ActivePerl
• Vanilla Perl
• Strawberry Perl
WindowsにPerlを入れよう
• ActivePerl
• Vanilla Perl
• Strawberry Perl
     #Strawberry Perlの開発者、Adam Kennedy氏のトークは、
       2日目の11:20から!
Excel in Perl
Excelを扱うモジュール
• Win32::OLE
• SpreadSheet
  • SpreadSheet::ParseExcel
  • SpreadSheet::WriteExcel
  • SpreadSheet::XLSX
• Excel
  • Excel::Writer::XLSX
Excelを扱うモジュール
• Win32::OLE
• SpreadSheet
  • SpreadSheet::ParseExcel
  • SpreadSheet::WriteExcel
  • SpreadSheet::XLSX
• Excel
  • Excel::Writer::XLSX
Win32::OLEの使い方
お約束(use Win32::OLE)
#!/usr/bin/perl
use strict;
use warnings;
use Win32::OLE;
Excelを開いて閉じる
# Excelオブジェクトを取得
my $excel = Win32::OLE->GetActiveObject('Excel.Application')
        || Win32::OLE->new('Excel.Application', 'Quit');


# 新規Excelファイル
my $book = $excel->Workbooks->add();


# ファイルを保存
$book->SaveAs({Filename => "C:YAPCempty.xlsx“});


# クローズ
$book->Close();
$excel->quit();
Excelを開いて閉じる
# Excelオブジェクトを取得
my $excel = Win32::OLE->GetActiveObject('Excel.Application')
        || Win32::OLE->new('Excel.Application', 'Quit');


# 新規Excelファイル     既にExcelが起動していたら、そのExcelを使う
my $book = $excel->Workbooks->add();


# ファイルを保存
$book->SaveAs({Filename => "C:YAPCempty.xlsx“});


# クローズ
$book->Close();
$excel->quit();
Excelを開いて閉じる
# Excelオブジェクトを取得
my $excel = Win32::OLE->GetActiveObject('Excel.Application')
        || Win32::OLE->new('Excel.Application', 'Quit');


# 新規Excelファイル
              起動してるExcelのプロセスがなければ、新規に起動
my $book = $excel->Workbooks->add();


# ファイルを保存
$book->SaveAs({Filename => "C:YAPCempty.xlsx“});


# クローズ
$book->Close();
$excel->quit();
Excelを開いて閉じる
# Excelオブジェクトを取得
my $excel = Win32::OLE->GetActiveObject('Excel.Application')
        || Win32::OLE->new('Excel.Application', 'Quit');


# 新規Excelファイル
my $book = $excel->Workbooks->add();

                           新しいワークブックを作って
# ファイルを保存
$book->SaveAs({Filename => "C:YAPCempty.xlsx“});


# クローズ
                                       名前をつけて保存
$book->Close();
$excel->quit();
基本的な操作
セルに文字を入力する
# アクティブなシートのオブジェクトを取得
my $sheet = $book->ActiveSheet;


# セルに文字を入力
$sheet->Range("A1")->{Value} = 'YAPC::Asia TOKYO 2012';
$sheet->Cells(2,1)->{Value} = encode(cp932 => “at 東京大学");
セルに文字を入力する
# アクティブなシートのオブジェクトを取得
my $sheet = $book->ActiveSheet;


# セルに文字を入力
$sheet->Range("A1")->{Value} = 'YAPC::Asia';
$sheet->Cells(2,1)->{Value} = encode(cp932 => "in 東京");


                      セルの指定方法は2種類
セルの文字を読み取る
# セルの文字を読み取る
for (my $i=1;$i<=4;$i++) {
        print $sheet->Range("A" . $i)->{Value}, "n";
}
セルの背景色を指定
# 背景色を設定
$sheet->Range("C1:G7")->Interior->{ColorIndex} = 4;


for (my $i=1;$i<=8;$i++) {
        $sheet->Cells($i,1)->Interior->{ColorIndex} = $i;
}
セルの背景色を指定
# 背景色を設定
$sheet->Range("C1:G7")->Interior->{ColorIndex} = 4;


for (my $i=1;$i<=8;$i++) {
        $sheet->Cells($i,1)->Interior->{ColorIndex} = $i;
}
フォントの設定
for (my $i=1;$i<=5;$i++) {
        $sheet->Cells($i,1)->{Value} = encode(cp932 => "サンプル".$i);
}


# フォントの設定
$sheet->Range("A1")->Font->{ColorIndex} = 5;
$sheet->Range("A2")->Font->{Bold} = 1;
$sheet->Range("A3")->Font->{Itaric} = 1;
$sheet->Range("A4")->Font->{Underline} = 1;
$sheet->Range("A5")->Font->{Size} = 20;
フォントの設定
for (my $i=1;$i<=3;$i++) {
        $sheet->Cells($i,1)->{Value} = encode(cp932 => "サンプル".$i);
}


# フォントの設定
$sheet->Range("A1")->Font->{ColorIndex} = 5;
$sheet->Range("A2")->Font->{Bold} = 1;
$sheet->Range("A3")->Font->{Size} = 20;


                                  フォントも指定できる
罫線を引く
use Win32::OLE::Const 'Microsoft Excel';


# 罫線
$sheet->Range("B2")->Borders(xlEdgeBottom)->{LineStyle} = 1;
$sheet->Range("B3")->Borders(xlEdgeBottom)->{LineStyle} = 2;
$sheet->Range("B4")->Borders(xlEdgeBottom)->{LineStyle} = 3;
$sheet->Range("B5")->Borders(xlEdgeBottom)->{LineStyle} = 4;
$sheet->Range("B6")->Borders(xlEdgeBottom)->{LineStyle} = 5;
罫線を引く
use Win32::OLE::Const 'Microsoft Excel';


                                   事前にこれを書いておく
# 罫線
$sheet->Range("B2")->Borders(xlEdgeBottom)->{LineStyle} = 1;
$sheet->Range("B3")->Borders(xlEdgeBottom)->{LineStyle} = 2;
$sheet->Range("B4")->Borders(xlEdgeBottom)->{LineStyle} = 3;
$sheet->Range("B5")->Borders(xlEdgeBottom)->{LineStyle} = 4;
$sheet->Range("B6")->Borders(xlEdgeBottom)->{LineStyle} = 5;
罫線を引く
use Win32::OLE::Const 'Microsoft Excel';


# 罫線
$sheet->Range("B2")->Borders(xlEdgeBottom)->{LineStyle} = 1;
$sheet->Range("B3")->Borders(xlEdgeBottom)->{LineStyle} = 2;
$sheet->Range("B4")->Borders(xlEdgeBottom)->{LineStyle} = 3;
$sheet->Range("B5")->Borders(xlEdgeBottom)->{LineStyle} = 4;
$sheet->Range("B6")->Borders(xlEdgeBottom)->{LineStyle} = 5;


                                     セルの下側に線を引く
罫線を引く
use Win32::OLE::Const 'Microsoft Excel';


# 罫線
$sheet->Range("B2")->Borders(xlEdgeLeft)->{LineStyle} = 1;
$sheet->Range("B2")->Borders(xlEdgeRight)->{LineStyle} = 1;
$sheet->Range("B2")->Borders(xlEdgeTop)->{LineStyle} = 1;
$sheet->Range("B2")->Borders(xlEdgeBottom)->{LineStyle} = 1;
$sheet->Range("B2")->Borders(xlDiagonalDown)->{LineStyle} = 1;
$sheet->Range("B2")->Borders(xlDiagonalUp)->{LineStyle} = 1;


                                    四辺の他に斜めも引ける
じゃあ、こういう事がしたかったら……?
こんな感じ?
# 罫線
$sheet->Range("B2:G14")->Borders(xlEdgeLeft)->{LineStyle} = 1;
$sheet->Range("B2:G14")->Borders(xlEdgeRight)->{LineStyle} = 1;
$sheet->Range("B2:G14")->Borders(xlEdgeTop)->{LineStyle} = 1;
$sheet->Range("B2:G14")->Borders(xlEdgeBottom)->{LineStyle} = 1;
こんな感じ?
# 罫線
$sheet->Range("B2:G14")->Borders(xlEdgeLeft)->{LineStyle} = 1;
$sheet->Range("B2:G14")->Borders(xlEdgeRight)->{LineStyle} = 1;
$sheet->Range("B2:G14")->Borders(xlEdgeTop)->{LineStyle} = 1;
$sheet->Range("B2:G14")->Borders(xlEdgeBottom)->{LineStyle} = 1;



                                        違うっぽい……
もしかして……
$sheet->Range("B2")->Borders(xlEdgeLeft)->{LineStyle} = 1;
$sheet->Range("B2")->Borders(xlEdgeRight)->{LineStyle} = 1;
$sheet->Range("B2")->Borders(xlEdgeTop)->{LineStyle} = 1;
$sheet->Range("B2")->Borders(xlEdgeBottom)->{LineStyle} = 1;
$sheet->Range("B3")->Borders(xlEdgeLeft)->{LineStyle} = 1;
$sheet->Range("B3")->Borders(xlEdgeRight)->{LineStyle} = 1;
$sheet->Range("B3")->Borders(xlEdgeTop)->{LineStyle} = 1;
$sheet->Range("B3")->Borders(xlEdgeBottom)->{LineStyle} = 1;
:
$sheet->Range("G14")->Borders(xlEdgeLeft)->{LineStyle} = 1;
$sheet->Range("G14")->Borders(xlEdgeRight)->{LineStyle} = 1;
$sheet->Range("G14")->Borders(xlEdgeTop)->{LineStyle} = 1;
$sheet->Range("G14")->Borders(xlEdgeBottom)->{LineStyle} = 1;
こうやれば簡単
# 罫線
$sheet->Range("B2:G14")->Borders(xlEdgeLeft)->{LineStyle} = 1;
$sheet->Range("B2:G14")->Borders(xlEdgeRight)->{LineStyle} = 1;
$sheet->Range("B2:G14")->Borders(xlEdgeTop)->{LineStyle} = 1;
$sheet->Range("B2:G14")->Borders(xlEdgeBottom)->{LineStyle} = 1;
$sheet->Range("B2:G14")->Borders(xlInsideHorizontal)->{LineStyle} = 1;
$sheet->Range("B2:G14")->Borders(xlInsideVertical)->{LineStyle} = 1;
幅、高さを変える
# 幅を変える
$sheet->Columns("A:C")->{ColumnWidth} = 30;


# 高さを変える
$sheet->Rows("1:5")->{RowHeight} = 30;
幅、高さを変える
# 幅を変える
$sheet->Columns("A:C")->{ColumnWidth} = 30;


# 高さを変える
$sheet->Rows("1:5")->{RowHeight} = 30;




                       幅と高さは基準値が違うので、
                    同じ数値を設定しても同じ長さにはならない
こんな感じにすると……
# 幅を変える
$sheet->Columns->{ColumnWidth} = 1;


# 高さを変える
$sheet->Rows->{RowHeight} = 9;
これは……Excel方眼紙!
これは……Excel方眼紙!




             Excel方眼の話は、LTソン2日目の
      minemazさんのLTで聞けます!(14:30くらい?)
全て選択する方法
# 幅を変える
$sheet->Columns->{ColumnWidth} = 1;


# 高さを変える
$sheet->Rows->{RowHeight} = 9;


# フォントサイズは9で統一
$sheet->Cells->Font->{Size} = 9;
そういえばExcelマクロも動かせます
# マクロ実行
$excel->Run(“macro1”);


# 引数を与えてマクロ実行
$excel->Run(“macro2”, 100);
古いバージョンのExcelフォーマットで保存
保存形式を設定する
# ファイルを保存
$book->SaveAs({
        Filename => "C:YAPCempty.xls",
        Fileformat => xlExcel8
});
Excel縛り?
• 出退勤時間はWebで登録しているのに残業時間の報告
  はExcelファイル!
• (なぜか)今までExcelで管理されてたデータをDBに
  突っ込みたい!
• 自作ツールのマニュアルをExcelで欲しいと言われた
  けど、Markdownで書いたものしかない……
楽できそうな気がしてきた!……かな?
他にできること
•   $sheet->PivotTableWizard(1, $sheet->Range(“A1:E7”), “PivotTable”);
•   $book->Charts->Add;
こんなこともできる(別の機会に)
# ファイルを保存
$book->SaveAs({
        Filename => "C:YAPCempty.xls",
        Fileformat => xlExcel8
});
Officeで使うPerl Excel編
Officeで使うPerl Excel編

Contenu connexe

En vedette

エクストリームエンジニア5
エクストリームエンジニア5エクストリームエンジニア5
エクストリームエンジニア5T-arts
 
第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向hakoika-itwg
 
Load / Frequency balancing Control systems study
Load / Frequency balancing Control systems studyLoad / Frequency balancing Control systems study
Load / Frequency balancing Control systems studyCAL
 
第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向hakoika-itwg
 
Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(前篇)
Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(前篇)Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(前篇)
Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(前篇)Youichiro Miyake
 
Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(後篇)
Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(後篇)Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(後篇)
Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(後篇)Youichiro Miyake
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用純生 野田
 
First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuningrisou
 
MI100ロボットでライントレース大会
MI100ロボットでライントレース大会MI100ロボットでライントレース大会
MI100ロボットでライントレース大会noanoa07
 
H2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかH2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかIchito Nagata
 

En vedette (11)

Practica
PracticaPractica
Practica
 
エクストリームエンジニア5
エクストリームエンジニア5エクストリームエンジニア5
エクストリームエンジニア5
 
第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向
 
Load / Frequency balancing Control systems study
Load / Frequency balancing Control systems studyLoad / Frequency balancing Control systems study
Load / Frequency balancing Control systems study
 
第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向
 
Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(前篇)
Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(前篇)Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(前篇)
Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(前篇)
 
Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(後篇)
Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(後篇)Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(後篇)
Builderscon 2016 講演資料 「人工知能によってプログラムを有機化する」(後篇)
 
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
YAPC::Kansai 2017 - macOSネイティブアプリ作成におけるPerlの活用
 
First step of Performance Tuning
First step of Performance TuningFirst step of Performance Tuning
First step of Performance Tuning
 
MI100ロボットでライントレース大会
MI100ロボットでライントレース大会MI100ロボットでライントレース大会
MI100ロボットでライントレース大会
 
H2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのかH2O x mrubyで人はどれだけ幸せになれるのか
H2O x mrubyで人はどれだけ幸せになれるのか
 

Similaire à Officeで使うPerl Excel編

20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門Takashi Kitano
 
ex-6. Excel でのルックアップ
ex-6. Excel でのルックアップex-6. Excel でのルックアップ
ex-6. Excel でのルックアップkunihikokaneko1
 
eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜ericsagnes
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2Masashi Shinbara
 
cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い kunihikokaneko1
 
ex-2. Excel での切り取りとコピーと貼り付け,Excel の関数
ex-2. Excel での切り取りとコピーと貼り付け,Excel の関数ex-2. Excel での切り取りとコピーと貼り付け,Excel の関数
ex-2. Excel での切り取りとコピーと貼り付け,Excel の関数kunihikokaneko1
 

Similaire à Officeで使うPerl Excel編 (7)

20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門
 
ex-6. Excel でのルックアップ
ex-6. Excel でのルックアップex-6. Excel でのルックアップ
ex-6. Excel でのルックアップ
 
eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜
 
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
 
cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い
 
Pythonintro
PythonintroPythonintro
Pythonintro
 
ex-2. Excel での切り取りとコピーと貼り付け,Excel の関数
ex-2. Excel での切り取りとコピーと貼り付け,Excel の関数ex-2. Excel での切り取りとコピーと貼り付け,Excel の関数
ex-2. Excel での切り取りとコピーと貼り付け,Excel の関数
 

Officeで使うPerl Excel編