teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

コード修正

2019/08/27 05:09

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -14,7 +14,10 @@
14
14
  {
15
15
  string 抽出1 = "番号='" + row["番号"].ToString() + "'";
16
16
  string categoryName = "hoge"; //TODO:正しいカテゴリ名をどこかから取得する
17
+ WorkSheet ws = 抽出1が新しいカテゴリなら ?
17
- WorkSheet ws = getCategorySheet(wb, categoryName);
18
+ CreateCategorySheet(wb, categoryName) :
19
+ (Worksheet)workbook.Worksheets[categoryName];
20
+
18
21
  WriteToWorkSheet(ws);
19
22
  //NOTE: Excelのプロセスが残ったままになることを防ぐため、COMオブジェクトの解放が必要
20
23
  System.Runtime.InteropServices.Marshal.ReleaseComObject(ws);
@@ -25,16 +28,11 @@
25
28
  //TODO: wsにデータを書き込む処理を作成
26
29
  }
27
30
 
28
- private Worksheet GetCategorySheet(WorkBook wb, string categoryName){
31
+ private Worksheet CreateCategorySheet(WorkBook wb, string categoryName){
29
- WorkSheet ws;
30
- if(抽出1が新しいカテゴリなら){
31
- wb.Worksheets.Add();
32
+ wb.Worksheets.Add();
32
- //NOTE: wb.Sheets[1]がブックの最初にあるシートなのでCountから1を引く必要はなさそう
33
+ //NOTE: wb.Sheets[1]がブックの最初にあるシートなのでCountから1を引く必要はなさそう
33
- ws = (Worksheet)wb.Sheets[wb.Sheets.Count()];
34
+ ws = (Worksheet)wb.Sheets[wb.Sheets.Count()];
34
- ws.Name = categoryName;
35
+ ws.Name = categoryName;
35
- }else{
36
- ws = (Worksheet)workbook.Worksheets[categoryName];
37
- }
38
36
  return ws;
39
37
  }
40
38
  ```

2

コードの修正&名前空間を書くのが面倒なので省略

2019/08/27 05:08

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -9,26 +9,34 @@
9
9
  0. カテゴリの種類分、[Worksheets.Add(Object, Object, Object, Object) Method](https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.office.interop.excel.worksheets.add?view=excel-pia#Microsoft_Office_Interop_Excel_Worksheets_Add_System_Object_System_Object_System_Object_System_Object_)を呼び出し、カテゴリ毎に分けた各列を各ワークシートに書き込む
10
10
 
11
11
  ```C#
12
- public void WriteToWorkBook(WorkBook wb ){
12
+ private void WriteToWorkBook(WorkBook wb ){
13
13
  foreach (DataRow row in xx.xxxx)
14
14
  {
15
15
  string 抽出1 = "番号='" + row["番号"].ToString() + "'";
16
16
  string categoryName = "hoge"; //TODO:正しいカテゴリ名をどこかから取得する
17
+ WorkSheet ws = getCategorySheet(wb, categoryName);
17
- WorkSheet ws;
18
+ WriteToWorkSheet(ws);
18
-
19
- if(抽出1が新しいカテゴリなら){
20
- wb.Worksheets.Add();
21
- //NOTE: wb.Sheets[1]がブックの最初にあるシートなのでCountから1を引く必要はなさそう
22
- ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Sheets[wb.Sheets.Count()];
23
- ws.Name = categoryName;
24
- }else{
25
- ws = (Excel.Worksheet)workbook.Worksheets[categoryName];
26
- }
27
- //TODO: wsにデータを書き込む処理を作成
28
19
  //NOTE: Excelのプロセスが残ったままになることを防ぐため、COMオブジェクトの解放が必要
29
20
  System.Runtime.InteropServices.Marshal.ReleaseComObject(ws);
30
21
  }
31
22
  }
23
+
24
+ private void WriteToWorkSheet(WorkSheet ws){
25
+ //TODO: wsにデータを書き込む処理を作成
26
+ }
27
+
28
+ private Worksheet GetCategorySheet(WorkBook wb, string categoryName){
29
+ WorkSheet ws;
30
+ if(抽出1が新しいカテゴリなら){
31
+ wb.Worksheets.Add();
32
+ //NOTE: wb.Sheets[1]がブックの最初にあるシートなのでCountから1を引く必要はなさそう
33
+ ws = (Worksheet)wb.Sheets[wb.Sheets.Count()];
34
+ ws.Name = categoryName;
35
+ }else{
36
+ ws = (Worksheet)workbook.Worksheets[categoryName];
37
+ }
38
+ return ws;
39
+ }
32
40
  ```
33
41
 
34
42
  また、Excelファイル自体の出力方法が分からない場合は[新規にExcelファイルを作成し、データを書き込み保存する](https://www.ipentec.com/document/csharp-save-excel-new-file-and-write)を参考にすると良いでしょう。

1

コメントの修正

2019/08/27 05:06

投稿

BluOxy
BluOxy

スコア2663

answer CHANGED
@@ -13,16 +13,16 @@
13
13
  foreach (DataRow row in xx.xxxx)
14
14
  {
15
15
  string 抽出1 = "番号='" + row["番号"].ToString() + "'";
16
- string カテゴリ名 = "hoge"; //TODO:正しいカテゴリ名をどこかから取得する
16
+ string categoryName = "hoge"; //TODO:正しいカテゴリ名をどこかから取得する
17
17
  WorkSheet ws;
18
18
 
19
19
  if(抽出1が新しいカテゴリなら){
20
20
  wb.Worksheets.Add();
21
- //NOTE: Excelシートは1スタートなので-1をする必要はなさそう
21
+ //NOTE: wb.Sheets[1]がブックの最初にあるシートなのでCountから1を引く必要はなさそう
22
22
  ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Sheets[wb.Sheets.Count()];
23
- ws.Name = カテゴリ名;
23
+ ws.Name = categoryName;
24
24
  }else{
25
- ws = (Excel.Worksheet)workbook.Worksheets[カテゴリ名];
25
+ ws = (Excel.Worksheet)workbook.Worksheets[categoryName];
26
26
  }
27
27
  //TODO: wsにデータを書き込む処理を作成
28
28
  //NOTE: Excelのプロセスが残ったままになることを防ぐため、COMオブジェクトの解放が必要