博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NPOI导出excel表格应用
阅读量:4480 次
发布时间:2019-06-08

本文共 7135 字,大约阅读时间需要 23 分钟。

最近接到一个需求,在原有系统上做二次开发 ,要求导出DataGridView数据到Excel表格中。要求如下:

  1. 兼容所有excel版本;
  2. 导出后excel各列的样式,字段类型不变。

成型如下:

具体代码实现如下:

  1. girdview数据绑定
public Form1()        {            InitializeComponent();            Load += Form1_Load;        }               ///         /// 给DataGridView绑定数据        ///         ///         ///         void Form1_Load(object sender, EventArgs e)        {            List
lst = new List
(); for (int i = 0; i < 3; i++) { Jacket j = new Jacket(); j.Type = "男款"; j.Color = "black"; j.Size = "S"; j.price = 55.4M + i; lst.Add(j); } for (int i = 0; i < 2; i++) { Jacket j = new Jacket(); j.Type = "男款"; j.Color = "blue"; j.Size = "L"; j.price = 60.4M + i; lst.Add(j); } for (int i = 0; i < 4; i++) { Jacket j = new Jacket(); j.Type = "女款"; j.Color = "red"; j.Size = "S"; j.price = 60.4M + i; lst.Add(j); } dataGridView1.DataSource = lst; }

  2.导出excel表格

     ///         /// 导出操作        ///         ///         ///         private void button1_Click(object sender, EventArgs e)        {            ExportExcel("d:\\1.xls", dataGridView1, "宋体", 8);        }        ///         /// 导出excel        ///         /// 导出路径        /// 数据grilview        /// 字体        /// 大小        void ExportExcel(string fileName, DataGridView dgv, string fontName, short fontSize)        {            //检测是否有数据            //if (dgv.SelectedRows.Count == 0) return;            //创建主要对象            HSSFWorkbook workbook = new HSSFWorkbook();            HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet("Weight");            //设置字体,大小,对齐方式            HSSFCellStyle style = (HSSFCellStyle)workbook.CreateCellStyle();            HSSFFont font = (HSSFFont)workbook.CreateFont();            font.FontName = fontName;            font.FontHeightInPoints = fontSize;            style.SetFont(font);            style.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER; //居中对齐            //添加表头            HSSFRow dataRow = (HSSFRow)sheet.CreateRow(0);            for (int i = 0; i < dgv.Columns.Count; i++)            {                dataRow.CreateCell(i).SetCellValue(dgv.Columns[i].HeaderText);                dataRow.GetCell(i).CellStyle = style;            }            //添加列及内容            for (int i = 0; i < dgv.Rows.Count; i++)            {                dataRow = (HSSFRow)sheet.CreateRow(i + 1);                for (int j = 0; j < dgv.Columns.Count; j++)                {                    string ValueType = dgv.Rows[i].Cells[j].Value.GetType().ToString();                    string Value = dgv.Rows[i].Cells[j].Value.ToString();                    switch (ValueType)                    {                        case "System.String"://字符串类型                            dataRow.CreateCell(j).SetCellValue(Value);                            break;                        case "System.DateTime"://日期类型                            System.DateTime dateV;                            System.DateTime.TryParse(Value, out dateV);                            dataRow.CreateCell(j).SetCellValue(dateV);                            break;                        case "System.Boolean"://布尔型                            bool boolV = false;                            bool.TryParse(Value, out boolV);                            dataRow.CreateCell(j).SetCellValue(boolV);                            break;                        case "System.Int16"://整型                        case "System.Int32":                        case "System.Int64":                        case "System.Byte":                            int intV = 0;                            int.TryParse(Value, out intV);                            dataRow.CreateCell(j).SetCellValue(intV);                            break;                        case "System.Decimal"://浮点型                        case "System.Double":                            double doubV = 0;                            double.TryParse(Value, out doubV);                            dataRow.CreateCell(j).SetCellValue(doubV);                            break;                        case "System.DBNull"://空值处理                            dataRow.CreateCell(j).SetCellValue("");                            break;                        default:                            dataRow.CreateCell(j).SetCellValue("");                            break;                    }                    dataRow.GetCell(j).CellStyle = style;                    //设置宽度                    sheet.SetColumnWidth(j, (Value.Length + 10) * 256);                }            }            //保存文件            string saveFileName = "";            SaveFileDialog saveDialog = new SaveFileDialog();            saveDialog.DefaultExt = "xls";            saveDialog.Filter = "Excel文件|*.xls";            saveDialog.FileName = fileName;            MemoryStream ms = new MemoryStream();            if (saveDialog.ShowDialog() == DialogResult.OK)            {                saveFileName = saveDialog.FileName;                if (!CheckFiles(saveFileName))                {                    MessageBox.Show("文件被站用,请关闭文件 " + saveFileName);                    workbook = null;                    ms.Close();                    ms.Dispose();                    return;                }                FileStream file = new FileStream(saveFileName, FileMode.Create);                workbook.Write(file);                file.Close();                MessageBox.Show(fileName + " 保存成功", "提示", MessageBoxButtons.OK);            }            else            {                workbook = null;                ms.Close();                ms.Dispose();            }        }        ///         /// 检测文件被占用         ///         /// 要检测的文件路径        /// 
public bool CheckFiles(string FileNames) { if (!File.Exists(FileNames)) { //文件不存在 return false; } else { IntPtr vHandle = _lopen(FileNames, OF_READWRITE | OF_SHARE_DENY_NONE); if (vHandle == HFILE_ERROR) { return false; } CloseHandle(vHandle); } return true; }

  3.定义jacket类

public class Jacket    {        public string Type { get; set; }        public string Color { get; set; }        public string Size { get; set; }        public decimal price { get; set; }    }

  4.判定文件是否打开

[DllImport("kernel32.dll")]        public static extern IntPtr _lopen(string lpPathName, int iReadWrite);        [DllImport("kernel32.dll")]        public static extern bool CloseHandle(IntPtr hObject);        public const int OF_READWRITE = 2;        public const int OF_SHARE_DENY_NONE = 0x40;        public readonly IntPtr HFILE_ERROR = new IntPtr(-1);

 

转载于:https://www.cnblogs.com/tuqun/p/4155400.html

你可能感兴趣的文章
python用递归函数解汉诺塔游戏
查看>>
Redis与Python交互
查看>>
Maximum-SubsequenceSum
查看>>
Android无法删除项目+导入项目报错
查看>>
poj 2349(最小生成树应用)
查看>>
python接口自动化测试二十五:执行所有用例,并生成HTML测试报告
查看>>
c# 指定的存储区提供程序在配置中找不到,或者无效
查看>>
最简陋的python数据
查看>>
第一堂java web课
查看>>
操作系统简介
查看>>
第1周小组博客作业--1703班06组
查看>>
vue项目中icon图标的完美引入
查看>>
C语言指针
查看>>
Java的安装
查看>>
0920 JSON数据 蓝懿
查看>>
Azure Cosmos DB 使用费用参考
查看>>
【嵌入式开发】写入开发板Linux系统-模型S3C6410
查看>>
C# 子线程与主线程通讯方法一
查看>>
006——修改tomacat的编码
查看>>
《C程序设计语言》笔记 (八) UNIX系统接口
查看>>