C# 用于读取XLS的NPOI
我正在做一个项目,我使用NPOI库从excel中读取一些数据。一切都很好,但后来我试着阅读.xls,它停止了工作。(对于.xlsx来说,一切都很好) 我最后尝试的是: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 =
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是他们创建的。此文件是该操作的产物在记事本中打开它,看看它是什么样子?