//基本NPOI 1.2.5.0
static void Main(string[] args)
{
string path = string.Format("E:\\export{0}.xls", DateTime.Now.ToString("yyyyMMddhhmmss")); WriteAExcel(path);
ReadAExcel(path);
Console.ReadKey();
}
        /// <summary>
/// 创建测试
/// </summary>
/// <param name="path">路径</param>
static void WriteAExcel(string path)
{
//创建工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个名称为"排班表"的表
ISheet sheet = workbook.CreateSheet("排班表"); int rowCount = ;
int colCount = ; //创建一行, 此行为标题行
IRow title = sheet.CreateRow(rowCount);
title.CreateCell().SetCellValue(string.Format("{0}({1})", "消化内科", "珠海市人民医院")); //合并单元格
CellRangeAddress cellRangeAddress = new CellRangeAddress(rowCount, rowCount, , colCount - );
sheet.AddMergedRegion(cellRangeAddress);
rowCount++; //创建一行, 空行
sheet.CreateRow(rowCount);
rowCount++; //创建一行,此行为第二行
IRow headerRow = sheet.CreateRow(rowCount);
rowCount++; //固定区域, 用于header
sheet.CreateFreezePane(, ); string[] headerArray = new[] { "医生", "日期", "时间", "预约数", "挂号费", "状态" }; //表头行
for (int i = ; i < headerArray.Length; i++)
{
headerRow.CreateCell(i).SetCellValue(headerArray[i]);
} List<MyDataItem> dataList = new List<MyDataItem>();
#region 测试数据
dataList.Add(new MyDataItem() { ID = , DoctorName = "张某", Date = DateTime.Now, Time = "上午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "李某", Date = DateTime.Now, Time = "下午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "赵某", Date = DateTime.Now, Time = "中午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "杨某", Date = DateTime.Now, Time = "上午", Place = , Fee = , Status = "停诊" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "黎某", Date = DateTime.Now, Time = "中午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "张某", Date = DateTime.Now, Time = "上午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "李某", Date = DateTime.Now, Time = "下午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "赵某", Date = DateTime.Now, Time = "中午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "杨某", Date = DateTime.Now, Time = "上午", Place = , Fee = , Status = "停诊" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "黎某", Date = DateTime.Now, Time = "中午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "张某", Date = DateTime.Now, Time = "上午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "李某", Date = DateTime.Now, Time = "下午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "赵某", Date = DateTime.Now, Time = "中午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "杨某", Date = DateTime.Now, Time = "上午", Place = , Fee = , Status = "停诊" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "黎某", Date = DateTime.Now, Time = "中午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "张某", Date = DateTime.Now, Time = "上午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "李某", Date = DateTime.Now, Time = "下午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "赵某", Date = DateTime.Now, Time = "中午", Place = , Fee = , Status = "排班" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "杨某", Date = DateTime.Now, Time = "上午", Place = , Fee = , Status = "停诊" });
dataList.Add(new MyDataItem() { ID = , DoctorName = "黎某", Date = DateTime.Now, Time = "中午", Place = , Fee = , Status = "排班" });
#endregion //添加下拉选项(序列)
AddDropdownList1(sheet, rowCount); //添加下拉选项(指定数据)
AddDropdownList2(workbook, sheet, rowCount); //插入数据
for (int i = ; i < dataList.Count; i++)
{
MyDataItem item = dataList[i];
IRow dataRow = sheet.CreateRow(rowCount); dataRow.CreateCell().SetCellValue(string.Format("{0}({1})", item.DoctorName, item.ID));
dataRow.CreateCell().SetCellValue(item.Date.ToString("yyyy/MM/dd"));
dataRow.CreateCell().SetCellValue(item.Time);
dataRow.CreateCell().SetCellValue(item.Place);
dataRow.CreateCell().SetCellValue(item.Fee.ToString("N2"));
dataRow.CreateCell();//.SetCellValue(item.Status);
rowCount++;
} //写入文件
using (MemoryStream ms = new MemoryStream())
{
workbook.Write(ms); using (FileStream fs = new FileStream(path, FileMode.Create))
{
byte[] data = ms.ToArray();
fs.Write(data, , data.Count());
}
}
}
        //读测试
static void ReadAExcel(string path)
{
using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
{
IWorkbook workbook = new HSSFWorkbook(file);
ISheet sheet = workbook.GetSheet("排班表");
IRow headerRow = sheet.GetRow(); //一行最后一个方格的编号 即总的列数
int cellCount = headerRow.LastCellNum; //有多少列
int rowCount = sheet.LastRowNum; //读
for (int i = ; i < rowCount; i++)
{
IRow row = sheet.GetRow(i);
for (int j = row.FirstCellNum; j < cellCount; j++)
{
Console.Write(" " + row.GetCell(j).ToString());
}
Console.WriteLine();
}
}
}
        /// <summary>
