asp.net NPOI 导出

来源:互联网 发布:拓扑算法 编辑:程序博客网 时间:2024/06/05 08:13

在这里导出用的是NPOINPOI:是对Office进行操作的一个类库框架

XSSFWorkbook对应的就是Excel文件 工作簿,

XSSFSheet对应的就是Excelsheet工作表,

XSSFCell对应的就是Excel的单元格,

XSSFRow对应的就是Excel的行。

例:

        /// <summary>
        /// 导出模版        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list">要导出的信息</param>
        /// <param name="listName">导出标题</param>
        /// <param name="rowTitles">导出对应字段</param>
        /// <returns></returns>

        public MemoryStreamExportExcel<T>(IList<T> list, string[] listName, string[] rowTitles, string[] infoListName)
        {

//创建一个内存中的Excel 只是还没有写到硬盘上
var workbook =new XSSFWorkbook();
//创建一张sheet工作表
var sheet = workbook.CreateSheet();
//创建工作表中的第一行
var headerRow = sheet.CreateRow(0);
//申明一个单元格的样式
var cellStyle = workbook.CreateCellStyle();
//设置单元格为锁定状态
cellStyle.IsLocked = true;
var cellStyleNo = workbook.CreateCellStyle();
//设置单元格为不锁定状态
cellStyleNo.IsLocked = false;
var format = workbook.CreateDataFormat();
//把单元格设置格式为文本格式
cellStyle.DataFormat = format.GetFormat("@");
cellStyleNo.DataFormat = format.GetFormat("@"); 
//给所有行的指定第一列创建宽
sheet.SetColumnWidth(0, 20 * 256);
//在申明的行中创建第一列
var headerRowCell = headerRow.CreateCell(0);
//为行中第一列填充数据
headerRowCell.SetCellValue("序列号");
//为行中第一列赋值样式
headerRowCell.CellStyle = cellStyle;

 #region 循环填充列名

 int intRowTitles = listName.Count();
 int intInfoTitles = infoListName.Count();//基本信息列
 //订单
 for (var i = 1; i <= intRowTitles; i++)
     {
         sheet.SetColumnWidth(i, 20 * 256);
         headerRowCell = headerRow.CreateCell(i);
         headerRowCell.SetCellValue(listName[i - 1]);
         headerRowCell.CellStyle = cellStyle;
     }

 #endregion

 /*
     CreateFreezePane的参数作一下说明:
      第一个参数表示要冻结的列数;
      第二个参数表示要冻结的行数,这里只冻结列所以为0;
      第三个参数表示右边区域可见的首列序号,从1开始计算;
      第四个参数表示下边区域可见的首行序号,也是从1开始计算,这里是冻结列,所以为0;

*/

sheet.CreateFreezePane(0, 1, 0, 1);

#region循环填充内容数据


 object value = null;
 int RowId = 0;
 if (list != null && list.Count() > 0)
    {
        Type type = list[0].GetType();
         foreach (var itemin list)
           {
                 RowId++;
                 var row = sheet.CreateRow(RowId);
                 intRowTitles = rowTitles.Count();
                 row.CreateCell(0).SetCellValue(RowId.ToString());
                 row.GetCell(0).CellStyle = cellStyle;
                 for (var i = 1; i <= intRowTitles; i++)
                 {
                       if (rowTitles[i - 1] == "CompanyName")//快递公司字段可以输入
                        {
                            row.CreateCell(i).SetCellValue("");
                            row.CreateCell(i).CellStyle = cellStyleNo;
                        }
                        else if ( rowTitles[i - 1] == "BillNo")//快递编号字段可以输入
                        {
                            row.CreateCell(i).SetCellValue("");
                            row.CreateCell(i).CellStyle = cellStyleNo;
                        }
                        else
                        {
                            value = type.GetProperty(rowTitles[i - 1]).GetValue(item);
                            if (value == null || value.ToString().Equals("1970/1/1 0:00:00") || value.ToString().Equals("0001/1/1 0:00:00"))
                            {
                               row.CreateCell(i).SetCellValue("");
                            }
                            else if (value.GetType().Name == "Decimal")
                            {
                                row.CreateCell(i).SetCellValue(value.ToDecimalF());
                            }
                            else
                            {
                                row.CreateCell(i).SetCellValue(value.ToString());
                            }
                            //此处应用style
                            row.GetCell(i).CellStyle = cellStyle;

                        }
                }
          }
    }

#endregion

 

//设置保护密码
sheet.ProtectSheet("MD5");
var output = new MemoryStream();
workbook.Write(output);
return output;

}

 

0 0
原创粉丝点击