C# + NPOI 实现导出DataGridView数据至Excel

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Drawing;

using MySql.Data.MySqlClient;

using System.Data;

using NPOI.HSSF.Util;

using NPOI.HSSF.UserModel;

using NPOI.SS.Util;

using NPOI.SS.UserModel;

using System.IO;

 

//实际上该函数除表头从DataGridView读取,

//其余的信息是从DataTable中读取

//因为要对DataGridView中的数据进行强制转换比DataTable麻烦

 

namespace资产管理系统

{

    classNPOIExportExcelHepler

    {

        ///<summary>

        ///私有成员

        ///</summary>

        privateHSSFWorkbook n_objBook;

        privateHSSFSheet n_objSheet;

        private HSSFRown_objHeadRow;

        privateHSSFDataFormat n_objDataformat;

        privateHSSFCellStyle n_objCellStyle;

 

        ///<summary>

        ///数据表到Excel

        ///</summary>

        ///<param name="fileName">存储文件的文件名</param>

        ///<param name="dgv">DataGridView</param>

        ///<param name="InforDataTable">DataTable</param>

        publicvoidDataGridViewToExcel(string fileName, DataGridView dgv, DataTable InforDataTable)

        {

            //不导出空表

            if(dgv.Rows.Count == 0)

            {

                return;

            }

 

            SaveFileDialogsaveFlie = newSaveFileDialog();

            saveFlie.DefaultExt = "xls";

            saveFlie.Filter = "Excel 2007格式|*.xls";

            saveFlie.FileName = fileName + DateTime.Now.ToString("yyyyMMddHHmmss");

 

            //是否存储,否,返回

            if(saveFlie.ShowDialog() != DialogResult.OK)

            {

                return;

            }

 

            //Excel操作对象

            n_objBook = newHSSFWorkbook();

            n_objSheet =(HSSFSheet)n_objBook.CreateSheet(fileName);

            n_objHeadRow =(HSSFRow)n_objSheet.CreateRow(0);

            n_objDataformat =(HSSFDataFormat)n_objBook.CreateDataFormat();

            n_objCellStyle =(HSSFCellStyle)n_objBook.CreateCellStyle();

 

            //表头

            for (int i = 0;i < dgv.Columns.Count; ++i)

            {

                HSSFCell headCell =(HSSFCell)n_objHeadRow.CreateCell(i, CellType.String);

               headCell.SetCellValue(dgv.Columns[i].HeaderText);

            }

 

            //数据写入

            for (int i = 0;i < dgv.Rows.Count; ++i)

            {

                HSSFRow n_Row =(HSSFRow)n_objSheet.CreateRow(i + 1);

                for (int j = 0;j < dgv.Columns.Count; ++j)

                {

                    HSSFCell cell =(HSSFCell)n_Row.CreateCell(j);

                    stringvalueType = InforDataTable.Rows[i][j].GetType().ToString();

                    string value =InforDataTable.Rows[i][j].ToString();

 

                    //指定数据的类型并赋值,采用TryParse进行强制转换

                    switch(valueType)

                    {

                        case"System.String":

                           n_Row.CreateCell(j).SetCellValue(value);

                            break;

                        case"System.DateTime":

                            System.DateTimedateValue;

                            System.DateTime.TryParse(value,outdateValue);

                            //MessageBox.Show("i="+i.ToString()+"j="+j.ToString()+"value="+value.ToString());

                           n_Row.CreateCell(j).SetCellValue(dateValue);

                           n_objCellStyle.DataFormat = n_objDataformat.GetFormat("yyyy/MM/dd HH:mm:ss");//设置日期类型数据列的单元格格式

                            n_Row.Cells[j].CellStyle = n_objCellStyle;

                            break;

                        case"System.Boolean":

                            boolboolValue = false;

                            bool.TryParse(value,outboolValue);

                           n_Row.CreateCell(j).SetCellValue(boolValue);

                            break;

 

                        case"System.Int16":

                        case"System.Int32":

                        case"System.Int64":

                        case"System.Byte":

                            intintValue = 0;

                            int.TryParse(value,outintValue);

                           n_Row.CreateCell(j).SetCellValue(intValue);

                            break;

                        case"System.Decimal":

                        case"System.Double":

                            doubledoubleValue = 0;

                            double.TryParse(value,outdoubleValue);

                           n_Row.CreateCell(j).SetCellValue(doubleValue);

                            break;

                        case"System.DBNull":

                           n_Row.CreateCell(j).SetCellValue("");

                            break;

                        default:

                           n_Row.CreateCell(j).SetCellValue("");

                            break;

                    }

                }

            }

 

            //设置各列自动适应单元个字符长度

            for (int i = 0;i < dgv.Columns.Count; ++i)

            {

                n_objSheet.AutoSizeColumn(i);

            }

 

            //写入操作异常检测,检测文件是否被占用

            try

            {

                using (FileStream fs = newFileStream(saveFlie.FileName,FileMode.Create))

                {

                    n_objBook.Write(fs);//写入

                    fs.Close();//关闭数据流

                    GC.Collect();//垃圾回收(销毁数据流)

                }

                MessageBox.Show("导出成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }

 

            catch (Exception)

            {///异常报出有待改善

                MessageBox.Show("文件“" + fileName + "”正在被另一程序占用", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }

            finally

            {

 

            }

        }

    }

}

NPOI .NET4.0 .DLL库
demo源码


猜你喜欢

转载自blog.csdn.net/ricardomtan/article/details/80941621