• NPOI组件操作Excel导入、导出


            /// <summary>
            /// 将xls格式的Excel读取到DataTable中
            /// </summary>
            /// <param name="fileName">文件路径</param>
            /// <returns></returns>
            public DataTable HSSFReadExcel(string fileName)
            {
                try
                {
                    DataTable data = new DataTable();
                    #region 读excel
                    using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read))
                    {
                        HSSFWorkbook hssf = new HSSFWorkbook(fs);
                        ISheet sheet = hssf.GetSheetAt(0);  //只读去第一个sheet工作表内容
                        IRow row = sheet.GetRow(0); //获取第一行
                        //遍历第一行表头
                        for (int i = 0; i < row.LastCellNum; i++)
                        {
                            ICell cell = row.GetCell(i);    //获取到当前单元格
                            data.Columns.Add(row.GetCell(i).StringCellValue);   //
                        }
                        //遍历第二行到sheet的最后一行的每一行
                        for (int i = 1; i < sheet.LastRowNum; i++)
                        {
                            IRow ThisRow = sheet.GetRow(i); //当前行
                            if (ThisRow == null)
                            {
                                continue;
                            }
                            DataRow dataRow = data.NewRow();  //设置datatable表新的一行来接受数据
                            //遍历当前行的每一列
                            for (int j = 0; j < ThisRow.LastCellNum; j++)
                            {
                                ICell cell = ThisRow.GetCell(j);
                                if (cell != null)
                                {
    
                                    if (cell.CellType == CellType.Numeric)
                                    {
                                        //NPOI中数字和日期都是NUMERIC类型的,这里对其进行判断是否是日期类型
                                        if (HSSFDateUtil.IsCellDateFormatted(cell))//日期类型
                                        {
                                            dataRow[j] = cell.DateCellValue.ToShortDateString();
                                        }
                                        else//其他数字类型
                                        {
                                            dataRow[j] = cell.NumericCellValue.ToString();
                                        }
                                    }
                                    else if (cell.CellType == CellType.Blank)//空数据类型
                                    {
                                        dataRow[j] = "";
                                    }
                                    else if (cell.CellType == CellType.Formula)//公式类型
                                    {
                                        HSSFFormulaEvaluator eva = new HSSFFormulaEvaluator(hssf);
                                        dataRow[j] = eva.Evaluate(cell).NumberValue;    //输出公式计算的结果
                                    }
                                    else //其他类型都按字符串类型来处理
                                    {
                                        dataRow[j] = cell.StringCellValue;
                                    }
                                }
                            }
                            data.Rows.Add(dataRow);
                        }
                    }
                    #endregion
                    return data;
                }
                catch (Exception)
                {
                    throw;
                }
            }
    
            /// <summary>
            /// 将xlsx格式的Excel读取到Datatable中
            /// </summary>
            /// <param name="fileName">文件路径</param>
            /// <returns></returns>
            public DataTable XSSFReadExcel(string fileName)
            {
                try
                {
                    DataTable data = new DataTable();
                    #region 读excel
                    using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Read))
                    {
                        XSSFWorkbook xssf = new XSSFWorkbook(fileName);
                        ISheet sheet = xssf.GetSheetAt(0);  //只读去第一个sheet工作表内容
                        IRow row = sheet.GetRow(0); //获取第一行
                        //遍历第一行表头
                        for (int i = 0; i < row.LastCellNum; i++)
                        {
                            ICell cell = row.GetCell(i);    //获取到当前单元格
                            data.Columns.Add(row.GetCell(i).StringCellValue);   //
                        }
                        //遍历第二行到sheet的最后一行的每一行
                        for (int i = 1; i < sheet.LastRowNum; i++)
                        {
                            IRow ThisRow = sheet.GetRow(i); //当前行
                            if (ThisRow == null)
                            {
                                continue;
                            }
                            DataRow dataRow = data.NewRow();  //设置datatable表新的一行来接受数据
                            //遍历当前行的每一列
                            for (int j = 0; j < ThisRow.LastCellNum; j++)
                            {
                                ICell cell = ThisRow.GetCell(j);
                                if (cell != null)
                                {
    
                                    if (cell.CellType == CellType.Numeric)
                                    {
                                        //NPOI中数字和日期都是NUMERIC类型的,这里对其进行判断是否是日期类型
                                        if (HSSFDateUtil.IsCellDateFormatted(cell))//日期类型
                                        {
                                            dataRow[j] = cell.DateCellValue.ToShortDateString();
                                        }
                                        else//其他数字类型
                                        {
                                            dataRow[j] = cell.NumericCellValue.ToString();
                                        }
                                    }
                                    else if (cell.CellType == CellType.Blank)//空数据类型
                                    {
                                        dataRow[j] = "";
                                    }
                                    else if (cell.CellType == CellType.Formula)//公式类型
                                    {
                                        XSSFFormulaEvaluator eva = new XSSFFormulaEvaluator(xssf);
                                        dataRow[j] = eva.Evaluate(cell).NumberValue;    //输出公式计算的结果
                                    }
                                    else //其他类型都按字符串类型来处理
                                    {
                                        dataRow[j] = cell.StringCellValue;
                                    }
                                }
                            }
                            data.Rows.Add(dataRow);
                        }
                    }
                    #endregion
                    return data;
                }
                catch (Exception)
                {
    
                    throw;
                }
            }
    
    
            /// <summary>
            /// 将DataGridView数据输出Excel
            /// </summary>
            /// <param name="datatable">DataGridView中的DataTable类型数据</param>
            /// <param name="fileName">文件路径</param>
            public void DataTableOutTOExcel(DataTable datatable, string fileName)
            {
                try
                {
                    IWorkbook workbook = null;
                    string endName = Path.GetExtension(fileName);
                    if (endName.ToUpper() == ".XLS")
                    {
                        workbook = new HSSFWorkbook();
                    }
                    else if (endName.ToUpper() == ".XLSX")
                    {
                        workbook = new XSSFWorkbook();
                    }
                    using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write))
                    {
                        if (workbook != null)
                        {
                            ISheet sheet = workbook.CreateSheet("sheet1"); ;  //创建第一个sheet
                            #region 遍历表的第一行标题行
                            IRow row = sheet.CreateRow(0);     //创建第一行
                            for (int i = 0; i < datatable.Columns.Count; i++)
                            {
                                ICell cell = row.CreateCell(i);
                                cell.SetCellValue(datatable.Columns[i].ColumnName);
                            }
                            #endregion
                            #region 遍历表中的数据行
                            //遍历第二行开始的每一行
                            for (int i = 1; i < datatable.Rows.Count; i++)
                            {
                                row = sheet.CreateRow(i);
                                //遍历每个单元格
                                for (int j = 0; j < datatable.Columns.Count; j++)
                                {
                                    ICell cell = row.CreateCell(j);
                                    cell.SetCellValue(datatable.Rows[i][j].ToString());
                                }
                            }
                            #endregion
                        }
                        workbook.Write(fs);
                    }
    
                }
                catch (Exception)
                {
                    throw;
                }
    
            }
  • 相关阅读:
    zoj-1610线段树刷题
    poj-3268最短路
    poj-2528线段树练习
    线段树-最小逆序数hdu1394
    线段树延迟更新
    hdu-4027线段树练习
    RMQ_第一弹_Sparse Table
    字符串hash与字典树
    背包问题
    网络流
  • 原文地址:https://www.cnblogs.com/ghgxm520/p/8316175.html
Copyright © 2020-2023  润新知