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++; } } } }
ボタンを押すと、中央の列がソートされます。
VSTOって興味がありつつもなかなか使う機会が少ないのですが、やっばりまだVBAなのでしょうか。という私もVBAの手軽さはとても便利なので、よく使うのですが・・