Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于读取XLS的NPOI_C#_Excel_Npoi - Fatal编程技术网

C# 用于读取XLS的NPOI

C# 用于读取XLS的NPOI,c#,excel,npoi,C#,Excel,Npoi,我正在做一个项目,我使用NPOI库从excel中读取一些数据。一切都很好,但后来我试着阅读.xls,它停止了工作。(对于.xlsx来说,一切都很好) 我最后尝试的是: IWorkbook hssfwb; using (FileStream file = new FileStream(@filePath, FileMode.Open, FileAccess.Read)) { hssfwb =

我正在做一个项目,我使用NPOI库从excel中读取一些数据。一切都很好,但后来我试着阅读.xls,它停止了工作。(对于.xlsx来说,一切都很好)

我最后尝试的是:

 IWorkbook hssfwb;
                using (FileStream file = new FileStream(@filePath, FileMode.Open, FileAccess.Read))
                {
                     hssfwb = WorkbookFactory.Create(file);
                }
我得到的例外是:

您的流既不是OLE2流,也不是OOXML流


我需要的是一种使用NPOI库打开.xls文件的方法。提前感谢。

要使用旧的Excel 97-2003格式(文件以“.xls”结尾),您可以使用
HSSF工作簿

如果检查文件名的扩展名,则在将文件读入
IWorkbook
模型时,可以处理这两种文件类型:

        MemoryStream fileStream = new MemoryStream(fileContent);
        IWorkbook workbook = null;

        if (fileName.ToLower().EndsWith(".xlsx"))
        {
            // new OOXML format
            workbook = new XSSFWorkbook(fileStream);
        }
        else
        {
            // old Excel 97 format
            workbook = new HSSFWorkbook(fileStream);
        }
从此以后,您可以像往常一样处理电子表格的内容:

        // get first sheet
        ISheet sheet = workbook.GetSheetAt(0);

        // get header names as string array
        IRow headerRow = sheet.GetRow(rowNumber);
        List<ICell> headerCells = headerRow.Cells;
        List<string> rowData = new List<string>();
        foreach (ICell cell in headerCells)
        {
            rowData.Add(cell.ToString());
        }
//获取第一张图纸
ISheet sheet=工作簿.GetSheetAt(0);
//获取作为字符串数组的头名称
IRow headerRow=sheet.GetRow(行编号);
列出headerCells=headerRow.单元格;
List rowData=新列表();
foreach(头部细胞中的ICell细胞)
{
添加(cell.ToString());
}

要使用旧的Excel 97-2003格式(以“.xls”结尾的文件),您可以使用
HSSFWorkbook

如果检查文件名的扩展名,则在将文件读入
IWorkbook
模型时,可以处理这两种文件类型:

        MemoryStream fileStream = new MemoryStream(fileContent);
        IWorkbook workbook = null;

        if (fileName.ToLower().EndsWith(".xlsx"))
        {
            // new OOXML format
            workbook = new XSSFWorkbook(fileStream);
        }
        else
        {
            // old Excel 97 format
            workbook = new HSSFWorkbook(fileStream);
        }
从此以后,您可以像往常一样处理电子表格的内容:

        // get first sheet
        ISheet sheet = workbook.GetSheetAt(0);

        // get header names as string array
        IRow headerRow = sheet.GetRow(rowNumber);
        List<ICell> headerCells = headerRow.Cells;
        List<string> rowData = new List<string>();
        foreach (ICell cell in headerCells)
        {
            rowData.Add(cell.ToString());
        }
//获取第一张图纸
ISheet sheet=工作簿.GetSheetAt(0);
//获取作为字符串数组的头名称
IRow headerRow=sheet.GetRow(行编号);
列出headerCells=headerRow.单元格;
List rowData=新列表();
foreach(头部细胞中的ICell细胞)
{
添加(cell.ToString());
}

听起来该文件无效。如果您在Excel中打开它并再次保存,它是否有效?@stuartd Excel文件是由某个业务程序生成的,我甚至无法保存它,但我可以读取它并复制粘贴它的内容。当我试图保存它时,我收到一条消息,表单excel您不能以这种格式保存文件。这就是您的问题:如果excel不能处理该文件,那么NPOI将无法处理。你能计算出底层的类型是什么,可能是HTML或CSV吗?@stuartd有什么建议吗?我需要使用此文件,因为这是我从其他软件获取数据库内容的唯一方法。导出到excel是他们创建的。此文件是该操作的产物在记事本中打开它,看看它是什么样子?听起来该文件无效。如果您在Excel中打开它并再次保存,它是否有效?@stuartd Excel文件是由某个业务程序生成的,我甚至无法保存它,但我可以读取它并复制粘贴它的内容。当我试图保存它时,我收到一条消息,表单excel您不能以这种格式保存文件。这就是您的问题:如果excel不能处理该文件,那么NPOI将无法处理。你能计算出底层的类型是什么,可能是HTML或CSV吗?@stuartd有什么建议吗?我需要使用此文件,因为这是我从其他软件获取数据库内容的唯一方法。导出到excel是他们创建的。此文件是该操作的产物在记事本中打开它,看看它是什么样子?