Windows Dev. Site

LINQ / VSTO

VSTOとは、Visual Studio Tools for Office の略です。前回WebのTableでやったLINQによるソートをExcelのシートでやってみました。ExcelのシートのプロクラムといえばVBAですが、前からC#でやってみたいと思っていて、だったらLINQだよね、となり、今ちょうど調査しているし、という流れでテストしてみました。

環境 VSTO / Visual Studio 2010 & Excel 2010 / Windows 7
プロジェクトは、Visual C# -> Office -> 2010 -> Excel 2010 ブック です。

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Linq;
using Microsoft.Office.Tools.Excel;
using Microsoft.VisualStudio.Tools.Applications.Runtime;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;

namespace ExcelWorkbook
{
    public partial class Sheet1
    {
        private void InternalStartup()
        {
            this.button1.Click += new System.EventHandler(this.button1_Click);
        }
       private void button1_Click(object sender, EventArgs e)
        {
            DataTable table = new DataTable();
            Excel.Worksheet activeSheet = ((Excel.Worksheet)Application.ActiveSheet);

            table.Columns.Add("c1");
            table.Columns.Add("c2");
            table.Columns.Add("c3");
            for (int r = 1; r <= 6; r++)
            {
                table.Rows.Add(activeSheet.Cells[r, 1].Value, activeSheet.Cells[r, 2].Value, activeSheet.Cells[r, 3].Value);
            }
            var data = from dt in table.AsEnumerable()
                       orderby dt.Field<string>("c2")
                               select new
                               {
                                   a = dt.Field<string>("c1"),
                                   b = dt.Field<string>("c2"),
                                   c = dt.Field<string>("c3")
                               };
            int i=1;
            foreach (var d in data)
            {
                activeSheet.Cells[i, 1].Value = d.a;
                activeSheet.Cells[i, 2].Value = d.b;
                activeSheet.Cells[i, 3].Value = d.c;
                i++;
            }
        }
    }
}

table2

ボタンを押すと、中央の列がソートされます。

table3

VSTOって興味がありつつもなかなか使う機会が少ないのですが、やっばりまだVBAなのでしょうか。という私もVBAの手軽さはとても便利なので、よく使うのですが・・