//基本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. jxl读写excel的方法

    jxl 只有excel基本的操作,代码操作比较方便,一般使用jxl就够了,对图片支持较好 poi功能比jxl强大但是比较吃内存,支持计算公式 具体参考链接    http://www.cnblogs. ...

  2. 19. Crontab

    一.Crontab 的使用 1.crontab 命令参数: -e   编辑该用户的计时器设置 -l 列出该用户的计时器设置 -r 删除该用户的计时器设置-u<用户名称> 指定要设定计时器的 ...

  3. System.AccessViolationException: 尝试读取或写入受保护的内存 解决办法

    netsh winsock reset   --运行此命令解决 错误描述: 之前装的vs2010后 再又安装了vs2013 ,运行之前的vs2010项目 就出现以上错误 错误应用程序名称: w3wp. ...

  4. Android的Fragment中onActivityResult不被调用的解决方案

    常见的,我们会在FragmentActivity中嵌套一层Fragment使用,甚至两次或多层Fragment嵌套使用.这个时候,在第二级或者更深级别的Fragment调用startActivityF ...

  5. PHP学习笔记二十九【接口】

    <?php //定义接口 //接口可以定义属性,但必须是常量而且是public //接口的所有方法必须是public interface Iusb{ public function start( ...

  6. Apache 2.4.7在CentOS6.4中安装配置反向代理解决单外网IP对应多个内网主机的方法实践

    欢迎转载,转载时请保留全文及出处. Apache 2.4.7在CentOS6.4中安装配置反向代理解决单外网IP对应多个内网主机的方法实践 Apache安装 下载源程序(http://httpd.ap ...

  7. 0112.1——iOS开发之理解iOS中的MVC设计模式

    模型-视图-控制器(Model-View-Controller,MVC)是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已广泛应用于用户交互应用程 ...

  8. 截取NSString字符串

    NSString类中提供了这样三个方法用于获取子字符串: – substringFromIndex: – substringWithRange: – substringToIndex: 具体的使用见下 ...

  9. java静态成员的初始化过程

    public class Price{ final static Price INSTANCE = new Price(2.8); static double initPrice = 20; doub ...

  10. codeforces 336C Vasily the Bear and Sequence(贪心)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Vasily the Bear and Sequence Vasily the b ...