NPOI 可使用 NPOI.XSSF.Extractor.XSSFExcelExtractor 类来提取 Excel 2007 格式(.xlsx)的工作簿内容。但对于 Excel 97-2003 格式(.xls 文件扩展名),需要改用不同的 API。要读取这类工作簿,你需要使用 NPOI.HSSF.Extractor.ExcelExtractor 类。这个类继承自基类 NPOI.POIOLE2TextExtractor 并实现了 NPOI.SS.Extractor.IExcelExtractor 接口,其公开的 Text 属性可以获取包含所有工作表内容的文档文本。
ExcelExtractor 接收一个 NPOI.POIFS.FileSystem.POIFSFileSystem 类型的输入参数,而该参数又需要一个 System.IO.FileStream 类型的输入。要读取 Excel 工作簿内容,首先需要创建 FileStream 实例(传入文件路径作为参数),然后创建 POIFSFileSystem 实例并将其传递给 ExcelExtractor,最后调用 Text 属性获取文档内容。
以下是 aardio 实现代码(注意处理访问/读取内容时可能出现的异常):
import NPOI;
var fileStream = System.IO.FileStream("/员工数据.xls", "r");
// 创建 POI 文件系统对象
var fileSystem = NPOI.POIFS.FileSystem.POIFSFileSystem(fileStream);
// 创建 Excel 提取器
var excelExtractor = NPOI.HSSF.Extractor.ExcelExtractor(fileSystem);
// 设置提取选项(均为可选参数)
excelExtractor.IncludeBlankCells = false; // 是否包含空白单元格
excelExtractor.IncludeCellComments = false; // 是否包含单元格批注
excelExtractor.IncludeHeaderFooter = false; // 是否包含页眉页脚
excelExtractor.IncludeSheetNames = false; // 是否包含工作表名称
print(excelExtractor.Text);
资源管理:aardio 中不需要像 C# 那样显式使用 using 语句块,但需要手动在 finally 块中释放资源。
异常处理:使用 try-catch 捕获异常,aardio 的异常对象 e 会自动转换为字符串显示错误信息。
可选参数:所有 Include* 属性都是可选的,默认值为 false,可以根据需要调整。
文件流:FileStream 在 aardio 中创建后需要手动关闭和释放,这与 C# 的 IDisposable 模式一致。
返回值:函数返回提取的文本内容,如果出错则返回空字符串。
这个函数可以方便地提取旧版 Excel 文件中的所有文本内容,适用于数据迁移、内容分析等场景。