officeで使うperl excel編

61
by risou YAPC::Asia Tokyo 2012 Office ででで Perl Excel で

Upload: risou

Post on 05-Dec-2014

4.737 views

Category:

Documents


3 download

DESCRIPTION

talk about Excel in Perl on Windows at YAPC::Asia Tokyo 2012

TRANSCRIPT

Page 1: Officeで使うPerl Excel編

by risou

YAPC::Asia Tokyo 2012

Officeで使う PerlExcel編

Page 2: Officeで使うPerl Excel編

はじめに

• お詫びと訂正

Page 3: Officeで使うPerl Excel編

お詫びと訂正

Page 4: Officeで使うPerl Excel編

お詫びと訂正

Page 5: Officeで使うPerl Excel編

お詫びと訂正

Page 6: Officeで使うPerl Excel編

えっ……(これ以上ないハードルの上げ方……!)

Page 7: Officeで使うPerl Excel編

はじめに

• お詫びと訂正

• ごめんなさい、そんなに難しい話しません。

Page 8: Officeで使うPerl Excel編

お詫びと訂正

Page 9: Officeで使うPerl Excel編

お詫びと訂正

Page 10: Officeで使うPerl Excel編

はじめに

• お詫びと訂正

• ごめんなさい、そんなに難しい話しません。

• 本トークは、ビギナーを想定しています(強調)

Page 11: Officeで使うPerl Excel編

今日のお話

※写真はイメージです

Page 12: Officeで使うPerl Excel編

今日のお話

※写真はイメージです

Page 13: Officeで使うPerl Excel編

Excel、使ってますか?

• Excel大好きな人

• 業務で使ってる人

• 一切使っていない人

Page 14: Officeで使うPerl Excel編

Excel、使ってますか?

• Excel大好きな人

• 業務で使ってる人 ←私はココ

• 一切使っていない人

Page 15: Officeで使うPerl Excel編

Excel縛り

• 出退勤時間はWebで登録しているのに残業時間の報告は Excelファイル!

• (なぜか)今まで Excelで管理されてたデータをDBに突っ込みたい!

• 自作ツールのマニュアルを Excelで欲しいと言われたけど、Markdownで書いたものしかない……

※上記例はイメージであり、発表者の実体験に基づくものではありません。

Page 16: Officeで使うPerl Excel編

そうだ! スクリプト書いて楽しよう!

Page 17: Officeで使うPerl Excel編

Perl on Windows

Page 18: Officeで使うPerl Excel編

Windowsに Perlを入れよう

• ActivePerl

• Vanilla Perl

• Strawberry Perl

Page 19: Officeで使うPerl Excel編

Windowsに Perlを入れよう

• ActivePerl

• Vanilla Perl

• Strawberry Perl

   # Strawberry Perlの開発者、 Adam Kennedy氏のトークは、

      2日目の 11: 20から!

Page 20: Officeで使うPerl Excel編

Excel in Perl

Page 21: Officeで使うPerl Excel編

Excelを扱うモジュール

• Win32::OLE

• SpreadSheet

• SpreadSheet::ParseExcel

• SpreadSheet::WriteExcel

• SpreadSheet::XLSX

• Excel

• Excel::Writer::XLSX

Page 22: Officeで使うPerl Excel編

Excelを扱うモジュール

• Win32::OLE

• SpreadSheet

• SpreadSheet::ParseExcel

• SpreadSheet::WriteExcel

• SpreadSheet::XLSX

• Excel

• Excel::Writer::XLSX

Page 23: Officeで使うPerl Excel編

Win32::OLEの使い方

Page 24: Officeで使うPerl Excel編

お約束( use Win32::OLE)#!/usr/bin/perl

use strict;

use warnings;

use Win32::OLE;

Page 25: Officeで使うPerl Excel編

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:\\YAPC\\empty.xlsx“});

# クローズ

$book->Close();

$excel->quit();

Page 26: Officeで使うPerl Excel編

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:\\YAPC\\empty.xlsx“});

# クローズ

$book->Close();

$excel->quit();

既に Excelが起動していたら、その Excelを使う

Page 27: Officeで使うPerl Excel編

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:\\YAPC\\empty.xlsx“});

# クローズ

$book->Close();

$excel->quit();

起動してる Excelのプロセスがなければ、新規に起動

Page 28: Officeで使うPerl Excel編

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:\\YAPC\\empty.xlsx“});

# クローズ

$book->Close();

$excel->quit();

新しいワークブックを作って

名前をつけて保存

Page 29: Officeで使うPerl Excel編

基本的な操作

Page 30: Officeで使うPerl Excel編

セルに文字を入力する# アクティブなシートのオブジェクトを取得

my $sheet = $book->ActiveSheet;

# セルに文字を入力

$sheet->Range("A1")->{Value} = 'YAPC::Asia TOKYO 2012';

