Prefacio: este artículo registra los atributos y métodos de uso común de la interfaz de IWorkBook.
¿Qué es IWorkBook?
Podemos entender IWorkBook como un archivo de Excel, cuando NPOI opera excel, el primer paso es obtener o declarar un objeto correspondiente a wookbook. Donde: la clase correspondiente del archivo
XLS es: XSSFWorkBook
La clase correspondiente del archivo XLSX es HSSFWorkBook
pero ambas clases heredan la interfaz: IWorkBook. En el uso real, para un mejor funcionamiento, todos operamos Excel en forma de interfaz operando IWorkBook. (De esta manera, no es necesario distinguir entre archivos xls operativos y archivos xlsx, este modo es oficialmente una característica del polimorfismo orientado a objetos )
Atributos y métodos de uso común
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文件中写入并保存。
}
}
}