C#npoi导出excel一些自己的看法

2018-06-22 04:38:57来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

之前转过一篇类似的文章,那个是用C#自带的excel类操作Excel的,还有一种在c#上操作excel的方法便是npoi了,npoi是poi的C#版本。

npoi操作excel有两种形式,一种是hssf和xssf。hssf是用来生成excel2003之前的版本,生成的excel后缀是“.xls”,而xssf是excel2007的版本,操作的excel的后缀是“.xlsx”。

npoi中常用的类型:

XSSF/HSSFWorkbook:excel文件的工作簿,

Isheet:excel文件的工作簿中的工作表,

IRow:excel文件的工作簿中的工作表中的行,

ICell:excel文件的工作簿中的工作表中的行中的单元格。

 

举一个简单的导出excel的方法

 public static IWorkbook TableToExcel(DataTable dt, string fileExt = ".xlsx")
        {
            IWorkbook workbook;
            if (fileExt == ".xlsx")
            {
                workbook = new XSSFWorkbook();
            }
            else if (fileExt == ".xls")
            {
                workbook = new HSSFWorkbook();
            }
            else
            {
                workbook = null;
            }
            if (workbook == null)
            {
                return null;
            }
            ISheet sheet = string.IsNullOrEmpty(dt.TableName) ? workbook.CreateSheet("Sheet1") : workbook.CreateSheet(dt.TableName);

            //表头  
            IRow row = sheet.CreateRow(0);
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                ICell cell = row.CreateCell(i);
                cell.SetCellValue(dt.Columns[i].ColumnName);

            }

            //数据  
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                IRow row1 = sheet.CreateRow(i + 1);
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    ICell cell = row1.CreateCell(j);
                    cell.SetCellValue(dt.Rows[i][j].ToString());

                }
            }
            //设置宽度
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                int length = Encoding.Default.GetBytes(row.GetCell(i).ToString()).Length;
                sheet.SetColumnWidth(i, (length + 2) * 256);
            }
            return workbook;


        }

//生成excel:

using (MemoryStream ms = new MemoryStream())
{
workbook.Write(ms);
var buffer = ms.GetBuffer();
ms.Close();
return File(buffer, "application/vnd.ms-excel", "个人提成补录模板.xls");
}

 

如果要更改单元格颜色的样式,可以用下面的方法:

            ICellStyle style = workbook.CreateCellStyle();
            style.FillPattern = FillPattern.SolidForeground;//很重要
            style.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.Red.Index;
            style.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Red.Index;

            IRow excelRow = workbook.GetSheetAt(0).GetRow(0);
            for (int i = 0; i <= 5; i++)
            {
                excelRow.GetCell(i).CellStyle = style;
            }
            excelRow.GetCell(22).CellStyle = style;
            excelRow.GetCell(19).CellStyle = style;
            excelRow.GetCell(8).CellStyle = style;

改颜色纠结了好久,也查了好多资料,网上有好多用cell.setcellstyle()这个方法的,我试了一下,根本没有,而且好多都是那样写的,不知道是java的还是啥的,应该不是.net的。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:lambda 怎么传递ref参数

下一篇:.NET中的repeater简介及分页效果