回答編集履歴
3
コード修正
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
|
-
|
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
|
31
|
+
private Worksheet CreateCategorySheet(WorkBook wb, string categoryName){
|
29
|
-
WorkSheet ws;
|
30
|
-
if(抽出1が新しいカテゴリなら){
|
31
|
-
|
32
|
+
wb.Worksheets.Add();
|
32
|
-
|
33
|
+
//NOTE: wb.Sheets[1]がブックの最初にあるシートなのでCountから1を引く必要はなさそう
|
33
|
-
|
34
|
+
ws = (Worksheet)wb.Sheets[wb.Sheets.Count()];
|
34
|
-
|
35
|
+
ws.Name = categoryName;
|
35
|
-
}else{
|
36
|
-
ws = (Worksheet)workbook.Worksheets[categoryName];
|
37
|
-
}
|
38
36
|
return ws;
|
39
37
|
}
|
40
38
|
```
|
2
コードの修正&名前空間を書くのが面倒なので省略
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
|
-
|
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
|
-
|
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
コメントの修正
answer
CHANGED
@@ -13,16 +13,16 @@
|
|
13
13
|
foreach (DataRow row in xx.xxxx)
|
14
14
|
{
|
15
15
|
string 抽出1 = "番号='" + row["番号"].ToString() + "'";
|
16
|
-
string
|
16
|
+
string categoryName = "hoge"; //TODO:正しいカテゴリ名をどこかから取得する
|
17
17
|
WorkSheet ws;
|
18
18
|
|
19
19
|
if(抽出1が新しいカテゴリなら){
|
20
20
|
wb.Worksheets.Add();
|
21
|
-
//NOTE:
|
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オブジェクトの解放が必要
|