Officeで使うPerl Excel編
Upcoming SlideShare
Loading in...5
×
 

Officeで使うPerl Excel編

on

  • 4,309 views

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

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

Statistics

Views

Total Views
4,309
Views on SlideShare
3,902
Embed Views
407

Actions

Likes
3
Downloads
9
Comments
0

3 Embeds 407

http://yapcasia.org 405
http://twitter.com 1
https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Officeで使うPerl Excel編 Officeで使うPerl Excel編 Presentation Transcript

    • 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/perluse 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});