/// 添加下拉框(序列)
/// </summary>
/// <param name="sheet"></param>
/// <param name="start"></param>
static void AddDropdownList1(ISheet sheet, int start)
{
CellRangeAddressList regions = new CellRangeAddressList(start, , , );
DVConstraint constraint = DVConstraint.CreateExplicitListConstraint(new string[] { "就诊", "停诊" });
HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
sheet.AddValidationData(dataValidate);
} /// <summary>
/// 添加下拉框(单元格)
/// </summary>
/// <param name="workbook"></param>
/// <param name="sheet"></param>
/// <param name="start"></param>
static void AddDropdownList2(HSSFWorkbook workbook, ISheet sheet, int start)
{
ISheet sheet2 = workbook.CreateSheet("a");
sheet2.CreateRow().CreateCell().SetCellValue("上午");
sheet2.CreateRow().CreateCell().SetCellValue("中午");
sheet2.CreateRow().CreateCell().SetCellValue("下午");
sheet2.CreateRow().CreateCell().SetCellValue("晚上"); IName range = workbook.CreateName();
range.RefersToFormula = "a!$A$1:$A$4";
range.NameName = "timeDic"; CellRangeAddressList regions = new CellRangeAddressList(start, , , );
DVConstraint constraint = DVConstraint.CreateFormulaListConstraint("timeDic");
HSSFDataValidation dataValidate = new HSSFDataValidation(regions, constraint);
//添加约束警告
dataValidate.CreateErrorBox("输入不合法", "请输入下拉列表中的值。");
sheet.AddValidationData(dataValidate);
}
        /// <summary>
/// 测试数据类型
/// </summary>
class MyDataItem
{
public int ID { get; set; } public string DoctorName { get; set; } public DateTime Date { get; set; } public string Time { get; set; } public int Place { get; set; } public decimal Fee { get; set; } public string Status { get; set; }
}

备忘:

//2014/10/08

//加粗,15字
IFont Bold15Font = workbook.CreateFont();
Bold15Font.Boldweight = (short)FontBoldWeight.BOLD;
Bold15Font.FontHeightInPoints = ; //黄色底,横向居中,纵向居中,加粗,11字, 边框(单个)
ICellStyle YellowCenterBold11Cell = workbook.CreateCellStyle();
YellowCenterBold11Cell.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.YELLOW.index;
YellowCenterBold11Cell.FillPattern = FillPatternType.SOLID_FOREGROUND;
YellowCenterBold11Cell.Alignment = HorizontalAlignment.CENTER;
YellowCenterBold11Cell.VerticalAlignment = VerticalAlignment.CENTER;
YellowCenterBold11Cell.SetFont(Bold11Font);
YellowCenterBold11Cell.BorderBottom = BorderStyle.THIN;
YellowCenterBold11Cell.BorderLeft = BorderStyle.THIN;
YellowCenterBold11Cell.BorderRight = BorderStyle.THIN;
YellowCenterBold11Cell.BorderTop = BorderStyle.THIN; //给合并单元格加边框
CellRangeAddress cellRangeAddress0 = new CellRangeAddress(, , , );
sheet.AddMergedRegion(cellRangeAddress0);
((HSSFSheet)sheet).SetEnclosedBorderOfRegion(cellRangeAddress0, BorderStyle.THIN, NPOI.HSSF.Util.HSSFColor.BLACK.index); //单元格宽
sheet.SetColumnWidth(, * ); //行高
row0.HeightInPoints = Height25;
//2014/10/09
ISheet sheet1 = hssfworkbook.CreateSheet("Sheet1");
IRow row1 = sheet1.CreateRow();
ICell cel1 = row1.CreateCell();
ICell cel2 = row1.CreateCell();
ICellStyle unlocked = hssfworkbook.CreateCellStyle();
unlocked.IsLocked = false;
ICellStyle locked = hssfworkbook.CreateCellStyle();
locked.IsLocked = true;//确定当前单元格被设置保护
cel1.SetCellValue("没被锁定");
cel1.CellStyle = unlocked;
cel2.SetCellValue("被锁定");
cel2.CellStyle = locked;
sheet1.ProtectSheet("password");//设置密码保护
sheet1.AutoSizeColumn(i);//自动宽度(不支持中文)

自动宽度( 支持中文)

     /// <summary>
