【NetOffice】方法 : ブック内のワークシートを移動する

  • 2012.11.10 Saturday
  • 21:07
JUGEMテーマ:コンピュータ



Source and Project

Microsoft.Office.Interop.Excelでできる事は、NetOfficeでも似たようなコードで実現できるのではないか!?という安易な発想でMSDNに書かれているコードを試してみることにします。

今回は

方法 : ブック内のワークシートを移動する
http://msdn.microsoft.com/ja-jp/library/xyhf0ksb(v=vs.80).aspx

ワークブック内に存在するワークシートを指定した位置に移動させるには、Worksheet.MoveメソッドまたはSheets.Moveメソッドを利用します。前者は一つのシートを移動させる時に使い、後者は、複数のシートの移動する場合に使います。

using System;
using System.Linq;
using NetOffice.ExcelApi;

namespace Art55.NetOffice20121110_001
{
    class Program
    {
        static void Main()
        {
            // 方法 : ブック内のワークシートを移動する
            // http://msdn.microsoft.com/ja-jp/library/xyhf0ksb(v=vs.80).aspx

            var application = new Application {Visible = true};
            Workbook workbook = application.Workbooks.Add();
            workbook.Worksheets.Add(Type.Missing, workbook.Worksheets.Last(), 3);

            Console.ReadLine();

            // 末尾にあるシートを先頭に移動する。
            workbook.Worksheets.OfType<Worksheet>().Last().Move(workbook.Worksheets.First());

            Console.ReadLine();

            // 先頭にあるシートを一番最後に移動する。
            workbook.Worksheets.OfType<Worksheet>().First().Move(Type.Missing, workbook.Worksheets.Last());

            Console.ReadLine();

            // 末尾にあるシートを先頭の後ろに移動する。
            workbook.Worksheets.OfType<Worksheet>().Last().Move(Type.Missing, workbook.Worksheets.First());

            Console.ReadLine();

            // シート名でソートする。
            workbook
                .Worksheets
                .OfType<Worksheet>()
                .OrderBy(sheet => sheet.Name)
                .ToList()
                .ForEach(sheet => sheet.Move(Type.Missing, workbook.Worksheets.Last()));

            Console.ReadLine();

            // Sheet6, Sheet1, Sheet2をまとめて末尾に移動する。
            var sheets = (Sheets) workbook.Worksheets[new[] {"Sheet4", "Sheet1", "Sheet2"}];
            sheets.Move(Type.Missing, workbook.Worksheets.Last());

            // 何の為にあるのかよく分からないメソッド
            // workbook.Worksheets.Move();  // 呼び出すと例外と発生する。

            Console.ReadLine();

            // 先頭のシートを末尾にコピーする。
            var worksheet = ((Worksheet) workbook.Worksheets[1]);
            worksheet.Range("A1").Value = "Sheet1!$A$11";
            worksheet.Copy(Type.Missing, workbook.Worksheets.Last());

            Console.ReadLine();
        }
    }
}

■末尾にあるシートを先頭に移動する。
workbook.Worksheets.OfType<Worksheet>().Last().Move(workbook.Worksheets.First());

移動したいワークシートを指定して、そのWorksheet.Moveメソッドを呼び出します。第一引数に指定したワークシートの手前に移動します。今回は先頭のワークシートが指定されているため、末尾にあるSheet6をSheet1の手前に移動するという意味になります。

■先頭にあるシートを一番最後に移動する。
workbook.Worksheets.OfType<Worksheet>().First().Move(Type.Missing, workbook.Worksheets.Last());

移動元が先頭のワークシートで、第二引数に指定したワークシートの後ろに移動します。第一引数は未指定という意味で、Type.Missingです。今回は末尾のワークシートが指定されているため、先頭にあるSheet6をSheet5の後ろに移動するという意味になります。

■末尾にあるシートを先頭の後ろに移動する。
workbook.Worksheets.OfType<Worksheet>().Last().Move(Type.Missing, workbook.Worksheets.First());


■シート名でソートする。
workbook
.Worksheets
.OfType<Worksheet>()
.OrderBy(sheet => sheet.Name)
.ToList()
.ForEach(sheet => sheet.Move(Type.Missing, workbook.Worksheets.Last()));

名前順にシートを列挙し、その順序で末尾に移動させていけば、シートが名前順に並びます。

■まとめて末尾に移動する。
var sheets = (Sheets) workbook.Worksheets[new[] {"Sheet4", "Sheet1", "Sheet2"}];
sheets.Move(Type.Missing, workbook.Worksheets.Last());

