Skip to content

Instantly share code, notes, and snippets.

@thinkAmi
Created November 26, 2013 21:43
Show Gist options
  • Save thinkAmi/7666801 to your computer and use it in GitHub Desktop.
Save thinkAmi/7666801 to your computer and use it in GitHub Desktop.
Excel-DNAでExcelのワークシートを操作するサンプル
<DnaLibrary RuntimeVersion="v4.0" Name="WorksheetExample" Language="CS">
<ExternalLibrary Path="WorksheetExample.dll"/>
</DnaLibrary>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// Add
using ExcelDna.Integration;
using System.Windows.Forms;
namespace WorksheetExample
{
public class Main
{
// メニューへの追加
[ExcelCommand(MenuName = "AddIn", MenuText = "Worksheet")]
public static void DisplayMenu()
{
// 新規作成したワークシートがアクティブになる
MessageBox.Show("ワークシートを2枚(Sheet2, Sheet3)、新規作成します");
XlCall.Excel(XlCall.xlcWorkbookInsert);
XlCall.Excel(XlCall.xlcWorkbookInsert);
// 存在しないワークシート名を指定するとエラーになる
MessageBox.Show("ワークシート名を Sheet1 から hoge へ変更します");
XlCall.Excel(XlCall.xlcWorkbookName, "Sheet1", "hoge");
MessageBox.Show("アクティブになっているワークシート(Sheet3)を削除します");
XlCall.Excel(XlCall.xlcWorkbookDelete);
// COM経由でワークシートの数を計算する(ワークシートの移動で使う)
// COM経由以外では、Excelのワークシート数を取得する方法がわからなかった
dynamic app = ExcelDnaUtil.Application;
var count = app.Worksheets.Count;
MessageBox.Show("Sheet2を一番右へ移動します");
XlCall.Excel(XlCall.xlcWorkbookMove, "Sheet2", "test.xlsx", count);
// 一番左のワークシートの番号は 1
MessageBox.Show("Sheet2を一番左へ移動します");
XlCall.Excel(XlCall.xlcWorkbookMove, "Sheet2", "test.xlsx", 1);
// 一番右に新規作成するので、現在の枚数に +1 しておく
MessageBox.Show("Sheet2を、ブック内の一番右にコピーして移動します");
XlCall.Excel(XlCall.xlcWorkbookCopy, "Sheet2", "test.xlsx", count + 1);
MessageBox.Show("Sheet2を選択してアクティブにします");
XlCall.Excel(XlCall.xlcWorkbookActivate, "Sheet2");
MessageBox.Show("Sheet2を非表示にします");
XlCall.Excel(XlCall.xlcWorkbookHide, "Sheet2");
MessageBox.Show("Sheet2を再表示します");
XlCall.Excel(XlCall.xlcWorkbookUnhide, "Sheet2");
// 左上が「0, 0」で始まる
MessageBox.Show("アクティブなワークシートのセルに値を設定します");
var hoge = new ExcelReference(0, 0).SetValue("fuga");
var fuga = new ExcelReference(5, 5).SetValue("piyo");
// セルの値を取得する
var piyo = new ExcelReference(0, 0).GetValue().ToString();
MessageBox.Show("セルA1の値は " + piyo + " です");
// セルの選択:R1C1形式で記述する必要あり、選択しているセルの相対参照でもある
// 第一引数は範囲、第二引数は範囲内でアクティブになっているセル
// See: http://www.moug.net/tech/exvba/0050098.html
MessageBox.Show("セルを範囲選択します");
XlCall.Excel(XlCall.xlcSelect, "R[0]C[0]:R[4]C[4]", "R[0]C[0]");
MessageBox.Show("選択範囲内のセルの値をクリアします");
XlCall.Excel(XlCall.xlcClear);
MessageBox.Show("全シートを選択します");
XlCall.Excel(XlCall.xlcSelectAll);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment