• 简单回顾NPOI导入导出excel文件


          当前环境.net4.0 

      去官方下下载:  NOPI官网

      关于NOPI的详细,这里就不再介绍。

      在项目中,我们只需引入  NPOI.dll  就可以了.

      接下来................................................................

      上代码......... ..........................................................

      

      /// <summary>
            /// 导出
            /// </summary>
            /// <param name="dt">数据源</param>
            /// <param name="filePath">导出地址</param>
            public static void ExportExcel(DataTable dt, string filePath)
            {
                try
                {
    
                    //创建文档
                    IWorkbook workbook = new HSSFWorkbook();
                //创建表格
                    ISheet sheet = workbook.CreateSheet(dt.TableName) as NPOI.HSSF.UserModel.HSSFSheet;
              
              
           //第0行合并单元格,并且插入标题
                    //sheet.AddMergedRegion(new CellRangeAddress(0, 0, 0, dt.Columns.Count));
                    //IRow row1 = sheet.CreateRow(0);
                    ////row1.CreateCell(0).SetCellValue(dt.TableName);
                    //ICell col = row1.CreateCell(0);
                    //col.SetCellValue(dt.TableName);
                    //col.CellStyle.Alignment = HorizontalAlignment.Center;
                    //col.CellStyle.VerticalAlignment = VerticalAlignment.Center;
                    //col.CellStyle.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.Blue.Index;
    
                   //从第一行获取和插入列名
                    IRow row = sheet.CreateRow(1);
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        ICell cell = row.CreateCell(i);
                        cell.SetCellValue(dt.Columns[i].ColumnName);
                    }
    
    
        
                   //从第二行中开始插入数据
                    int index = 2;
                    foreach (DataRow rows in dt.Rows)
                    { 
                        row = sheet.CreateRow(index);
                        foreach (DataColumn item in dt.Columns)
                        {
                           ICell cel= row.CreateCell(item.Ordinal);
                            cel.SetCellValue(rows[item].ToString());
                     
                        }
    
                        index++;
                    }
    
    
                    MemoryStream ms = new MemoryStream();
                    workbook.Write(ms);
    
                    using (FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate))
                    {
                        // workbook.Write(fileStream);
                        //  fileStream.Flush();
    
                        byte[] bArr = ms.ToArray();
                        fileStream.Write(bArr, 0, bArr.Length);
                        fileStream.Flush();
    
                    }
                    workbook.Close();
                }
                catch (Exception ex)
                {
    
                    throw ex;
                }
            }            

      具体使用方法如下:  

      数据是模拟数据..........

     class Program
        {
            static void Main(string[] args)
            {
                DataTable dt = new DataTable("学生表");
                dt.Columns.Add("ID", typeof(int));
                dt.Columns.Add("Name", typeof(string));
                dt.Columns.Add("Age", typeof(int));
    
                for (int i = 1; i <= 1000; i++)
                {
                     
                    DataRow row = dt.NewRow();
                    row["ID"] = i;
                    row["Name"] = "名字" + i;
                    row["Age"] = i;
                    dt.Rows.Add(row);
                }
               //导出
                ExportExcel(dt, @"d:xxx2.xls");
                Console.WriteLine("OK");
                Console.ReadKey();
    }    

      接下来是导入方法。 

     /// <summary>
            /// 导入
            /// </summary>
            /// <param name="filePath">excel路径</param>
            /// <param name="sheetIndex">sheet索引,默认为第一个</param>
            /// <returns></returns>
            public static DataTable ImportExcel(string filePath, int sheetIndex=0)
            {
                try
                {
                    using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate))
                    {
                        DataTable dt = new DataTable();
                        IWorkbook workbook = new HSSFWorkbook(fs);
    
                       // sheet索引,默认为第一个
                        ISheet sheet = workbook.GetSheetAt(sheetIndex);
    
                        //读取第一行列名
                        foreach (ICell cels in sheet.GetRow(sheet.FirstRowNum).Cells)
                        {
                            dt.Columns.Add(cels.ToString());
                        }
    
                        //第二行开始 
                        for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
                        {
                            IRow rows = sheet.GetRow(i);
                            DataRow dataRow = dt.NewRow();
    
                            //遍历每行每列的值
                            for (int j = rows.FirstCellNum; j < rows.LastCellNum; j++)
                            {
                                dataRow[j] = rows.GetCell(j).ToString();
                            }
    
                            dt.Rows.Add(dataRow);
                        }
    
                        workbook.Close();
    
                        return dt;
    
                    }
                }
                catch (Exception ex)
                {
                    
                    throw ex;
                }
            
            }

        使用方法如下:

      

     class Program
        {
            static void Main(string[] args)
            {
                DataTable dt = new DataTable("学生表");
                dt.Columns.Add("ID", typeof(int));
                dt.Columns.Add("Name", typeof(string));
                dt.Columns.Add("Age", typeof(int));
    
                for (int i = 1; i <= 1000; i++)
                {
                     
                    DataRow row = dt.NewRow();
                    row["ID"] = i;
                    row["Name"] = "名字" + i;
                    row["Age"] = i;
                    dt.Rows.Add(row);
                }
             //导入并且返回DataTable,您可以选择用sqlbulkCopy批量插入数据库
           var data=   ImportExcel(@"d:xxx2.xls");
                Console.WriteLine("OK");
                Console.ReadKey();
          关于sqlbulkCopy批量插入数据库,效率还是挺高的,详情可以看我上一篇文章。
        
          本文到此结束。
        
        

      

  • 相关阅读:
    SpingBoot myBatis neo4j整合项目案例
    GCC 优化选项 -O1 -O2 -O3 -OS 优先级,-FOMIT-FRAME-POINTER(O3的优化很小,只增加了几条优化而已)
    睡个好觉的 12 条军规(坚持固定睡眠时间表,这一条最重要)
    恐怕你确定自己喜欢做什么(如果一件事能让你沉浸其中、安住当下,过后又不令你后悔,那它就是你喜欢的事:时间就应该拿来赚钱或提升赚钱的能力)
    专家解读:缺芯少人的中国集成电路,亟待打破高校学科壁垒
    你们一定要搞清楚被迫加班和自己弄的差别(被动的人得关节炎,主动的人身体更棒了)
    Linux命令排查线上问题常用的几个
    NFS (网络文件系统)
    查看JVM运行时堆内存
    SQL查询速度
  • 原文地址:https://www.cnblogs.com/wzf-Code/p/5654119.html
Copyright © 2020-2023  润新知