今天捣鼓了一天NPOI导出excel,以前从来没有碰过这东西,这个点终于把制作的模板给搞了出来,虽然是一点点的拼凑起来,但看到跟要求相差不大的模板,心里也还是感觉有那么点成就感,下面我就把源码贴在下面,希望日后再有excel导出项目的时候拿出来看看,同时也希望可以帮助到别人。
下面的程序,是我做的测试的程序,在windows form里做的,大家可以下载NPOI的dll文件,也可以用源文件,这里我引用的源文件,不过不知道不同的版本是不是不一样,下面我可以把自己用到的源码附上连接,大家可以去下载http://download.youkuaiyun.com/detail/woaishuoshihuo/7978731。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NPOI.HSSF.UserModel;
using NPOI.HPSF;
using NPOI.HSSF.Util;
using NPOI.POIFS.FileSystem;
using System.IO;
using NPOI;
using NPOI.SS.UserModel;
using System.Web;
namespace TestExcelCreate
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// DataTable导出到Excel文件
/// </summary>
/// <param name="dtSource">源DataTable</param>
/// <param name="strHeaderText">表头文本</param>
/// <param name="strFileName">保存位置</param>
public static void Export(string strHeaderText, string strFileName)
{
using (MemoryStream ms = Export(strHeaderText))
{
using (FileStream fs = new FileStream(strFileName, FileMode.Create, FileAccess.Write))
{
byte[] data = ms.ToArray();
fs.Write(data, 0, data.Length);
fs.Flush();
}
}
}
public static MemoryStream Export(string strHeaderText)
{
int LineNum = 65;
int ColNum = 13;
int HeaderLine = 6;
HSSFWorkbook workbook = new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet();
ICellStyle defaultStyle = workbook.CreateCellStyle();
defaultStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.THIN;
defaultStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.THIN;
defaultStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.THIN;
defaultStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.THIN;
defaultStyle.TopBorderColor = HSSFColor.BLACK.index;
defaultStyle.BottomBorderColor = HSSFColor.BLACK.index;
defaultStyle.LeftBorderColor = HSSFColor.BLACK.index;
defaultStyle.RightBorderColor = HSSFColor.BLACK.index;
defaultStyle.ShrinkToFit = true;
IFont defaultFont = workbook.CreateFont();
defaultFont.FontHeightInPoints = 10;
defaultStyle.SetFont(defaultFont);
sheet.SetColumnWidth(0, 3 * 256);
for (int i = 1; i < 1 + ColNum; i++)
{
if (i == 1)
sheet.SetColumnWidth(i, 5 * 256);
else
sheet.SetColumnWidth(i, 11 * 256);
}
ICellStyle firstcellleftstyle = workbook.CreateCellStyle();
ICellStyle lastcellrightstyle = workbook.CreateCellStyle();
firstcellleftstyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.THIN;
firstcellleftstyle.BorderRight = NPOI.SS.UserModel.BorderStyle.THIN;
firstcellleftstyle.B