Officeで使うPerl Excel編

5,034 views
4,725 views

Published on

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

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,034
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
10
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Officeで使うPerl Excel編

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

×