NOPI导入导出

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;

namespace Excel导出示例
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnIn_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "xls|*.xls|xlsx|*.xlsx";
            ofd.ShowDialog();

            string file = ofd.FileName;

            Import(file);
        }

        private void btnOut_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.ShowDialog();

            string file = sfd.FileName;
            Outport(this.dataGridView1.DataSource as DataTable, file);
        }

        #region 导入

        private void Import(string filePath)
        {
            try
            {
                FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                HSSFWorkbook hssfworkbook = new HSSFWorkbook(file);
                ISheet sheet = hssfworkbook.GetSheetAt(0);
                DataTable dt = new DataTable();

                for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
                {
                    dt.Columns.Add(sheet.GetRow(0).Cells[j].ToString());
                }

                System.Collections.IEnumerator rows = sheet.GetRowEnumerator();

                rows.MoveNext();//跳过第一行

                while (rows.MoveNext())
                {
                    HSSFRow row = (HSSFRow)rows.Current;
                    DataRow dr = dt.NewRow();
                    for (int i = 0; i < row.LastCellNum; i++)
                    {
                        NPOI.SS.UserModel.ICell cell = row.GetCell(i);
                        if (cell == null)
                        {
                            dr[i] = null;
                        }
                        else
                        {
                            dr[i] = cell.ToString();
                        }
                    }
                    dt.Rows.Add(dr);
                }

                this.dataGridView1.DataSource = dt;
                this.dataGridView1.Refresh();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

        ///// <summary>
        ///// Excel文件导成Datatable
        ///// </summary>
        ///// <param name="strFilePath">Excel文件目录地址</param>
        ///// <param name="strTableName">Datatable表名</param>
        ///// <param name="iSheetIndex">Excel sheet index</param>
        ///// <returns></returns>
        //public static DataTable XlSToDataTable(string strFilePath, string strTableName, int iSheetIndex)
        //{

        //    string strExtName = Path.GetExtension(strFilePath);

        //    DataTable dt = new DataTable();
        //    if (!string.IsNullOrEmpty(strTableName))
        //    {
        //        dt.TableName = strTableName;
        //    }

        //    if (strExtName.Equals(".xls") || strExtName.Equals(".xlsx"))
        //    {
        //        using (FileStream file = new FileStream(strFilePath, FileMode.Open, FileAccess.Read))
        //        {
        //            HSSFWorkbook hssfworkbook = new HSSFWorkbook(file);
        //            ISheet sheet = hssfworkbook.GetSheetAt(iSheetIndex);

        //            //列头
        //            foreach (ICell item in sheet.GetRow(sheet.FirstRowNum).Cells)
        //            {
        //                dt.Columns.Add(item.ToString(), typeof(string));
        //            }

        //            //写入内容
        //            System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
        //            while (rows.MoveNext())
        //            {
        //                IRow row = (HSSFRow)rows.Current;
        //                if (row.RowNum == sheet.FirstRowNum)
        //                {
        //                    continue;
        //                }

        //                DataRow dr = dt.NewRow();
        //                foreach (ICell item in row.Cells)
        //                {
        //                    switch (item.CellType)
        //                    {
        //                        case CellType.Boolean:
        //                            dr[item.ColumnIndex] = item.BooleanCellValue;
        //                            break;
        //                        case CellType.Error:
        //                            dr[item.ColumnIndex] = ErrorEval.GetText(item.ErrorCellValue);
        //                            break;
        //                        case CellType.Formula:
        //                            switch (item.CachedFormulaResultType)
        //                            {
        //                                case CellType.Boolean:
        //                                    dr[item.ColumnIndex] = item.BooleanCellValue;
        //                                    break;
        //                                case CellType.Error:
        //                                    dr[item.ColumnIndex] = ErrorEval.GetText(item.ErrorCellValue);
        //                                    break;
        //                                case CellType.Numeric:
        //                                    if (DateUtil.IsCellDateFormatted(item))
        //                                    {
        //                                        dr[item.ColumnIndex] = item.DateCellValue.ToString("yyyy-MM-dd hh:MM:ss");
        //                                    }
        //                                    else
        //                                    {
        //                                        dr[item.ColumnIndex] = item.NumericCellValue;
        //                                    }
        //                                    break;
        //                                case CellType.String:
        //                                    string str = item.StringCellValue;
        //                                    if (!string.IsNullOrEmpty(str))
        //                                    {
        //                                        dr[item.ColumnIndex] = str.ToString();
        //                                    }
        //                                    else
        //                                    {
        //                                        dr[item.ColumnIndex] = null;
        //                                    }
        //                                    break;
        //                                case CellType.Unknown:
        //                                case CellType.Blank:
        //                                default:
        //                                    dr[item.ColumnIndex] = string.Empty;
        //                                    break;
        //                            }
        //                            break;
        //                        case CellType.Numeric:
        //                            if (DateUtil.IsCellDateFormatted(item))
        //                            {
        //                                dr[item.ColumnIndex] = item.DateCellValue.ToString("yyyy-MM-dd hh:MM:ss");
        //                            }
        //                            else
        //                            {
        //                                dr[item.ColumnIndex] = item.NumericCellValue;
        //                            }
        //                            break;
        //                        case CellType.String:
        //                            string strValue = item.StringCellValue;
        //                            if (string.IsNullOrEmpty(strValue))
        //                            {
        //                                dr[item.ColumnIndex] = strValue.ToString();
        //                            }
        //                            else
        //                            {
        //                                dr[item.ColumnIndex] = null;
        //                            }
        //                            break;
        //                        case CellType.Unknown:
        //                        case CellType.Blank:
        //                        default:
        //                            dr[item.ColumnIndex] = string.Empty;
        //                            break;
        //                    }
        //                }
        //                dt.Rows.Add(dr);
        //            }
        //        }
        //    }

        //    return dt;
        //}

        #endregion

        #region 导出

        //Datatable导出Excel
        private void Outport(DataTable dt, string filename)
        {
            HSSFWorkbook hssfworkbook = new HSSFWorkbook();
            try
            {
                ISheet sheet = hssfworkbook.CreateSheet("Sheet1");

                ICellStyle HeadercellStyle = hssfworkbook.CreateCellStyle();
                HeadercellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
                HeadercellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
                HeadercellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
                HeadercellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
                HeadercellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                //字体
                NPOI.SS.UserModel.IFont headerfont = hssfworkbook.CreateFont();
                headerfont.Boldweight = (short)FontBoldWeight.Bold;
                HeadercellStyle.SetFont(headerfont);

                //用column name 作为列名
                int icolIndex = 0;
                IRow headerRow = sheet.CreateRow(0);
                foreach (DataColumn item in dt.Columns)
                {
                    ICell cell = headerRow.CreateCell(icolIndex);
                    cell.SetCellValue(item.ColumnName);
                    cell.CellStyle = HeadercellStyle;
                    icolIndex++;
                }

                ICellStyle cellStyle = hssfworkbook.CreateCellStyle();

                //为避免日期格式被Excel自动替换,所以设定 format 为 『@』 表示一率当成text來看
                cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("@");
                cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
                cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
                cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
                cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;

                NPOI.SS.UserModel.IFont cellfont = hssfworkbook.CreateFont();
                cellfont.Boldweight = (short)FontBoldWeight.Normal;
                cellStyle.SetFont(cellfont);

                //建立内容行
                int iRowIndex = 1;
                int iCellIndex = 0;
                foreach (DataRow Rowitem in dt.Rows)
                {
                    IRow DataRow = sheet.CreateRow(iRowIndex);
                    foreach (DataColumn Colitem in dt.Columns)
                    {

                        ICell cell = DataRow.CreateCell(iCellIndex);
                        cell.SetCellValue(Rowitem[Colitem].ToString());
                        cell.CellStyle = cellStyle;
                        iCellIndex++;
                    }
                    iCellIndex = 0;
                    iRowIndex++;
                }

                //自适应列宽度
                for (int i = 0; i < icolIndex; i++)
                {
                    sheet.AutoSizeColumn(i);
                }

                //写Excel
                FileStream file = new FileStream(filename, FileMode.OpenOrCreate);
                hssfworkbook.Write(file);
                file.Flush();
                file.Close();

                MessageBox.Show("导出成功!");
            }
            catch (Exception ex)
            {
                MessageBox.Show("导出失败!");
            }
            finally
            {
                hssfworkbook = null;
            }
        }

        #endregion
    }
}

