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

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

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

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

Q&A

解決済

1回答

6951閲覧

C# EPPlusで、指定シート名のみ選択(アクティブ)状態にしたい。

abcmart

総合スコア7

C#

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

0グッド

0クリップ

投稿2020/01/29 08:20

C#のEPPlusの使い方について御存じの方、教えていただければとおもいます。

Excelファイルを読み込み諸々処理をした後、
最終的に"指定シート名"のみが開けれている状態(アクティブ)にしたいです。
また、読み込んだExcelファイルで
最後に開いていたsheet("入力シート名")は非表示ではなく、選択解除したいです。

ClosedXMLでなら、
workbook.Worksheets.Worksheet("指定シート名").TabActive = true;
workbook.Worksheets.Worksheet("入力シート名").TabSelected = false;
とすれば実現できたのですが、
EPPlusを使うことになりまして行き詰っております。

var inputExcelFile = new FileInfo(fileURL);
var inputFile = new ExcelPackage(inputExcelFile);
var sheet = inputFile.Workbook.Worksheets["指定シート名"];

上記のようにsheet変数に対して、諸々セル操作した後、
最後に指定シート名のみが選択された状態にし、
入力シート名は選択解除にしたいです。

お手数ですが、ご回答よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

下記記事のActiveTabで出来ないでしょうか?
当方は使った経験もありませんし、検証もしていません。

https://chawatoyo.blog.fc2.com/blog-entry-45.html

追記:
下記記事のsheet.View.ActiveCellでセルを選択することが書かれていますが、
選択解除の情報が見当たらないですね。sheet.View.ActiveCellに
文字列長0の文字列を設定したら解除にならないかなー(願望)。

https://chawatoyo.blog.fc2.com/blog-entry-40.html

追記;
検証してみました。ソース内のコメントを見てください。
セルの選択解除の方法は発見できませんでした。

C#

1 private void button1_Click(object sender, EventArgs e) 2 { 3 //出力ファイルの準備(実行ファイルと同じフォルダに出力される) 4 FileInfo newFile = new FileInfo("result.xlsx"); 5 if (newFile.Exists) 6 { 7 newFile.Delete(); 8 newFile = new FileInfo("result.xlsx"); 9 } 10 11 //Excelファイルの作成 12 using (ExcelPackage package = new ExcelPackage(newFile)) 13 { 14 //Sheet1を追加 15 ExcelWorksheet sheet = package.Workbook.Worksheets.Add("Sheet1"); 16 17 //Sheet2を追加 18 ExcelWorksheet sheet2 = package.Workbook.Worksheets.Add("Sheet2"); 19 20 Random r = new Random(1000); 21 for (int x = 1; x < 100; x++) 22 { 23 for (int y = 1; y < 100; y++) 24 { 25 sheet.Cells[y, x].Value = r.Next(100); 26 } 27 } 28 29 //Sheet1をアクティブにする 30 package.Workbook.View.ActiveTab = 0; 31 32 //Sheet2をアクティブにする 33 sheet2.View.TabSelected = true; 34 35 //Sheet2のB2を選択 36 sheet2.View.ActiveCell = "B2"; 37 //sheet2.View.ActiveCell = null; //エラー 38 //sheet2.View.ActiveCell = ""; //エラー 39 40 //Sheet2のA1:B2を選択 41 sheet2.View.SelectedRange = "A1:B2"; 42 //sheet2.View.SelectedRange = null; //エラー 43 //sheet2.View.SelectedRange = ""; //エラー 44 45 //保存 46 package.Save(); 47 } 48 }

追記:
下記コードで実験しましたが、選択解除されませんでした。

C#

1 //セルが選択解除されることを期待したが、A1が選択される 2 sheet2.InsertRow(1, 1); 3 sheet2.View.ActiveCell = "A1"; 4 sheet2.View.SelectedRange = "A1"; 5 sheet2.DeleteRow(1);

投稿2020/01/29 09:42

編集2020/01/30 06:47
kikukiku

総合スコア514

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

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

abcmart

2020/01/29 10:51

ありがとうございます。 いただいた情報で少し検証してみます。
abcmart

2020/01/30 06:02

指定シートを選択した状態にはできましたが、 一方で"入力シート名"の解除の仕方がわからないですね。
kikukiku

2020/01/30 06:33

入力シート名の解除とはどういうことですか?
kikukiku

2020/01/30 06:40

セルの選択解除のことですね。 試行錯誤してみましたが、今のところ発見できていません。 スマートではないですが、もしかすると下記のようにすると選択解除できるかも。 1.行をインサート 2.インサートした行の1つのセルを選択する 3.インサートした行を削除
abcmart

2020/01/30 06:46

セルは関係ないです。 関係あるのはシートです。 入力対象のExcelファイル(雛形)でデフォルト表示されているシートを指しております。 上記デフォルトシート以外の指定したシートのみを表示しておきたいわけです。
kikukiku

2020/01/30 06:51

デフォルトシートを非表示にしたいということですか? やりたいことがまだわかりません。
abcmart

2020/01/30 07:01

入力ファイル内に "デフォルトシート","1","2",3" と合計4シートあるとします。 "3"を指定した場合、そのエクセルを起動時に シート"3"が表示されている状態にしたいのです。 このとき他のシート(シートタブ)は非表示ではなく、 そのまま見えるようにはしておきたいです。 "3"を指定して表示できるようにはできたのですが、 "デフォルトシート"のシートタブが選択された状態のままなのです。 "デフォルトシート"と"3"がシートタブでは選択されていて、 シートの表示としては"3"シートが表示されている状態になっております。
kikukiku

2020/01/30 07:10

下記では駄目ですか? //Sheet2をアクティブにする sheet2.View.TabSelected = true;
kikukiku

2020/01/30 07:14

当方の環境では同じ現象は発生しないですねー。 Winformアプリ .netframework4.5.2 EPPLUSはnugetから取得し、バージョンは4.5.3.2 OSはWin10(64bit)
abcmart

2020/01/30 07:27

解決しました。 sheet2.View.TabSelected = true; これでできますね。 すみません、いただいたソースを見落としておりました。 ご回答ありがとうございます!
kikukiku

2020/01/30 07:31

下記を複数シートに設定することで、タブが複数選択される状態にできました。 sheet2.View.TabSelectedMulti = true; 選択したいシートのみtrueにして、選択したくないシートをfalseにしてみてはどうでしょうか?
kikukiku

2020/01/30 07:32

入違ったようですね。 解決して良かったです。
abcmart

2020/01/30 07:39

ありがとうございます。 元々、C# ClosedXMLのXLWorkbookをして今回のExcel操作をしていました。 しかし、入力Excelファイル内に図形等を挿入して保存した状態のまま、今回のような操作をすると、 挿入しておいた図形が消える現象が起きておりました。 これを解決するべく、EPPlusにシフトしたのが背景です。
kikukiku

2020/01/30 07:41

貴重なコメントありがとうございます。 Excelを制御することになった場合に参考にさせて頂きます。
abcmart

2020/01/30 07:59

こちらこそ、大変助かりました。 ありがとうございます。
kikukiku

2020/01/31 02:05

解決済みマークを忘れずに^^
abcmart

2020/01/31 11:00

忘れてはないです! 最後まで出来るか検証しておりました。 問題なさそうです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問