$sheet->Cells(2,1)->{Value} = encode(cp932 => “at 東京大学 ");

Page 31: Officeで使うPerl Excel編

セルに文字を入力する# アクティブなシートのオブジェクトを取得

my $sheet = $book->ActiveSheet;

# セルに文字を入力

$sheet->Range("A1")->{Value} = 'YAPC::Asia';

$sheet->Cells(2,1)->{Value} = encode(cp932 => "in 東京 ");

セルの指定方法は2種類

Page 32: Officeで使うPerl Excel編

セルの文字を読み取る# セルの文字を読み取る

for (my $i=1;$i<=4;$i++) {

print $sheet->Range("A" . $i)->{Value}, "\n";

}

Page 33: Officeで使うPerl Excel編

セルの背景色を指定# 背景色を設定

$sheet->Range("C1:G7")->Interior->{ColorIndex} = 4;

for (my $i=1;$i<=8;$i++) {

$sheet->Cells($i,1)->Interior->{ColorIndex} = $i;

}

Page 34: Officeで使うPerl Excel編

セルの背景色を指定# 背景色を設定

$sheet->Range("C1:G7")->Interior->{ColorIndex} = 4;

for (my $i=1;$i<=8;$i++) {

$sheet->Cells($i,1)->Interior->{ColorIndex} = $i;

}

Page 35: Officeで使うPerl Excel編

フォントの設定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;

Page 36: Officeで使うPerl Excel編

フォントの設定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;

フォントも指定できる

Page 37: Officeで使うPerl Excel編

罫線を引く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;

Page 38: Officeで使うPerl Excel編

罫線を引く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;

事前にこれを書いておく

Page 39: Officeで使うPerl Excel編

罫線を引く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;

セルの下側に線を引く

Page 40: Officeで使うPerl Excel編

罫線を引く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;

四辺の他に斜めも引ける

Page 41: Officeで使うPerl Excel編

じゃあ、こういう事がしたかったら……?

Page 42: Officeで使うPerl Excel編

こんな感じ?# 罫線

$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;

Page 43: Officeで使うPerl Excel編

こんな感じ?# 罫線

$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;

違うっぽい……

Page 44: Officeで使うPerl 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("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;

Page 45: Officeで使うPerl Excel編

こうやれば簡単# 罫線

$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;

Page 46: Officeで使うPerl Excel編

幅、高さを変える# 幅を変える

$sheet->Columns("A:C")->{ColumnWidth} = 30;

# 高さを変える

$sheet->Rows("1:5")->{RowHeight} = 30;

Page 47: Officeで使うPerl Excel編

幅、高さを変える# 幅を変える

$sheet->Columns("A:C")->{ColumnWidth} = 30;

# 高さを変える

$sheet->Rows("1:5")->{RowHeight} = 30;

幅と高さは基準値が違うので、同じ数値を設定しても同じ長さにはならない

Page 48: Officeで使うPerl Excel編

こんな感じにすると……# 幅を変える

$sheet->Columns->{ColumnWidth} = 1;

# 高さを変える

$sheet->Rows->{RowHeight} = 9;

Page 49: Officeで使うPerl Excel編

これは…… Excel方眼紙!

Page 50: Officeで使うPerl Excel編

これは…… Excel方眼紙!

Excel方眼の話は、 LTソン 2日目のminemazさんの LTで聞けます!( 14:30くら

い?)

Page 51: Officeで使うPerl Excel編

全て選択する方法# 幅を変える

$sheet->Columns->{ColumnWidth} = 1;

# 高さを変える

$sheet->Rows->{RowHeight} = 9;

# フォントサイズは 9で統一

$sheet->Cells->Font->{Size} = 9;

Page 52: Officeで使うPerl Excel編

そういえば Excelマクロも動かせます# マクロ実行

$excel->Run(“macro1”);

# 引数を与えてマクロ実行

$excel->Run(“macro2”, 100);

Page 53: Officeで使うPerl Excel編

古いバージョンの Excelフォーマットで保存

Page 54: Officeで使うPerl Excel編

保存形式を設定する# ファイルを保存

$book->SaveAs({

Filename => "C:\\YAPC\\empty.xls",

Fileformat => xlExcel8

});

Page 55: Officeで使うPerl Excel編

Excel縛り?

• 出退勤時間はWebで登録しているのに残業時間の報告は Excelファイル!

• (なぜか)今まで Excelで管理されてたデータをDBに突っ込みたい!

• 自作ツールのマニュアルを Excelで欲しいと言われたけど、Markdownで書いたものしかない……

Page 56: Officeで使うPerl Excel編

楽できそうな気がしてきた!……かな?

Page 57: Officeで使うPerl Excel編
Page 58: Officeで使うPerl Excel編

他にできること• $sheet->PivotTableWizard(1, $sheet->Range(“A1:E7”), “PivotTable”);

• $book->Charts->Add;

Page 59: Officeで使うPerl Excel編

こんなこともできる(別の機会に)# ファイルを保存

$book->SaveAs({

Filename => "C:\\YAPC\\empty.xls",

Fileformat => xlExcel8

});

Page 60: Officeで使うPerl Excel編
Page 61: Officeで使うPerl Excel編