参考文章:

1.http://www.cnblogs.com/colder/p/3611906.html.

2.http://www.cnblogs.com/zhuawang/archive/2012/12/12/2815367.html.

时间: 2024-10-15 04:44:56

NOPI导入导出的相关文章

C# 操作NOPI 导入导出

//把T_Seats中的输入导出到Excel private void button3_Click(object sender, EventArgs e) { //1.读取 string sql = "select * from T_Seats"; using (SqlDataReader reader = SqlHelper.ExecuteReader(sql, CommandType.Text)) { if (reader.HasRows) { //创建Workbook IWork

NOPI实现导入导出泛型List,支持自定义列

业务上需要自定义列的Excel的导入导出,在网上看了好多资料,很多都是有Bug而且都是支持Excel和DataTable的转换,所以自己总结了一下,应用.NET平台上的NPOI封装了支持自定义列的Excel导入导出到泛型List. 先大概说一下思路和原理,最后会附上源代码和demo供小伙伴们参考.有问题欢迎留言~ List To Excel: 参数:泛型集合数据,需要导出列名 根据提供的列名过滤集合的字段,并新建NPOI行,填充表头(应用字典类型替换数据列名为想要显示的名称)  并循环添加数据,

.net 自己写的操作Excel 导入导出 类(以供大家参考和自己查阅)

