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

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

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

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

Visual Studio

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

Q&A

1回答

1397閲覧

C# コンソールアプリからExcelファイルへの出力に関して

inupisu

総合スコア11

C#

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

Visual Studio

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

0グッド

0クリップ

投稿2018/07/18 08:10

前提・実現したいこと

現在,VS2017のコンソールアプリで,ClosedXMLを用いたExcelファイルの操作を行っています.

今作成しているものは,アプリを実行すると,Excelファイルが作成され,A1セルに"Hello World"と表示される
というすごく簡単なものです.

これにプログラムを加えて,アプリを実行するたびに,A1→A2→A3という風に順番に文字列を追加できるようにしたいです.

アプリ実行 → A1に"Hello World"が表示 → アプリ終了 → アプリ実行 → A1 A2の両方に"Hello World"が表示 というような
イメージになります. A50まで繰り返したいです.

自分としましては,アプリを実行した際に,A1からA50まで文字列が入っているか順番に取得をしていって,入っていなければそこに
文字列を追加するという考えが浮かんだのですが,もしなにか他に方法があれば参考にさせていただきたいなという風に思い
質問させていただきました.
よろしくお願いいたします.

また値を参照し取得する際,スマートな方法があればそれに関してもお知恵をお貸しいただければ幸いです.

該当のソースコード

C#

1using ClosedXML.Excel; 2 3namespace ConsoleApp3 4{ 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 var workbook = new XLWorkbook(); 10 var worksheet = workbook.Worksheets.Add("Sample Sheet"); 11 worksheet.Cell("A1").Value = "Hello World"; 12 workbook.SaveAs("HelloWorld.xlsx"); 13 } 14 } 15}

補足情報(FW/ツールのバージョンなど)

Visual Studio2017 Console App C# です.

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

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

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

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

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

papinianus

2018/07/18 08:33

確認ですが、例えば"A2"に文字が入っているかを探すと仰っておられるのは、ループを使い、例えばworksheet.Cell(i,1)という風にするアクセスすることを想定している、ということで良いでしょうか
inupisu

2018/07/19 07:01

コメントありがとうございます. はい,おっしゃる通りです!
guest

回答1

0

こんな感じでいかがでしょうか。

c#

1class Program 2{ 3 private const string FilePath = @"HelloWorld.xlsx"; 4 private const string SheetName = "Sample Sheet"; 5 6 static void Main(string[] args) 7 { 8 using (var workbook = GetWorkbook()) 9 { 10 using (var worksheet = GetWorksheet(workbook)) 11 { 12 for (var i = 1; i <= 50; i++) 13 { 14 // 空のセルが見つかるまでスキップし、値を入れたらそこで処理を終了. 15 if (worksheet.Cell("A" + i).Value.ToString() == "") 16 { 17 worksheet.Cell("A" + i).Value = "Hello world"; 18 break; 19 } 20 } 21 } 22 workbook.Save(); 23 } 24 } 25 26 static XLWorkbook GetWorkbook() 27 { 28 if (File.Exists(FilePath)) 29 { 30 return new XLWorkbook(FilePath); 31 } 32 // ファイルが存在しなければ新規作成. 33 var workbook = new XLWorkbook(); 34 // 1つ以上シートが存在する必要があるのでシートを追加. 35 workbook.Worksheets.Add(SheetName); 36 workbook.SaveAs(FilePath); 37 return workbook; 38 } 39 40 static IXLWorksheet GetWorksheet(XLWorkbook workbook) 41 { 42 if(workbook.TryGetWorksheet(SheetName, out var worksheet)) 43 { 44 return worksheet; 45 } 46 // シートが存在しなければ追加. 47 return workbook.Worksheets.Add(SheetName); 48 } 49}
  • XLWorkbook、IXLWorksheetは使い終わった後Disposeする必要があるため、usingを使って自動でDisposeされるようにしています。
  • 2回目以降に実行した場合、WorkbookとWorksheetはすでに存在するため、既存のものをとってくるようにしています(GetWorkbook()、GetWorksheet())。

投稿2018/07/31 22:33

masanori_msl

総合スコア80

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問