前言:本文记录IWorkBook 接口常用的属性及常用的方法
IWorkBook 是什么?
IWorkBook我们可以理解为就是一个Excel文件,NPOI操作excel,第一步都是先获取或声明一个对应wookbook的对象。其中:
xls文件对应的类是:HSSFWorkBook
xlsx文件对应的类是:XSSFWorkBook
但是这两个类都继承接口:IWorkBook。在实际使用中,为了更好的操作,我们都是通过操作IWorkBook以接口的形式操作Excel。(这样就不用去区分是操作xls文件还是操作xlsx的文件,这种模式正式面向对象多态的特点)
常用的属性及方法
public class WorkBookDemo
{
/// <summary>
/// npoi读取指定路径下的excel
/// </summary>
/// <param name="filePath"></param>
/// <returns></returns>
public IWorkbook GetWorkBook(string filePath)
{
Stream stream = File.OpenRead(filePath);
XSSFWorkbook workbook = null;
workbook = new XSSFWorkbook(stream);//xlsx后缀名的excel文件的文件流,如果是xls文件的文件流,执行会报错
Console.WriteLine(string.Format("读取了{0}文件,excel文件共有{1}个sheet页面", filePath, workbook.NumberOfSheets));
return workbook;
}
/// <summary>
/// workbook的属性
/// </summary>
public void ProPertyDemo()
{
Console.WriteLine("workbook的属性使用");
string filePath = "D:\\NPOITest.xlsx";
IWorkbook workbook = GetWorkBook(filePath);
//ActiveSheetIndex:工作簿显示的sheet页最大数量(从0开始)
int activeSheetIndex= workbook.ActiveSheetIndex;
Console.WriteLine("ActiveSheetIndex="+ activeSheetIndex);
//FirstVisibleTab:?
int firstVisibleTab = workbook.FirstVisibleTab;
Console.WriteLine("FirstVisibleTab=" + firstVisibleTab);
//bool isHidden = workbook.IsHidden;//不能使用获取会报错
//NumberOfSheets:workbook共有几个sheet(包含已经隐藏的sheet)
int numberOfSheets = workbook.NumberOfSheets;
Console.WriteLine("NumberOfSheets=" + numberOfSheets);
}
/// <summary>
/// 一些方法使用的demo
/// </summary>
public void MethodDemo()
{
Console.WriteLine("workbook的方法的使用");
string filePath = "D:\\NPOITest.xlsx";
IWorkbook workbook = GetWorkBook(filePath);
//创建一个sheet----sheet页名称默认为sheet*
ISheet sheet1= workbook.CreateSheet();
//创建一个sheet----指定创建的sheet页的名称
ISheet sheet2 = workbook.CreateSheet("testdemo1");
//根据下标克隆一个sheet----sheet页名称默认为***(*)
ISheet sheet3= workbook.CloneSheet(1);
//根据下标克隆一个sheet----指定sheet页名称为****
//ISheet sheet4 = workbook.CloneSheet(0,"copySheet0"); //iworkbook 接口没有这个方法,继承类xssfworkbook 有这个方法
//根据sheet页名称获取sheet页
ISheet sheet4 = workbook.GetSheet("testdemo1");
//根据sheet页下标获取sheet页
ISheet sheet5 = workbook.GetSheetAt(1);
//根据sheet页名称获取sheet页对应的下标
int sheetIndex1 = workbook.GetSheetIndex("testdemo1");
//根据sheet页对象获取sheet页对象的下标
int sheetIndex2 = workbook.GetSheetIndex(sheet5);
//根据sheet页下标获取sheet页名称
string sheetName = workbook.GetSheetName(0);
//根据sheet页下标判断sheet页是否隐藏
bool isHidden1 = workbook.IsSheetHidden(0);
//根据下标移除sheet
workbook.RemoveSheetAt(0);
//设置sheet隐藏/显示----0:显示,1:隐藏,2:VeryHidden
int deomindex = workbook.GetSheetIndex("testdemo1");
workbook.SetSheetHidden(deomindex, 1);
//设置sheet隐藏/显示
workbook.SetSheetHidden(0,SheetState.Hidden);
//设置sheet页的名称
int sheetindex3 = workbook.GetSheetIndex("sheet3");
workbook.SetSheetName(sheetindex3,"uptSheet3");//修改sheet3--》uptSheet3
//设置sheet页的顺序
workbook.SetSheetOrder("sheet0", 0);
//将workbook的内容写给一个数据流---多数用于生成一个excel文件
//string saveFilePath = string.IsNullOrEmpty(filePath) ? "D:\\text.xlsx" : filePath;
//using (FileStream fs = File.OpenWrite(saveFilePath))
//{
// workbook.Write(fs);//向打开的这个xls文件中写入并保存。
//}
//关闭workbook的读取----无法使用.Write()方法
//workbook.Close();//尽量不要使用
//创建一个单元格样式操作对象
ICellStyle cellStyle= workbook.CreateCellStyle();
//创建一个字体操作对象
IFont font = workbook.CreateFont();
//创建一个数据格式操作对象
IDataFormat format = workbook.CreateDataFormat();
//不清楚是干什么的
//IList<IName> listName = workbook.GetAllNames();
//输出修改的新的excel----只有这样才能有效果
CreateExcel(workbook,null);
}
private void CreateExcel(IWorkbook workBook,string filePath)
{
filePath = string.IsNullOrEmpty(filePath) ? "D:\\text.xlsx" : filePath;
using (FileStream fs = File.OpenWrite(filePath))
{
workBook.Write(fs);//向打开的这个xls文件中写入并保存。
}
}
}