3

NPOI が Excel ファイルを作成するのに非常に優れていることは知っています。そして今、特定の列でExcelを読みたいです。これは私のExcel形式です:

           D       E       F       G       H
3          Col1    Col2    Col3    Col4    Col5
4                  a               1       1/1/2014
5                  b               2       2/1/2014
6                  c               3       3/1/2014
7                  d               4       4/1/2014
8                  e               5       5/1/2014

Col2、Col4、Col5 のデータを取得したいだけです。次のようになります。

Col2   Col4   Col5
a      1      1/1/2014
b      2      2/1/2014
c      3      3/1/2014
d      4      4/1/2014
e      5      5/1/2014

どうすればいいですか?範囲アドレスを使用して特定の列を取得してからセル値を取得できますか?

専門家に感謝します。

4

2 に答える 2

12

固定のワークシート テンプレートがある場合、目的を達成するための最も簡単な方法は、行をループして、指定したインデックスのセル値を取得することです。

たとえば、OPの例に基づいて:

var sheet = workbook.GetSheetAt(0); // assuming 0 is the worksheet index
for (var i = 0; i <= sheet.LastRowNum; i++)
{
  var row = sheet.GetRow(i);
  if (row == null) continue;

  // do your work here
  Console.Write("{0}\t", row.GetCell(4));
  Console.Write("{0}\t", row.GetCell(6));
  Console.Write("{0}\t", row.GetCell(7));
  Console.WriteLine();
}

ただし、範囲アドレスの使用を主張する場合は、次のCellRangeAddressようにクラスを使用してみてください。

var sheet = workbook.GetSheetAt(0);
var range = "E3:H8";
var cellRange = CellRangeAddress.ValueOf(range);      

for (var i = cellRange.FirstRow; i <= cellRange.LastRow; i++)
{
  var row = sheet.GetRow(i);
  for (var j = cellRange.FirstColumn; j <= cellRange.LastColumn; j++)
  {
    // skip cell with column index 5 (column F)
    if (j == 5) continue;

    // do your work here
    Console.Write("{0}\t", row.GetCell(j));                             
  }

  Console.WriteLine();
}
于 2014-01-20T13:50:43.713 に答える