datatable导出excel使用NPOI包

首先引用NPOI包

using NPOI.HSSF.UserModel; 
using NPOI.SS.UserModel;

注意: NPOI创建的Excel的坐标是从0开始

        /// <summary>
        /// datatable导出Excel
        /// </summary>
        /// <param name="dt">table</param>
        /// <param name="date">时间</param>
        public static void getdata(DataTable dt, string date)
        {
            IWorkbook excel = new HSSFWorkbook();//创建.xls文件
            ISheet sheet = excel.CreateSheet("sheet1"); //创建sheet
            //row给它创建坐标为0的行数 对应excel中第一行
            IRow row = sheet.CreateRow(0);//创建行对象,填充表头
            //第一行的第一列为作业类型
            row.CreateCell(0).SetCellValue("作业类型");
            //第一行的第二列为作业地点
            row.CreateCell(1).SetCellValue("作业地点"); 
            //以此类推.....
            row.CreateCell(2).SetCellValue("作业开始时间");
            row.CreateCell(3).SetCellValue("作业结束时间");
            row.CreateCell(4).SetCellValue("是否承包商作业");
            row.CreateCell(5).SetCellValue("施工单位/人员");
            row.CreateCell(6).SetCellValue("项目负责人");
            row.CreateCell(7).SetCellValue("联系方式");
            row.CreateCell(8).SetCellValue("作业内容");
            //填充内容,j从1开始,屏蔽掉第一列,循环读取  
            //现在是正常获取的数据 未屏蔽列
            //获取table的总行数
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                //标题头 已经创建好 开始创建数据 sheet1表 创建坐标为1的行数 对应excel的第二行
                //循环行数 直到table的行数
                row = sheet.CreateRow(i + 1);
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    //创建好的行数 赋值为对应的列 
                    //第二行的第一列为 对应的table的值
                    row.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());
                    //会调整列的宽度以适应这些内容
                    sheet.AutoSizeColumn(j);
                }
            }
            //写入文件
            string DesktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
            FileStream xlsfile = new FileStream(DesktopPath + @"\作业票信息" + date + ".xls", FileMode.Create);
            //将excel写入到对应的地址
            excel.Write(xlsfile);
            xlsfile.Close();

        }

最后效果

第一行是创建的表头 第二行是循环datatable拿到的数据

posted @ 2021-08-09 15:07  原往  阅读(174)  评论(0)    收藏  举报