質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

2回答

2519閲覧

C# form Excel 現在のセルを選択、書き込み

tsutsumi800

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

0クリップ

投稿2018/10/09 05:08

編集2018/10/09 05:37

C# Formを使用したExcel操作の学習をしています。
新規シートを開き、同時に書き込みはできるのですが、
現在開いているシートへの書き込みの方法が分かりません。

現在開いているシートに書き込みをする方法を知りたいです。

最終目標:formのボタンを押すと開いているexcelシートの選択しているセルに文字が入力される。

環境:visual studio2017 , windows formアプリケーション(C#)

参考サイト:http://excelcsharp.lance40.com/post-3.html

private void button1_Click(object sender, EventArgs e)
{
// Excel操作用オブジェクト
Microsoft.Office.Interop.Excel.Application xlApp = null;
Microsoft.Office.Interop.Excel.Workbooks xlBooks = null;
Microsoft.Office.Interop.Excel.Workbook xlBook = null;
Microsoft.Office.Interop.Excel.Sheets xlSheets = null;
Microsoft.Office.Interop.Excel.Worksheet xlSheet = null;

//ここにコードを追加して現在開いているシートを指定し、↓につなげたいです

// B3セルを指定
xlCells = xlSheet.Cells;
xlRange = xlCells[3, 2] as Microsoft.Office.Interop.Excel.Range;

// 現在の値を表示 MessageBox.Show(xlRange.Value); // 値を設定 xlRange.Value = "変更後の値";

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2018/10/09 05:16

Excelの開き方というか、どういうライブラリを使っているかなど開発環境[回答に必須です]や、今できているコードの具体例を示していただけませんか[そのものの開示が難しいとしても多少提示していただかないと回答方針が定まりません]?
guest

回答2

0

ベストアンサー

参考サイトのコードを元に、あまり変更せず、結論を得るコード
(何度でもボタンを押した際に、値が代わっていることの確認のため"変更後の値"ではなく"i"を書き込むようにかえています)

csharp

1 public partial class Form1 : Form 2 { 3 public Form1() 4 { 5 InitializeComponent(); 6 } 7 private Microsoft.Office.Interop.Excel.Application xlApp = null; 8 private Microsoft.Office.Interop.Excel.Workbooks xlBooks = null; 9 private Microsoft.Office.Interop.Excel.Workbook xlBook = null; 10 private Microsoft.Office.Interop.Excel.Sheets xlSheets = null; 11 private Microsoft.Office.Interop.Excel.Worksheet xlSheet = null; 12 private int i = 0; 13 14 15 private void button1_Click(object sender, EventArgs e) 16 { 17 if(xlApp == null) 18 { 19 // Excelアプリケーション生成 20 xlApp = new Microsoft.Office.Interop.Excel.Application(); 21 22 // 既存のBookを開く 23 xlBooks = xlApp.Workbooks; 24 //xlBook = xlBooks.Open(System.IO.Path.GetFullPath(@"work01.xlsx")); 25 xlBook = xlBooks.Add(); 26 27 // シートを選択する 28 xlSheets = xlBook.Worksheets; 29 // 1シート目を操作対象に設定する 30 // ※Worksheets[n]はオブジェクト型を返すため、Worksheet型にキャスト 31 xlSheet = xlSheets[1] as Microsoft.Office.Interop.Excel.Worksheet; 32 33 } 34 // 表示 35 xlApp.Visible = true; 36 37 // セルのオブジェクト 38 Microsoft.Office.Interop.Excel.Range xlRange = null; 39 Microsoft.Office.Interop.Excel.Range xlCells = null; 40 41 // B3セルを指定 42 xlCells = xlSheet.Cells; 43 xlRange = xlCells[3, 2] as Microsoft.Office.Interop.Excel.Range; 44 45 // 現在の値を表示 46 MessageBox.Show(xlRange.Value?.ToString()); 47 48 // 値を設定 49 xlRange.Value = i++; 50 } 51 }
  • 注意いただきたい点

思ったようにできなかったのは、クリック処理の中で毎回xlAppを開き直していたからだと思われます。本回答はこの点にのみ焦点をあてたもののとなります。ただ、保存がきちんとなされていれば、動作は遅くても「クリックのたびごとに変更を反映する」は実現可能なはずなので、保存が上手くできていないのかもしれないです。
Excelファイルを C# と VB.NET で読み込む "正しい" 方法などを参考に、Interopを直接操作しない方法で取り組むことを推奨します。
これに関連して、上記では、解放処理を入れていません。十分ご注意ください。

投稿2018/10/09 06:02

編集2018/10/09 06:43
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsutsumi800

2018/10/09 06:40

動作確認しました。分かりやすい対応ありがとうございます。 「指定した(すでに保存済みの)ファイルを開き、開いていたら処理を行う」ではなく「現在開いているexcelファイル(新規作成したファイル)に処理を行う方法」が可能であれば教えていただけると幸いです。
papinianus

2018/10/09 06:44

追記しました。 xlBookにOpenしたものを入れるのではなく、xlBook = xlBooks.Add();とすれば新規になると思います。
tsutsumi800

2018/10/09 06:51

狙い通りの結果が出力されました。完璧です。ありがとうございます。
guest

0

参考にされているページを見てください。
「プロパティ・メソッド」の「ブック操作」に該当の項目があります。

投稿2018/10/09 05:45

YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問