public class NpoiNet
{
public void CreateWorkBook()
{
string filePath = HttpContext.Current.Server.MapPath("~/npoi.xls");
//表示一个文件流
FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite);
HSSFWorkbook workBook = new HSSFWorkbook();//相当于创建了一个内存中的Excel 只是还没有写到硬盘上
try
{
/*按照约定在每个Excel文件中至少要包含一个sheet,如果没有任何sheet,打开Excel文件的时候会报错。
在以前的npoi版本中,如果不是自己手动的创建一个sheet,npoi框架是不会自动创建一个的,但是在最新版的1.2.5中,
我发现即使你忘记了创建sheet的操作,框架会自动创建一个sheet,当然如果你手动创建了一个sheet,则框架就不会
自动的创建一个sheet,这就像构造函数,如果没有写任何一个,.Net会默认存在一个,但是你创建了一个构造函数,则
* 框架就不会自动创建了
* */
workBook.CreateSheet("guozhiqi");//sheet的名称为guozhiqi
workBook.CreateSheet();//sheet的名称为sheet1 从1开始命名
workBook.CreateSheet("yuanjinzhou");
workBook.CreateSheet();//这个sheet的名称应该为什么?答案是sheet3
//创建了sheet 下面我们来创建单元格
HSSFSheet sheetGuozhiqi = (HSSFSheet)workBook.GetSheet("guozhiqi");//获取到sheet名称为guozhiqi的那个工作簿
//创建了工作簿 添加单元格之前首先要添加行
//在这里请注意 行和列的下标都是从0开始的 而不是Excel文件中的1
for (int i = 0; i <= 10; i++)
{
sheetGuozhiqi.CreateRow(i);//创建了11行
}
//创建了行之后 就要在每个行中创建单元格
//如果没有在之前创建行
// HSSFRow newRow = (HSSFRow)sheetGuozhiqi.GetRow(12);这是错误的 程序会报异常 这就告诉我们 如果行还没有创建
//就不可以获取
HSSFRow newRow = (HSSFRow)sheetGuozhiqi.GetRow(0);
HSSFCell[] cells = new HSSFCell[11];
//在第0行的位置创建单元格
for (int i = 0; i <= 10; i++)
{
cells[i] = (HSSFCell)newRow.CreateCell(i);//为第0行创建了10个单元格
}
//这里取得单元格的异常出现位置相同 就是如果没有创建就不要试图获取
HSSFCell newCell = (HSSFCell)newRow.GetCell(0);//取得第0行第0个单元格
//获取到了单元格 赋值 为了方便说明 我多获取几个单元格的值
//Excel单元格有很多类型 例如字符串 数字 bool等类型,
cells[0].SetCellValue(false);//赋值为bool型
cells[1].SetCellValue(DateTime.Now);//赋值为日期型
cells[2].SetCellValue(3.1415926);//赋值为double类型
cells[3].SetCellValue("guozhiqi");//赋值为字符串guozhiqi
//为单元格赋值以后 我们就要开始取值了
bool cell0 = cells[0].BooleanCellValue;
// string cell00 = cells[0].StringCellValue; 错误 这句话的意思就是说存储的时候是什么类型 就必须用对应的
//取值方法取值
DateTime dateTime = cells[1].DateCellValue;
double cell2 = cells[2].NumericCellValue;
string cell3 = cells[3].StringCellValue;
//可以正常创建单元格 从单元格取值是远远不够的 还有就是客户可能会要求合并单元格 为单元格设置样式
//合并单元格的操作不必要创建所有的行或列,只需要制定范围即可
sheetGuozhiqi.AddMergedRegion(new NPOI.SS.Util.Region(1,1,20,20));//合并单元格
HSSFCellStyle cellStyle = (HSSFCellStyle)workBook.CreateCellStyle();
cellStyle.Alignment = HorizontalAlignment.CENTER;//居中显示
cellStyle.FillBackgroundColor = 244;
cellStyle.FillPattern = FillPatternType.BRICKS;//填充模式
cellStyle.IsHidden = false;//单元格是否隐藏
cellStyle.IsLocked = false;//单元格是否锁定
cellStyle.VerticalAlignment = VerticalAlignment.CENTER;//垂直居中
//设置单元格字体
HSSFFont font =(HSSFFont) workBook.CreateFont();
font.Color = 200;
font.FontHeight = 18;//设置字体大小
font.FontName = "黑体";//设置字体为黑体
font.IsItalic = false;//是否是斜体
font.IsStrikeout = true;//是否有中间线
font.Underline = (byte)FontUnderlineType.DOUBLE;//设置下划线
cellStyle.SetFont(font);
//将设置好的样式应用到对应的单元格上 否则是没有效果的
cells[0].CellStyle = cellStyle;
if (!workBook.IsWriteProtected)
{
workBook.Write(fileStream);
}
}
catch (Exception ex)
{
HttpContext.Current.Response.Write(ex.Message+ex.Source+ex.StackTrace);
}
finally
{
if (fileStream != null)
{
fileStream.Close();
}
}
}
}
{
public void CreateWorkBook()
{
string filePath = HttpContext.Current.Server.MapPath("~/npoi.xls");
//表示一个文件流
FileStream fileStream = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite);
HSSFWorkbook workBook = new HSSFWorkbook();//相当于创建了一个内存中的Excel 只是还没有写到硬盘上
try
{
/*按照约定在每个Excel文件中至少要包含一个sheet,如果没有任何sheet,打开Excel文件的时候会报错。
在以前的npoi版本中,如果不是自己手动的创建一个sheet,npoi框架是不会自动创建一个的,但是在最新版的1.2.5中,
我发现即使你忘记了创建sheet的操作,框架会自动创建一个sheet,当然如果你手动创建了一个sheet,则框架就不会
自动的创建一个sheet,这就像构造函数,如果没有写任何一个,.Net会默认存在一个,但是你创建了一个构造函数,则
* 框架就不会自动创建了
* */
workBook.CreateSheet("guozhiqi");//sheet的名称为guozhiqi
workBook.CreateSheet();//sheet的名称为sheet1 从1开始命名
workBook.CreateSheet("yuanjinzhou");
workBook.CreateSheet();//这个sheet的名称应该为什么?答案是sheet3
//创建了sheet 下面我们来创建单元格
HSSFSheet sheetGuozhiqi = (HSSFSheet)workBook.GetSheet("guozhiqi");//获取到sheet名称为guozhiqi的那个工作簿
//创建了工作簿 添加单元格之前首先要添加行
//在这里请注意 行和列的下标都是从0开始的 而不是Excel文件中的1
for (int i = 0; i <= 10; i++)
{
sheetGuozhiqi.CreateRow(i);//创建了11行
}
//创建了行之后 就要在每个行中创建单元格
//如果没有在之前创建行
// HSSFRow newRow = (HSSFRow)sheetGuozhiqi.GetRow(12);这是错误的 程序会报异常 这就告诉我们 如果行还没有创建
//就不可以获取
HSSFRow newRow = (HSSFRow)sheetGuozhiqi.GetRow(0);
HSSFCell[] cells = new HSSFCell[11];
//在第0行的位置创建单元格
for (int i = 0; i <= 10; i++)
{
cells[i] = (HSSFCell)newRow.CreateCell(i);//为第0行创建了10个单元格
}
//这里取得单元格的异常出现位置相同 就是如果没有创建就不要试图获取
HSSFCell newCell = (HSSFCell)newRow.GetCell(0);//取得第0行第0个单元格
//获取到了单元格 赋值 为了方便说明 我多获取几个单元格的值
//Excel单元格有很多类型 例如字符串 数字 bool等类型,
cells[0].SetCellValue(false);//赋值为bool型
cells[1].SetCellValue(DateTime.Now);//赋值为日期型
cells[2].SetCellValue(3.1415926);//赋值为double类型
cells[3].SetCellValue("guozhiqi");//赋值为字符串guozhiqi
//为单元格赋值以后 我们就要开始取值了
bool cell0 = cells[0].BooleanCellValue;
// string cell00 = cells[0].StringCellValue; 错误 这句话的意思就是说存储的时候是什么类型 就必须用对应的
//取值方法取值
DateTime dateTime = cells[1].DateCellValue;
double cell2 = cells[2].NumericCellValue;
string cell3 = cells[3].StringCellValue;
//可以正常创建单元格 从单元格取值是远远不够的 还有就是客户可能会要求合并单元格 为单元格设置样式
//合并单元格的操作不必要创建所有的行或列,只需要制定范围即可
sheetGuozhiqi.AddMergedRegion(new NPOI.SS.Util.Region(1,1,20,20));//合并单元格
HSSFCellStyle cellStyle = (HSSFCellStyle)workBook.CreateCellStyle();
cellStyle.Alignment = HorizontalAlignment.CENTER;//居中显示
cellStyle.FillBackgroundColor = 244;
cellStyle.FillPattern = FillPatternType.BRICKS;//填充模式
cellStyle.IsHidden = false;//单元格是否隐藏
cellStyle.IsLocked = false;//单元格是否锁定
cellStyle.VerticalAlignment = VerticalAlignment.CENTER;//垂直居中
//设置单元格字体
HSSFFont font =(HSSFFont) workBook.CreateFont();
font.Color = 200;
font.FontHeight = 18;//设置字体大小
font.FontName = "黑体";//设置字体为黑体
font.IsItalic = false;//是否是斜体
font.IsStrikeout = true;//是否有中间线
font.Underline = (byte)FontUnderlineType.DOUBLE;//设置下划线
cellStyle.SetFont(font);
//将设置好的样式应用到对应的单元格上 否则是没有效果的
cells[0].CellStyle = cellStyle;
if (!workBook.IsWriteProtected)
{
workBook.Write(fileStream);
}
}
catch (Exception ex)
{
HttpContext.Current.Response.Write(ex.Message+ex.Source+ex.StackTrace);
}
finally
{
if (fileStream != null)
{
fileStream.Close();
}
}
}
}