1、创建一个空白的xls和xlsx文件
1、创建一个空白的xls文件
Step1:先引入库NPOI.dll文件
Step2:
①:实例化一个workbook,实为在内存表中创建一个xls文件
NPOI.HSSF.UserModel.HSSFWorkbook workbook = new NPOI.HSSF.UserModel.HSSFWorkbook();
但是,如果打开此时的workbook会报错,原因是至少需要包含一个Sheet
②:创建一个Sheet,如果方法不带参数,系统自动给出SheetName,带一个参数表示自定义SheetName
NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet("Sheet1");
③:最后就是把这个HSSFWorkbook实例写入文件了,代码也很简单,如下所示:
FileStream fs = new FileStream("1.xls", FileMode.Create);
workbook.Write(fs);
fs.Close();
*************************************************************************************
2:创建一个空白的xlsx文件
step1:先导入所需要的dll文件
NPOI.dll
NPOI.OOXML.dll
NPOI.OpenXml4Net.dll
NPOI.OpenXmlFormats.dll
ICSharpCode.SharpZipLib.dll
step2:具体代码实现
NPOI.XSSF.UserModel.XSSFWorkbook workbook = new NPOI.XSSF.UserModel.XSSFWorkbook();
workbook.CreateSheet("Sheet1");
FileStream fs = new FileStream("1.xlsx", FileMode.Create);
workbook.Write(fs);
fs.Close();
**********************************************************
3:自动识别xls和xlsx文件
NPOI的版本号之所以从1.2.5直接跳到2.0,很大原因是对Office 2007格式的支持,也正因为如此,使用NPOI 2.0会比以前的版本显得稍微复杂些,因为NPOI同时提供了多个命名空间的库,包括HSSF(Excel 2003), XSSF(Excel 2007), XWPF(Word 2007)。
为了能够在读取时自动识别Excel格式,而不是由你自己去判断,NPOI提供了一个非常方便的类NPOI.SS.WorkbookFactory。
public class WorkbookFactory
{
public static IWorkbook Create(POIFSFileSystem fs){...}
public static IWorkbook Create(OPCPackage pkg){...}
public static IWorkbook Create(Stream inputStream){...}
public static IFormulaEvaluator CreateFormulaEvaluator(IWorkbook workbook){...}
}
这里先介绍下POIFSFileSystem和OPCPackage的区别,POIFSFileSystem即OLE2 格式(俗称ActiveX文档格式)的读写库,OPCPackage即OOXML格式的读写库,两套库分别用于Excel 2003和Excel 2007,当然由于是底层库,他们不局限于读取xls和xlsx格式,例如你可以用POIFSFileSystem读取Thumb.db文件格式,具体可参考这里。
知道了POIFSFileSystem和OPCPackage的区别,你应该知道第一、第二个方法是干嘛的了吧,没错,这两个是需要你自己主动判断打开的文件是啥类型的,然后把读到的文件系统传给WorkbookFactory,它会自动根据文件系统的类型返回HSSFWorkbook或XSSFWorkbook,但因为这两个类都实现了IWorkbook接口,所以大部分情况下你不需要去关心你到底在操作哪个类的实例,除非你用到了Excel 2007特有的一些功能时,才需要强类型转换成XSSFWorkbook。
第三个方法则是今天要介绍的重点,它具有自动识别功能,只要你传Stream对象进去,它就能知道你传进去的到底是xls还是xlsx,然后返回相应的实例。
最后一个则是返回公式计算对象的,原理类似。HSSF和XSSF都有一个公式计算类,分别是HSSFFormulaEvaluator和XSSFFormulaEvaluator。
自动识别导入的xls和xlsx文件,代码如下
FileStream fs = File.OpenRead("1.xlsx");
NPOI.SS.UserModel.IWorkbook workbook= NPOI.SS.UserModel.WorkbookFactory.Create(fs);
MessageBox.Show(workbook.GetSheetAt().GetRow().GetCell().StringCellValue);
fs.Close();
1、创建一个空白的xls和xlsx文件的更多相关文章
- C# 操作 Excel(.xls和.xlsx)文件
C#创建Excel(.xls和.xlsx)文件的三种方法 .NET 使用NPOI导入导出标准Excel C# 使用NPOI 实现Excel的简单导入导出 NET使用NPOI组件将数据导出Excel-通 ...
- 写入数据到Plist文件中时,第一次要创建一个空的数组,否则写入文件失败
#pragma mark - 保存数据到本地Plist文件中 - (void)saveValidateCountWithDate:(NSString *)date count:(NSString *) ...
- QTemporaryDir及QTemporaryFile建立临时目录及文件夹(创建一个随机名称的目录或文件,两者均能保证不会覆盖已有文件)
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址:本文标题:QTemporaryDir及QTemporaryFile建立临时目录及文件夹 本文地址: ...
- python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件)
# python pandas合并多个excel(xls和xlsx)文件(弹窗选择文件夹和保存文件) import tkinter as tk from tkinter import filedial ...
- C#创建Excel(.xls和.xlsx)文件的三种方法
生成EXCEL文件是经常需要用到的功能,我们利用一些开源库可以很容易实现这个功能. 方法一:利用excellibrary,http://code.google.com/p/excellibrary/ ...
- 如何使用Java创建Excel(.xls 和 .xlsx)文件 并写入数据
1,需要依赖的jar包, <!-- POI(operate excel) start --> <!-- the version of the following POI packag ...
- AE创建一个空白的Shapefile
1.IField和IFieldEdit区别: IFieldEdit是继承IField的,因为IField的属性大部分是只读的(read-only),所以IFieldEdit就在IField的基础上多了 ...
- Django命令行相关命令 以及创建一个空白网页的步骤
django相关命令行命令: django.admin.py是Django的一个用于管理任务的命令行工具,manage.py是对django-admin.py的简单包装,每个Django Projec ...
- Excel 2010/2013/2016在鼠标右键新建xls或xlsx文件后,打开报错“无法打开文件”“文件格式或文件扩展名无效”
近段时间,陆续有两个同事先后出现同样的问题(在Excel多个版本都可能出现),问题描述: 当用鼠标右键在任意文件夹或电脑桌面“新建”→“ Microsoft Excel 工作表”,再用鼠标双击打开这个 ...
随机推荐
- C#编程(十)----------C#预处理器
原文链接:http://blog.csdn.net/shanyongxu/article/details/46491757 C#中的预处理器指令 #IF 如果 C# 编译器遇到最后面跟有 #endif ...
- mysql 报错ERROR 1064 (42000),原因使用了mysql保留字 (right syntax to use near 'groups)
msql 8.0 执行语句: SELECT * FROM groups; 会报如题的错误, 需加反引号进行修改: SELECT * FROM `groups`; //////////分割线//// ...
- 【BZOJ】【2730】【HNOI2012】矿场搭建
Tarjan求BCC/割点 然而似乎我一开始抄的白书的板子哪里抄错了?还是本身哪里不对……(可能是不适用于这道题?因为这题要求求出每个BCC的大小..? 膜拜了ydc的写法= = 其实两次dfs也并没 ...
- iOS:多个单元格的删除(方法一)
采用存取indexPath的方式,来对多个选中的单元格进行删除 删除前: 删除后: 分析:如何实现删除多个单元格呢?这需要用到UITableView的代理方法,即选中单元格时对单元格做的处理,同时我们 ...
- iOS:制作一个简易的计算器
初步接触视图,制作了一个简易的计算器,基本上简单的计算是没有问题的,不是很完美,可能还有一些bug,再接再厉. // // ViewController.m // 计算器 // // Created ...
- Informatica 常用组件Filter之二 过滤条件
过滤条件可以使用转换语言输入.过滤条件是返回 TRUE 或 FALSE 的表达式.例如,如果您要过滤出员工薪水低于 $30,000 的行,可输入以下条件: SALARY > 30000 可以使用 ...
- FPGA三段式状态机的思维陷阱
用三段式描述状态机的好处,国内外各位大牛都已经说的很多了,大致可归为以下三点: 1.将组合逻辑和时序逻辑分开,利于综合器分析优化和程序维护; 2.更符合设计的思维习惯; 3.代码少,比一段式状态机更简 ...
- java.net.URI 简介 文档 API
URI 简介 文档地址:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh public final class java.net.URI extend ...
- MediaPlayer 状态机 API 详解 示例
简介 public class android.media.MediaPlayer extends Object implements VolumeAutomation 可能需要的权限: One ma ...
- 深入理解JSON
一.JS判断字符串是否为JSON的方法: function isJSON(str) { if (typeof str == 'string') { try { JSON.parse(str); ret ...