由于现在网页很多都关系到Excel 的操作问题,其中数据的导入导出更是频繁,作为一个菜鸟,收集网上零散的知识,自己整合,写了一个Excel导入到GridView ,以及将GridView的数据导出到EXCEL的类方法,以供参考和方便自己以后查阅. 1 #region 引用部分 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Web; 6 using System.Dat

PL/SQLDeveloper导入导出Oracle数据库方法

前一篇博客介绍了Navicat工具备份Oracle的方法,这篇博客介绍一下使用PL/SQL Developer工具导入导出Oracle数据库的方法. PL/SQL Developer是Oracle数据库用于导入导出数据库的主要工具之一,本文主要介绍利用PL/SQL导入导出Oracle数据库的过程. 1.Oracle数据库导出步骤 1.1 Tools→Export User Objects...选项,导出.sql文件. 说明:此步骤导出的是建表语句(包括存储结构). 1.2 Tools→Expor

Eclipse调试程序及项目的导入导出

Eclipse调试程序 调试概述: ①   调试就是测试程序的方法,主要的目的就是解决程序的逻辑问题,流程是:发现问题.修改问题.正确执行; ②   以前我们可以使用System.out.println()方法来查看我们程序中的问题; ③   现在我们可以使用Eclipse开发工具帮我们进行调试: Eclipse为程序员提供了设置断点的功能来达到单步调试程序的能力; 调试步骤: ①   初步判断程序出错的位置; ②   给指定的程序设置断点(可以设置多个); ③   进入调试视图让程序在断点位置

Excel导入导出的业务进化场景及组件化的设计方案(转)

1:前言 看过我文章的网友们都知道,通常前言都是我用来打酱油扯点闲情的. 自从写了上面一篇文章之后,领导就找我谈话了,怕我有什么想不开. 所以上一篇的(下)篇,目前先不出来了,哪天我异地二次回忆的时候,再分享分享. 话说最近外面IT行情飞涨还咋的,人都飞哪去了呢,听说各地的军情都进入紧急状态了. 回归下正题,今天就抽点时间,写写技术文,和大伙分享一下近年在框架设计上的取的一些技术成果. 2:项目背景 在针对运营商(移动.联通.电信.铁塔)的信息类的系统中,由于相关的从业人员习惯于Excel的办公

自用Postgres 数据库的导入导出脚本

工作中时常给开发和测试导入导出一些测试的数据库,于是写了一个脚本方便操作. 公司目前使用的是postgres9.3数据库. #!/bin/bash #定义一些变量和操作命令 DBS="db1 db2 db3 db4" EXPDB_CMD=/usr/pgsql-9.3/bin/pg_dump DBCMD=/usr/pgsql-9.3/bin/psql DBUSER=postgres DBSVR=mydbhost1 #导出数据库 function exportdb() {   read -

excel的导入导出的实现

1.创建Book类,并编写set方法和get方法 1 package com.bean; 2 3 public class Book { 4 private int id; 5 private String name; 6 private String type; 7 // public int a; 8 9 public String getType() { 10 System.out.println("调用了类型方法"); 11 return type; 12 } 13 14 pu

利用反射实现通用的excel导入导出

如果一个项目中存在多种信息的导入导出,为了简化代码,就需要用反射实现通用的excel导入导出 实例代码如下: 1.创建一个 Book类,并编写set和get方法 1 package com.bean; 2 3 public class Book { 4 private int id; 5 private String name; 6 private String type; 7 // public int a; 8 9 public String getType() { 10 System.ou