シートをまとめて移動したい場合は、Sheetsオブジェクトに存在するMoveメソッドを利用します。今回の場合であれば、"Sheet4", "Sheet1", "Sheet2"を移動元として、シートの末尾に移動します。、"Sheet4", "Sheet1", "Sheet2"という順序は、移動には影響せずに、実際に並んでいる順序、つまり"Sheet1", "Sheet2", "Sheet4"のまま移動していることが分かります。

■先頭のシートを末尾にコピーする。
var worksheet = ((Worksheet) workbook.Worksheets[1]);
worksheet.Range("A1").Value = "Sheet1!$A$11";
worksheet.Copy(Type.Missing, workbook.Worksheets.Last());

MoveとCopyの違いを見るために、コードに書いてみました、

Copyの場合は文字通りシートがコピーされます。そのため元のソートはそのままで、新たなシートが追加されます。追加されたシートの内容はコピー元の内容になります。シート名は同名が許されていないので、適当な連番が振られるようです。

Source and Project

--------------------------------------
本投稿は、CodePlexで公開されているNetOfficeを利用しています。
NetOffice - MS Office in .NET
http://netoffice.codeplex.com/

NetOffice関連の記事は下記にまとめています。
【NetOffice】【Excel】NetOfficeのまとめ
http://pro.art55.jp/?eid=1304102
--------------------------------------

コメント
コメントする








    
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     
<< April 2018 >>

あわせて読みたい

あわせて読みたいブログパーツ

selected entries

categories

archives

recent comment

  • 【キーボード】6年前のRealForceを復活させることはできる!?その3
    art55 (05/22)
  • 【キーボード】6年前のRealForceを復活させることはできる!?その3
    分解大好き (05/18)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    art55 (02/04)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    Gen (02/04)
  • 【キーボード】RealForce が壊れて帰ってきた。
    art55 (04/29)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    art55 (02/23)
  • 【.NET Framework 4.5】 IListがIReadOnlyListを継承してない理由。
    かるあ (02/22)
  • 【C#】Dictionaryの実装・データ構造・アルゴリズムを観察する。
    art55 (01/16)
  • 【C#】Dictionaryの実装・データ構造・アルゴリズムを観察する。
    karuakun (01/16)
  • 【NetOffice】【Excel】死なないExcelプロセスをKillする。
    art55 (12/05)

recent trackback

recommend

recommend

recommend

C#プログラマのための.NETアプリケーション最適化技法 (Programmer's SELECTION)
C#プログラマのための.NETアプリケーション最適化技法 (Programmer's SELECTION) (JUGEMレビュー »)
Sasha Goldshtein,Dima Zurbalev,Ido Flatow,サシャ・ゴルドシュタイン,ディマ・ズルバレフ,イド・フラトー

recommend

ろんりと集合
ろんりと集合 (JUGEMレビュー »)
中内 伸光
とてもわかりやすいです。

recommend

recommend

シャノン・ノイマン・ディジタル世界
シャノン・ノイマン・ディジタル世界 (JUGEMレビュー »)
市川 忠男
4章がリレーショナルデータベースな内容になってます。ページ数があまりありませんが、ポイントがものすごく的確にまとまっていて、感動します。

recommend

recommend

東プレ Realforce91UBK-S 静音キーボード 静電容量無接点方式 変荷重 ブラック NG01BS
東プレ Realforce91UBK-S 静音キーボード 静電容量無接点方式 変荷重 ブラック NG01BS (JUGEMレビュー »)

テンキーレス、静音のRealForce91UBK-S。スコスコ感がたまらなく気持ちいいです。家と会社で2台持ってます。

recommend

recommend

プログラミング.NET Framework 第4版 (プログラミングシリーズ)
プログラミング.NET Framework 第4版 (プログラミングシリーズ) (JUGEMレビュー »)
Jeffrey Richter
発売予定美 2013年10月10日。.NET Frameworkとお付き合いする人のバイブルですね。

recommend

recommend

キャット・シッターの君に。
キャット・シッターの君に。 (JUGEMレビュー »)
喜多嶋 隆
私のイラストレータデビュー本です。

recommend

Essential .NET ― 共通言語ランタイムの本質
Essential .NET ― 共通言語ランタイムの本質 (JUGEMレビュー »)
ドン・ボックス,クリス・セルズ,Don Box,Chris Sells,吉松 史彰

links

profile

search this site.

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM