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

Officeで使うPerl Excel編

  • 3,691 views
Uploaded on

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

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

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,691
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
10
Comments
0
Likes
4

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Officeで使うPerl Excel編 by risou YAPC::Asia Tokyo 2012
  • 2. はじめに• お詫びと訂正
  • 3. お詫びと訂正
  • 4. お詫びと訂正
  • 5. お詫びと訂正
  • 6. えっ……(これ以上ないハードルの上げ方……!)
  • 7. はじめに• お詫びと訂正 • ごめんなさい、そんなに難しい話しません。
  • 8. お詫びと訂正
  • 9. お詫びと訂正
  • 10. はじめに• お詫びと訂正 • ごめんなさい、そんなに難しい話しません。 • 本トークは、ビギナーを想定しています(強調)
  • 11. 今日のお話 ※写真はイメージです
  • 12. 今日のお話 ※写真はイメージです
  • 13. Excel、使ってますか?• Excel大好きな人• 業務で使ってる人• 一切使っていない人
  • 14. Excel、使ってますか?• Excel大好きな人• 業務で使ってる人 ←私はココ• 一切使っていない人
  • 15. Excel縛り• 出退勤時間はWebで登録しているのに残業時間の報告 はExcelファイル!• (なぜか)今までExcelで管理されてたデータをDBに 突っ込みたい!• 自作ツールのマニュアルをExcelで欲しいと言われた けど、Markdownで書いたものしかない…… ※上記例はイメージであり、発表者の実体験に基づくものではありません。
  • 16. そうだ! スクリプト書いて楽しよう!
  • 17. Perl on Windows
  • 18. WindowsにPerlを入れよう• ActivePerl• Vanilla Perl• Strawberry Perl
  • 19. WindowsにPerlを入れよう• ActivePerl• Vanilla Perl• Strawberry Perl #Strawberry Perlの開発者、Adam Kennedy氏のトークは、 2日目の11:20から!
  • 20. Excel in Perl
  • 21. Excelを扱うモジュール• Win32::OLE• SpreadSheet • SpreadSheet::ParseExcel • SpreadSheet::WriteExcel • SpreadSheet::XLSX• Excel • Excel::Writer::XLSX
  • 22. Excelを扱うモジュール• Win32::OLE• SpreadSheet • SpreadSheet::ParseExcel • SpreadSheet::WriteExcel • SpreadSheet::XLSX• Excel • Excel::Writer::XLSX
  • 23. Win32::OLEの使い方
  • 24. お約束(use Win32::OLE)#!/usr/bin/perluse strict;use warnings;use Win32::OLE;
  • 25. 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();
  • 26. 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();
  • 27. 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();
  • 28. 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();
  • 29. 基本的な操作
  • 30. セルに文字を入力する# アクティブなシートのオブジェクトを取得my $sheet = $book->ActiveSheet;# セルに文字を入力$sheet->Range("A1")->{Value} = YAPC::Asia TOKYO 2012;$sheet->Cells(2,1)->{Value} = encode(cp932 => “at 東京大学");
  • 31. セルに文字を入力する# アクティブなシートのオブジェクトを取得my $sheet = $book->ActiveSheet;# セルに文字を入力$sheet->Range("A1")->{Value} = YAPC::Asia;$sheet->Cells(2,1)->{Value} = encode(cp932 => "in 東京"); セルの指定方法は2種類
  • 32. セルの文字を読み取る# セルの文字を読み取るfor (my $i=1;$i<=4;$i++) { print $sheet->Range("A" . $i)->{Value}, "n";}
  • 33. セルの背景色を指定# 背景色を設定$sheet->Range("C1:G7")->Interior->{ColorIndex} = 4;for (my $i=1;$i<=8;$i++) { $sheet->Cells($i,1)->Interior->{ColorIndex} = $i;}
  • 34. セルの背景色を指定# 背景色を設定$sheet->Range("C1:G7")->Interior->{ColorIndex} = 4;for (my $i=1;$i<=8;$i++) { $sheet->Cells($i,1)->Interior->{ColorIndex} = $i;}
  • 35. フォントの設定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;
  • 36. フォントの設定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; フォントも指定できる
  • 37. 罫線を引く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;
  • 38. 罫線を引く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;
  • 39. 罫線を引く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; セルの下側に線を引く
  • 40. 罫線を引く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; 四辺の他に斜めも引ける
  • 41. じゃあ、こういう事がしたかったら……?
  • 42. こんな感じ?# 罫線$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;
  • 43. こんな感じ?# 罫線$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; 違うっぽい……
  • 44. もしかして……$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;
  • 45. こうやれば簡単# 罫線$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;
  • 46. 幅、高さを変える# 幅を変える$sheet->Columns("A:C")->{ColumnWidth} = 30;# 高さを変える$sheet->Rows("1:5")->{RowHeight} = 30;
  • 47. 幅、高さを変える# 幅を変える$sheet->Columns("A:C")->{ColumnWidth} = 30;# 高さを変える$sheet->Rows("1:5")->{RowHeight} = 30; 幅と高さは基準値が違うので、 同じ数値を設定しても同じ長さにはならない
  • 48. こんな感じにすると……# 幅を変える$sheet->Columns->{ColumnWidth} = 1;# 高さを変える$sheet->Rows->{RowHeight} = 9;
  • 49. これは……Excel方眼紙!
  • 50. これは……Excel方眼紙! Excel方眼の話は、LTソン2日目の minemazさんのLTで聞けます!(14:30くらい?)
  • 51. 全て選択する方法# 幅を変える$sheet->Columns->{ColumnWidth} = 1;# 高さを変える$sheet->Rows->{RowHeight} = 9;# フォントサイズは9で統一$sheet->Cells->Font->{Size} = 9;
  • 52. そういえばExcelマクロも動かせます# マクロ実行$excel->Run(“macro1”);# 引数を与えてマクロ実行$excel->Run(“macro2”, 100);
  • 53. 古いバージョンのExcelフォーマットで保存
  • 54. 保存形式を設定する# ファイルを保存$book->SaveAs({ Filename => "C:YAPCempty.xls", Fileformat => xlExcel8});
  • 55. Excel縛り?• 出退勤時間はWebで登録しているのに残業時間の報告 はExcelファイル!• (なぜか)今までExcelで管理されてたデータをDBに 突っ込みたい!• 自作ツールのマニュアルをExcelで欲しいと言われた けど、Markdownで書いたものしかない……
  • 56. 楽できそうな気がしてきた!……かな?
  • 57. 他にできること• $sheet->PivotTableWizard(1, $sheet->Range(“A1:E7”), “PivotTable”);• $book->Charts->Add;
  • 58. こんなこともできる(別の機会に)# ファイルを保存$book->SaveAs({ Filename => "C:YAPCempty.xls", Fileformat => xlExcel8});