Created
November 26, 2013 21:43
-
-
Save thinkAmi/7666801 to your computer and use it in GitHub Desktop.
Excel-DNAでExcelのワークシートを操作するサンプル
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <DnaLibrary RuntimeVersion="v4.0" Name="WorksheetExample" Language="CS"> | |
| <ExternalLibrary Path="WorksheetExample.dll"/> | |
| </DnaLibrary> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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