/// 自动宽度支持中文
/// </summary>
public static void AutoSizeColumnExtension(this ISheet sheet, int maxColumn)
{ for (int i = ; i < maxColumn; i++)
{
sheet.AutoSizeColumn(i);
} //获取当前列的宽度,然后对比本列的长度,取最大值
for (int columnNum = ; columnNum < maxColumn; columnNum++)
{
int columnWidth = sheet.GetColumnWidth(columnNum) / ;
for (int rowNum = ; rowNum <= sheet.LastRowNum; rowNum++)
{
IRow currentRow;
//当前行未被使用过
if (sheet.GetRow(rowNum) == null)
{
currentRow = sheet.CreateRow(rowNum);
}
else
{
currentRow = sheet.GetRow(rowNum);
} if (currentRow.GetCell(columnNum) != null)
{
ICell currentCell = currentRow.GetCell(columnNum);
int length = Encoding.Default.GetBytes(currentCell.ToString()).Length;
if (columnWidth < length)
{
columnWidth = length;
}
}
}
sheet.SetColumnWidth(columnNum, (columnWidth > ? : columnWidth) * );
}
}

更多可以查看官方手册:http://tonyqus.sinaapp.com/

NPOI新建和读取EXCEL的更多相关文章

  1. 使用NPOI导出,读取EXCEL(可追加功能)

    使用NPOI导出,读取EXCEL,具有可追加功能 看代码 using System; using System.Collections.Generic; using System.Text; usin ...

  2. 使用net core 6 c# 的 NPOI 包,读取excel..xlsx单元格内的图片,并存储到指定服务器

    这个是记录,单元格的图片. 直接上代码,直接新建一个 net core api 解决方案,引用一下nuget包.本地创建一个 .xlsx 格式的excel文件 using ICSharpCode.Sh ...

  3. 使用NPOI读取Excel到DataTable

    一.NPOI介绍: 使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office ...

  4. 【转】ExcelHelper类,用npoi读取Excel文档

    //------------------------------------------------------------------------------------- // All Right ...

  5. NPOI通过DataTable导出和读取Excel

    Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题: 导出问题: 如果是asp.net,你得 ...

  6. NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式

    下载地址 http://npoi.codeplex.com/releases 下面放一个 NPOIHelper 助手类吧,也不是我写的- NpoiExcelHelper 可以生成xlsx格式publi ...

  7. 使用NPOI读取Excel出错

    使用NPOI读取Excel出错,错误信息:java.io.IOException: Invalid header signature; read 4503608217567241, expected ...

  8. 使用NPOI读取Excel报错ICSharpCode.SharpZipLib.Zip.ZipException:Wrong Local header signature

    写了一个小程序利用NPOI来读取Excel,弹出这样的报错: ICSharpCode.SharpZipLib.Zip.ZipException:Wrong Local header signature ...

  9. NPOI读取Excel帮助类,支持xls与xlsx,实现公式解析,空行的处理

    NPOI读取Excel(2003或者2010)返回DataTable.支持公式解析,空行处理. /// <summary>读取excel /// 默认第一行为表头 /// </sum ...

随机推荐

  1. Qt之操作Excel

    Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件. ...

  2. JS获取地址参数

    今天碰到获取地址参数的问题,所以总结了一下. 第一种情况:获取地址栏参数 function getUrlParam(name){ var reg = new RegExp("(^|& ...

  3. Mysql 复制表结构 及其表的内容

    顺便转一下Mysql复制表结构.表数据的方法: 1.复制表结构及数据到新表CREATE TABLE 新表 SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们 ...

  4. box-shadow讲解1

    谈谈box-shadow的具体使用方法 语法: E {box-shadow: <length> <length> <length>?<length>?| ...

  5. .responsiveSlides参数

    $(".rslides").responsiveSlides({ auto: true, // Boolean: Animate automatically, true or fa ...

  6. C++Primer笔记(1)

    1.初始化 在C++中,初始化与赋值操作是完全不同的两个操作.初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来代替. 初始化的方式有: ; } ...

  7. 安装ubuntu14.10系统的那些瞎折腾

    前段时间自作孽,安装了ubuntu14.04的64位系统,而我的笔记本又是那种老古董,2G的内存所以装好之后各种不稳定,索性这个周末就重装一下吧,本来打算是直接装我以前的那个ubuntu12.04-i ...

  8. setInterval && setTimeout || 定时器

    来自w3school的解释 定时器setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval() 方法会不停地调用函数,直到 clearInterva ...

  9. activiti笔记一:流程图xml文件

    一. 流程图有两个基本要素组成:点和线 点:开始节点.结束节点.各种网关.各种事件 线:连接两点之间的sequenceFlow 二. 一般包含三个步骤:部署.启动.完成 三. 启动的时候,可以设置流程 ...

  10. 第二章IPC——IPC与开启多进程

    问题 一.IPC ①.什么是IPC  ②.为什么要有IPC 二.多进程 ①.如何开启多进程  ②.系统如何创建多进程 三.多进程引发的问题 问:私有进程(利用":+进程名")能否共 ...