
【質問】
・指定した行(2行)をListViewで2列に分けたい
・1行目は1列目、2行目は2列目をListViewで表示したい
【目的】
・エクセルファイルの行を指定し、繰り返し文で列をすべて取得。その後、行ごとに1列ずつ表示したい(※今回は2行取得したので、1行目は1列目、2行目は2列目にしたい。)
・エクセルで指定した行の列は400列ある。
・2行の列は同じ数。
【相談前実装】
・1行に対し、ループで回し。List<string[]>に格納をし、[0]と[1]のforeach文でまわし、listView1.Items.Addに追加した。が、かさなってしまったため。subItems.addも用いましたが、行並びになってしまった。
【環境】
・C# .net framework4.7 visual studio2022 windowsform
よろしくお願いいたします。
C#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using NPOI.SS.UserModel; 8using System.Text; 9using System.Threading.Tasks; 10using System.Windows.Forms; 11 12namespace test 13{ 14 public partial class Form4 : Form 15 { 16 List<string[]> datalists = new List<string[]>(); 17 public Form4() 18 { 19 InitializeComponent(); 20 21 datalists.Clear(); 22 23 //エクセルファイルを開いた 24 IWorkbook workbook = WorkbookFactory.Create(@"エクセルファイル"); 25 //シート2を参照 26 ISheet worksheet = workbook.GetSheetAt(1); 27 //シートの行をworksheet.LastRowNum; で最終行まで参照 28 int lastRow = worksheet.LastRowNum; 29 //int i = 8 パラメータ値の行からアドレスの行まで 30 //8行目から9行目までの2行を取得 31 for (int i = 8; i <= 9; i++) 32 { 33 //i番目の行を取得 34 IRow row = worksheet.GetRow(i); 35 //回して参照した値を格納 36 List<string> sv = new List<string>(); 37 //セルを4番目から(左から右に)ある数だけ回す。 38 //空白を避けるため。 39 for (int j = 4; j < row.Cells.Count; j++) 40 { 41 ICell cell = row?.GetCell(j); 42 43 //セルの型に応じたプロパティを参照する 44 45 switch (cell.CellType) 46 { 47 //セルの型がstringのとき 48 case CellType.String: 49 //List<string>のsvに値を格納 50 sv.Add(cell.StringCellValue); 51 //switch文から抜ける 52 break; 53 //セルの型が数値のとき 54 case CellType.Numeric: 55 //数値をstringに変更し格納 56 sv.Add(Convert.ToString(cell.NumericCellValue)); 57 //switch文から抜ける 58 break; 59 //セルの中身が空 60 case CellType.Blank: 61 //空を代入 62 sv.Add(""); 63 //switch文から抜ける 64 break; 65 //case以外のとき(elseの役割) 66 default: 67 //空を代入 68 sv.Add(""); 69 //switch文から抜ける 70 break; 71 } 72 } 73 74 //1行のセルをすべて取り終わったあとにstringの値をstring[]に変換し、格納 75 datalists.Add(sv.ToArray()); 76 } 77 //シート2を閉じる 78 workbook.CloneSheet(1); 79 workbook.Close(); 80 81 82 83 foreach (string list in datalists[0]) 84 { 85 86 listView1.Items.Add(list); 87 } 88 foreach (string lists in datalists[1]) 89 { 90 listView1.Items.Add(lists); 91 } 92 93 } 94 } 95}



回答1件
あなたの回答
tips
プレビュー