NOPI导出excel
来源:互联网 发布:移动数据开关已关闭 编辑:程序博客网 时间:2024/05/22 06:14
在近在网上找了许多给予web的office空间,比如pageoffice,说是免费版的,赶脚很不错,但是用的时候却发现很多只能付费后才能使用。擦,这么忽悠人的,于是乎有学习了nopi的方式,但是网上大多用的都是HSSForwork 也就是说是office2003版本的写法,下面整理的代码是office2007版本以后的及XSSForwork,调用只需传入参数即可,希望对大家有用!
注意:调用的时候请在官方下载最新版本NOPI的包,并添加引用(下载地址:http://npoi.codeplex.com/releases)
1.C#代码:NOPIHelper.cs
/// <summary>/// 完整的导出成Excel方法,带表样式
/// </summary>
/// <param name="dtSource">数据源 DataTable格式</param>
/// <param name="dtHeaderText">文件标题</param>
/// <param name="sheetName">文件工作区名称</param>
/// <param name="maxRows">每个工作区sheet的最大行数 ,-1 表示不限制</param>
/// <param name="backColor">表头字体权重</param>
/// <param name="tilteFontBlod">表头字体权重</param>
/// <param name="tilteFamily">表头字体字体大小风格</param>
/// <param name="tilteBorder">表头边框</param>
/// <param name="tilteHeight">表头行高</param>
/// <param name="tilteFontSize">表头字体大小</param>
/// <param name="tilteHorV">表头对其方式 可选参数(1:左对齐 2:居中 3:右对齐)</param>
/// <param name="headerFontSize">列头字体大小</param>
/// <param name="headerFamily">列头字体样式</param>
/// <param name="headerFontBold">列头字体权重</param>
/// <param name="headerHorV">列头对其方式 可选参数(1:左对齐 2:居中 3:右对齐)</param>
/// <param name="contentFontSize">单元格字体大小</param>
/// <param name="contentFamily">单元格字体风格</param>
/// <param name="contentFontBold">单元格字体权重</param>
/// <param name="contentHorV">单元格对其方式 可选参数(1:左对齐 2:居中 3:右对齐)</param>
/// <param name="headerBorder">列头边框</param>
/// <param name="unitBorder">单元格边框</param>
/// <returns>MemoryStream</returns>
public MemoryStream OutToExcel(DataTable dtSource, String dtHeaderText, string sheetName, int maxRows, short tilteFontBlod, float tilteHeight,
FontFamily tilteFamily, short tilteFontSize, int tilteHorV, short headerFontBold, FontFamily headerFamily,
short headerFontSize, bool headerBorder, short contentFontSize, FontFamily contentFamily, short contentFontBold, int headerHorV, bool unitBorder, int contentHorV)
{
//创建一个Excel文件对象
XSSFWorkbook workbook = new XSSFWorkbook();
//创建第一个工作区
XSSFSheet sheet = (XSSFSheet)workbook.CreateSheet(sheetName + "_1");
//创建列的样式
XSSFCellStyle cell = (XSSFCellStyle)workbook.CreateCellStyle();
//cell.SetFillBackgroundColor(new XSSFColor().GetARGBHex("").);
//创建数据格式
XSSFDataFormat format = (XSSFDataFormat)workbook.CreateDataFormat();
cell.DataFormat = format.GetFormat("yyyy-mm-dd hh:mm:ss");
//取得列宽保存在数组
int[] arrColWidth = new int[dtSource.Columns.Count];
foreach (DataColumn item in dtSource.Columns)
{
arrColWidth[item.Ordinal] = Encoding.UTF8.GetBytes(item.ColumnName.ToString()).Length;
}
for (int i = 0; i < dtSource.Rows.Count; i++)
{
for (int j = 0; j < dtSource.Columns.Count; j++)
{
int intTemp = Encoding.UTF8.GetBytes(dtSource.Rows[i][j].ToString()).Length;
if (intTemp > arrColWidth[j])
{
arrColWidth[j] = intTemp;
}
}
}
//行数
int rowIndex = 1;
//工作区标识
int flagPage = 1;
foreach (DataRow row in dtSource.Rows)
{
#region 新建表,填充表头,填充列头,样式
if (maxRows != -1)
{
if (rowIndex == maxRows || rowIndex == 1)
{
if (rowIndex != 1)
{
flagPage++;
sheet = (XSSFSheet)workbook.CreateSheet(sheetName + "_" + flagPage);
}
CreateTile(dtSource, arrColWidth, workbook, sheet, dtHeaderText, tilteFontBlod, tilteHeight, tilteFamily, tilteFontSize,
tilteHorV, headerFontBold, headerFontSize, headerFamily, headerHorV, headerBorder);
rowIndex = 2;
}
}
else if (rowIndex == 1 && maxRows == -1)
{
CreateTile(dtSource, arrColWidth, workbook, sheet, dtHeaderText, tilteFontBlod, tilteHeight, tilteFamily, tilteFontSize,
tilteHorV, headerFontBold, headerFontSize, headerFamily, headerHorV, headerBorder);
rowIndex = 2;
}
#endregion
#region 填充内容
XSSFRow dataRow = (XSSFRow)sheet.CreateRow(rowIndex);
foreach (DataColumn column in dtSource.Columns)
{
XSSFCell newCell = (XSSFCell)dataRow.CreateCell(column.Ordinal);
XSSFCellStyle cellstyle = (XSSFCellStyle)workbook.CreateCellStyle();//样式
switch (contentHorV)
{
case 1: cellstyle.Alignment = HorizontalAlignment.Left;
break;
case 2: cellstyle.Alignment = HorizontalAlignment.Center;
break;
case 3: cellstyle.Alignment = HorizontalAlignment.Right;
break;
default:
cellstyle.Alignment = HorizontalAlignment.Center;
break;
}
if (unitBorder)
{
cellstyle.BorderBottom = BorderStyle.Thin;
cellstyle.BorderLeft = BorderStyle.Thin;
cellstyle.BorderRight = BorderStyle.Thin;
cellstyle.BorderTop = BorderStyle.Thin;
}
newCell.CellStyle = cellstyle;
string drValue = row[column].ToString();
switch (column.DataType.ToString())
{
case "System.String"://字符串类型
newCell.SetCellValue(drValue);
break;
case "System.DateTime"://日期类型
DateTime dateV;
DateTime.TryParse(drValue, out dateV);
newCell.SetCellValue(dateV);
newCell.CellStyle = cell;//格式化显示
break;
case "System.Boolean"://布尔型
bool boolV = false;
bool.TryParse(drValue, out boolV);
newCell.SetCellValue(boolV);
break;
case "System.Int16"://整型
case "System.Int32":
case "System.Int64":
case "System.Byte":
int intV = 0;
int.TryParse(drValue, out intV);
newCell.SetCellValue(intV);
break;
case "System.Decimal"://浮点型
case "System.Double":
double doubV = 0;
double.TryParse(drValue, out doubV);
newCell.SetCellValue(doubV);
break;
case "System.DBNull"://空值处理
newCell.SetCellValue("");
break;
default:
newCell.SetCellValue("");
break;
}
}
#endregion
rowIndex++;
}
//保存文件
using (MemoryStream ms = new MemoryStream())
{
workbook.Write(ms);
ms.Flush();
ms.Dispose();
workbook.Clear();
workbook.Close();
return ms;
}
}
/// <summary>
/// 创建表头和列头
/// </summary>
/// <param name="dtSource"></param>
/// <param name="arrColWidth"></param>
/// <param name="workbook"></param>
/// <param name="sheet"></param>
/// <param name="dtHeaderText"></param>
/// <param name="tilteFontBlod"></param>
/// <param name="tilteHeight"></param>
/// <param name="tilteFamily"></param>
/// <param name="tilteFontSize"></param>
/// <param name="tilteHorV"></param>
/// <param name="headerFontBold"></param>
/// <param name="headerFontSize"></param>
/// <param name="headerFamily"></param>
/// <param name="headerHorV"></param>
/// <param name="headerBorder"></param>
private void CreateTile(DataTable dtSource, int[] arrColWidth, XSSFWorkbook workbook, XSSFSheet sheet, String dtHeaderText, short tilteFontBlod, float tilteHeight,
FontFamily tilteFamily, short tilteFontSize, int tilteHorV, short headerFontBold, short headerFontSize, FontFamily headerFamily, int headerHorV, bool headerBorder)
{
#region 表头及样式
{
XSSFRow headerRow = (XSSFRow)sheet.CreateRow(0);
headerRow.HeightInPoints = tilteHeight;
headerRow.CreateCell(0).SetCellValue(dtHeaderText);
XSSFCellStyle headStyle = (XSSFCellStyle)workbook.CreateCellStyle();
headStyle.VerticalAlignment = VerticalAlignment.Center;
// headStyle.SetFillForegroundColor((XSSFColor)IndexedColors.Green);
//byte[] b = new byte[] { 248, 101, 101 };
//headStyle.
//headStyle.setFillPattern(XSSFCellStyle.);
//headStyle.setFillBackgroundXSSFColor(IndexedColors.RED.getIndex());
switch (tilteHorV)
{
case 1: headStyle.Alignment = HorizontalAlignment.Left;
break;
case 2: headStyle.Alignment = HorizontalAlignment.Center;
break;
case 3: headStyle.Alignment = HorizontalAlignment.Right;
break;
default:
headStyle.Alignment = HorizontalAlignment.Center;
break;
}
XSSFFont font = (XSSFFont)workbook.CreateFont();
font.FontHeightInPoints = tilteFontSize;
font.Boldweight = tilteFontBlod;
font.SetFamily(tilteFamily);
headStyle.SetFont(font);
NPOI.SS.Util.CellRangeAddress reg = new NPOI.SS.Util.CellRangeAddress(0, 0, 0, dtSource.Columns.Count - 1);
sheet.AddMergedRegion(reg);
headerRow.GetCell(0).CellStyle = headStyle;
}
#endregion
#region 列头及样式
{
XSSFRow headerRow = (XSSFRow)sheet.CreateRow(1);
XSSFCellStyle headStyle = (XSSFCellStyle)workbook.CreateCellStyle();
headStyle.VerticalAlignment = VerticalAlignment.Center;
if (headerBorder)
{
headStyle.BorderBottom = BorderStyle.Thin;
headStyle.BorderLeft = BorderStyle.Thin;
headStyle.BorderRight = BorderStyle.Thin;
headStyle.BorderTop = BorderStyle.Thin;
}
switch (headerHorV)
{
case 1: headStyle.Alignment = HorizontalAlignment.Left;
break;
case 2: headStyle.Alignment = HorizontalAlignment.Center;
break;
case 3: headStyle.Alignment = HorizontalAlignment.Right;
break;
default:
headStyle.Alignment = HorizontalAlignment.Center;
break;
}
XSSFFont font = (XSSFFont)workbook.CreateFont();
font.FontHeightInPoints = headerFontSize;
font.Boldweight = headerFontBold;
font.SetFamily(headerFamily);
headStyle.SetFont(font);
foreach (DataColumn column in dtSource.Columns)
{
headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
headerRow.GetCell(column.Ordinal).CellStyle = headStyle;
//设置列宽
sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal]) * 256);
}
}
#endregion
}
1 0
- NOPI导出excel
- nopi导入导出excel
- NOPI导出标准格式Excel
- Nopi导出excel 设置字体颜色
- 使用NOPI实现Excel导入导出类
- C#利用NOPI导出到Excel
- winform下用NOPI导出excel怎么写
- NOPI导出excel 有下标上标设置
- asp.net framework4.0 使用NOPI(一)导出excel
- 使用NOPI导出Excel并将文件保存到服务器
- Nopi导出execl
- Nopi Excel下载功能
- NOPI操作Excel
- C# NOPI读取Excel
- NOPI\\Excel导入数据
- 使用NOPI实现导出已有固定模板的Excel报表
- C# NOPI实现导出 类
- NOPI用模板生成excel
- 20160315-02-Activity 生命周期
- 百度地图API多行政区域划分
- UI基础控件的使用1
- 关于setNeedsDisplay、setNeedsLayout方法,UIView的layoutSubviews和drawRect方法何时调用
- MediaPlayer--点击按钮,播放语音
- NOPI导出excel
- HBase连接池 -- HTablePool被Deprecated之后
- 逗号表达式
- 20160316-面向对象结束
- 项目生命周期有哪些类型?分别适用于什么情况下?
- 树莓派搭建花生壳
- iOS蓝牙开发
- Linux笔记(50)——条件判断式语句
- xml和json数据的比较