8

NPOI DLL は.xlsxファイルを認識しますか?

現在、Microsoft Excel 97-2003 用の NPOI 1.2.5 バージョンの DLL を使用していますが、拡張の Excel シートに.xlsxもアクセスする必要があります。

NPOIは上記をサポートしますか?

コードスニペット:

static void Main(string[] args) {
    XSSFWorkbook xssfwb;

    using(FileStream file=new FileStream(
            @"C:\Users\347702\Desktop\Hello.xlsx",
            FileMode.Open, FileAccess.Read)) {
        xssfwb=new XSSFWorkbook(file);
    }

    ISheet sheet=xssfwb.GetSheet("sheet1");
    sheet.GetRow(1048576);
    Console.WriteLine(sheet.GetRow(1048576).GetCell(0).StringCellValue);
}
4

4 に答える 4

19

NPOI を使用して .xls および .xlsx 拡張子の Excel ファイルを読み取ることができます。次を using セクションに追加するだけで済みます。

using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using NPOI.POIFS.FileSystem;
using NPOI.XSSF.UserModel;
using NPOI.SS.UserModel;

主なことは、ファイルを開くときに拡張子を区別する必要があるため、適切なコンポーネントを使用し、ISheet インターフェイスを使用して、ファイル拡張子とは無関係にシートを参照できるようにすることです。

//We get the file extension
fileExt = Path.GetExtension(fileName);

//Declare the sheet interface
ISheet sheet;

//Get the Excel file according to the extension
if (fileExt.ToLower() == ".xls")
{
    //Use the NPOI Excel xls object
    HSSFWorkbook hssfwb;
    using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read))
    {
        hssfwb = new HSSFWorkbook(file);
    }

    //Assign the sheet
    sheet = hssfwb.GetSheet(sheetName);
}
else //.xlsx extension
{
    //Use the NPOI Excel xlsx object
    XSSFWorkbook hssfwb;
    using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read))
    {
        hssfwb = new XSSFWorkbook(file);
    }

    //Assign the sheet
    sheet = hssfwb.GetSheet(sheetName);
}

Excel オブジェクトを取得したら、それを読み取るだけで済みます (NPOI では、行と列はゼロベースです)。

//Loop through the rows until we find an empty one
for (int row = 0; row <= sheet.LastRowNum; row++)
{
    //Get the cell value
    string cellValue = sheet.GetRow(row).GetCell(0).ToString().Trim(); //In the method GetCell you specify the column number you want to read, in the method GetRow you spacify the row
    string cellValue2 = sheet.GetRow(row).GetCell(0).StringCellValue.Trim();
}

セルの値を読み取るには、.ToString() メソッドまたは StringCellValue プロパティを使用できますが、StringCellValue は文字列セルでのみ機能し、数値セルと日付セルでは例外がスローされることに注意してください。

于 2014-02-11T17:05:07.913 に答える
2

元の回答が提供されたときにライブラリにこの機能がなかった可能性がありますが、ファイル拡張子をチェックせずに同じコードベースを使用して xls と xlsx の両方を処理できるようになりました。

秘訣は、WorkbookFactory クラスを使用して、両方のタイプのファイルを透過的にロードすることです。いずれかのバージョンに固有の特別な機能を使用していない限り、これは機能します。

using (FileStream fileStream = File.OpenRead(fullPathToExcelFile)) //fullPathToExcelFile can hold either a xls or xlsx, we don't care
{
   IWorkbook workbook = WorkbookFactory.Create(fileStream);
   ISheet worksheet = workbook.GetSheet("SampleSheet");

   //Now read from the worksheet anyway you like
   var value = worksheet.GetRow(1).GetCell(1);
}
于 2014-11-03T07:18:54.797 に答える