# basic02.rb.txt: ruby script (encoding: Windows-31J) # Excelの基本操作・その2 z_basic02.xls を出力 # 行の挿入・列の削除・ワークシートのコピー作成・並べ替え # 行の折り返し・セル内での中寄せ # グラフの作成、そのグラフをpngファイルとして出力 # 「__END__」以降にグラフの種類の参考情報あり require "exlap" filename = "z_basic02.xls" # これから作るワークブックの名前 if test(?e, filename) # z_basic02.xls が既にあるなら削除 File.unlink(filename) end # 東北6県の人口データを変数(rubyの配列)に代入 population = [["都道府県", "H17人口", "人口密度", "人口性比"], ["青森", 1437000, 149.5, 89.0], ["岩手", 1385000, 90.7, 91.5], ["宮城", 2360000, 324.0, 94.4], ["秋田", 1146000, 98.6, 88.9], ["山形", 1216000, 130.4, 92.3], ["福島", 2091000, 151.7, 94.4]] xl = Exlap.new # Excelの起動 xl.opens(filename) do |wb| # ワークブックを開く ## 行の挿入・列の削除・ワークシートのコピー作成・並べ替え ss = wb.fes # 空のワークシートを選択 ss.Name = "東北・北海道の人口等" # ↓ 東北6県のデータをA1欄から一括して書き込む ss.from_a("A1", population) y,x = ss.range_address("青森") # 「青森」が書かれたセル番地を得る # ↓ 「青森」のところに空白行1行挿入。「青森」は下の行に移る ss.cell(y,x).EntireRow.Insert # ↓ 挿入した1行に北海道のデータを書き込む ss.from_a(y,x, ["北海道", 5628000, 71.8, 89.9]) # ↓ ワークシートのコピーを作成。同じ内容のシートが次シートに挿入される ss.Copy('After'=>ss) ss = wb.offset_sheet(ss, 1) # 次シートに焦点を移す ss.Name = "人口の少ない順に整列" # ワークシート名 ss.findf("人口性比").EntireColumn.Delete # 「人口性比」の列を削除 rng = ss.UsedRange # データがある領域全体を範囲とする rng.Sort('Header'=>XlYes, # 先頭行を見出し行と見なす 'Key1'=>ss.Range("B2"), # 2列目「H17人口」をキーにする 'Order1'=>XlAscending) # 小さい順 ss.cell(1,1).EntireRow.Insert # 第1行目に空白行を挿入 ss.cell(1,1).Value = "人口の少ない順" # 第1行目にタイトルを書き込む ## 行の折り返し・セル内での中寄せ ss = wb.fes ss.Name = "行の折り返し・セル内での中寄せ" ss.Range("A1").Value = "行の折り返し・セル内での中寄せの設定" ss.Range("A1:B1").MergeCells = true # セル結合 # テスト用のデータ書込み ss.Range("A2").Value = "ドナウ川" ss.Range("B2").Value = "ドイツからはじまり、東欧各国を含む10ヶ国を" + "通って黒海に注ぐ重要な国際河川" ss.Range("A3").Value = "テムズ川" ss.Range("B3").Value = "南イングランドを流れ、ロンドンを" + "海とつないでいる。エスチュアリーの入り江をつくる河川" rng = ss.Range("A2:B3") width = [10, 50] # 1列と2列の幅(桁数) rng.Columns.each do |col| col.ColumnWidth = width.shift # 列の幅を設定 end rng.Rows.each do |row| col_num = 1 # 列の番号をこの変数に記憶させる row.Columns.each do |col| col.WrapText = true # 行の折り返しOn if col_num == 1 # 第1列目(左端のセル)を中寄せに設定 col.HorizontalAlignment = XlCenter # 水平方向に中寄せ col.VerticalAlignment = XlCenter # 垂直方向に中寄せ end col_num += 1 # 列番号記録用変数の値を1つ増やす end row.AutoFit # セルの高さを自動設定 end ss.range_allbox(rng) # 罫線を引く ## グラフの作成 ss = wb.fes # 空のワークシートを選択 ss.Name = "グラフの作成" ss1 = wb.ss(1) # 第1ワークシートをss1に代入 addr = ss1.UsedRange.Address # ss1の実際にデータがある領域の番地 ss1.Range(addr).Copy(ss.Range(addr)) # ss1の内容をssにコピー y,x = ss.range_last # データのある領域の末尾のセルの番地を取得 srng = ss.Range(ss.cell(2,1), ss.cell(y,2)) # グラフの素材データの領域 grng = ss.Range(ss.cell(y+4,2), ss.cell(y+14,12)) # グラフを描く領域 chobj = ss.ChartObjects.Add('Left'=>grng.Left, 'Top'=>grng.Top, 'Width'=>grng.Width, 'Height'=>grng.Height) chobj.Activate ch = chobj.Chart ch.chartType = XlColumnClustered # 集合縦棒グラフ # ↑ XlLineだと折れ線グラフになる ch.SetSourceData('Source'=>srng) ch.HasTitle = true ch.ChartTitle.Characters.Text = "東北6県の人口" ch.Axes(XlCategory, XlPrimary).HasTitle = true # X項目軸 ch.Axes(XlCategory, XlPrimary).AxisTitle.Characters.Text = "都道府県" ch.Axes(XlValue, XlPrimary).HasTitle = true # Y項目軸 ch.Axes(XlValue, XlPrimary).AxisTitle.Characters.Text = "H17人口" img_file = Exl::fullpath("z_basic02.png") # 画像ファイル名 if test(?e, img_file) # 既に同名の画像ファイルがあるなら削除 File.unlink(img_file) end ch.Export(img_file) ch.Deselect # グラフオブジェクトの選択を解除 ss = wb.ss(1) # 第1ワークシートを選択 ss.Activate wb.save # ワークブックの保存 end xl.quit # Excelの終了 __END__ *グラフの種類  グラフの種類(折れ線グラフ・棒グラフなど)として指定できる値を列記。  指定しない時は、集合縦棒グラフ(XlColumnClustered)になる。 縦棒 集合縦棒 XlColumnClustered 3-D集合縦棒 Xl3DcolumnClustered 積み上げ縦棒 XlColumnStacked 3-D積み上げ縦棒 Xl3DcolumnStacked 100%積み上げ縦棒 XlColumnStacked100 3-D100%積み上げ縦棒 Xl3DcolumnStacked100 3-D縦棒 Xl3Dcolumn 横棒 集合横棒 XlBarClustered 3-D集合横棒 Xl3DBarClustered 積み上げ横棒 XlBarStacked 3-D積み上げ横棒 Xl3DBarStacked 100%積み上げ横棒 XlBarStacked100 3-D100%積み上げ横棒 Xl3DBarStacked100 折れ線 折れ線 XlLine データマーカー付き折れ線 XlLineMarkers 積み上げ折れ線 XlLineStacked データマーカー付き XlLineMarkersStacked 積み上げ折れ線 100% 積み上げ折れ線 XlLineStacked100 データマーカー付き XlLIneMarkersStacked100 100%積み上げ折れ線 3-D折れ線 Xl3DLine 円 円 XlPie 分割円 XlPieExploded 3-D円 Xl3Dpie 分割3-D円 Xl3DPieExploded 補助円グラフ付き円 XlPieOfPie 補助縦棒グラフ付き円 XlBarOfPie 散布図 散布図 XlXYScatter 平滑線付き散布図 XlXYScatterSmooth 平滑線付き散布図 XlXYScatterSmoothNoMarkers (データ マーカーなし) 折れ線付き散布図 XlXYScatterLines 折れ付き散布図 XlXYScatterLinesNoMarkers (データ マーカーなし) バブル バブル XlBubble 3-D効果付きバブル XlBubble3DEffect 面 面 XlArea 3-D面 Xl3DArea 積み上げ面 XlAreaStacked 3-D積み上げ面 Xl3DAreaStacked 100%積み上げ面 XlAreaStacked100 3-D100%積み上げ面 Xl3DAreaStacked100 ドーナツ ドーナツ XlDoughnut 分割ドーナツ XlDoughnutExploded レーダー レーダー XlRadar データマーカー付きレーダー XlRadarMarkers 塗りつぶしレーダー XlRadarFilled 等高線 3-D等高線 XlSurface 等高線(トップ ビュー) XlSurfaceTopView 3-D等高線(ワイヤフレーム) XlSurfaceWireframe 等高線 XlSurfaceTopViewWireframe (トップビュー-ワイヤフレーム) 株価 高値-安値-終値 XlStockHLC 出来高-高値-安値-終値 XlStockVHLC 始値-高値-安値-終値 XlStockOHLC 出来高-始値-高値-安値-終値 XlStockVOHLC 円柱 集合円柱縦棒 XlCylinderColClustered 集合円柱横棒 XlCylinderBarClustered 積み上げ円柱縦棒 XlCylinderColStacked 積み上げ円柱横棒 XlCylinderBarStacked 100%積み上げ円柱縦棒 XlCylinderColStacked100 100%積み上げ円柱横棒 XlCylinderBarStacked100 3-D円柱縦棒 XlCylinderCol 円錐 集合円錐縦棒 XlConeColClustered 集合円錐横棒 XlConeBarClustered 積み上げ円錐縦棒 XlConeColStacked 積み上げ円錐横棒 XlConeBarStacked 100%積み上げ円錐縦棒 XlConeColStacked100 100%積み上げ円錐横棒 XlConeBarStacked100 3-D円錐縦棒 XlConeCol ピラミッド 集合ピラミッド縦棒 XlPyramidColClustered 集合ピラミッド横棒 XlPyramidBarClustered 積み上げピラミッド縦棒 XlPyramidColStacked 積み上げピラミッド横棒 XlPyramidBarStacked 100%積み上げピラミッド縦棒 XlPyramidColStacked100 100%積み上げピラミッド横棒 XlPyramidBarStacked100 3-Dピラミッド縦棒 XlPyramidCol