泛型的导入导出的公用方法

using NPOI.HSSF.UserModel;
using NPOI.SS.Formula.Functions;
using NPOI.SS.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Farinfo.Ethics.Common
{
    public class IntroductionAndExport<T> where T : class,new()
    {
        //导出
        public static void RenderToExcel(IEnumerable<T> list,string title)
        {
            IWorkbook workbook = new HSSFWorkbook();
            ISheet sheet = workbook.CreateSheet();
            DirectoryInfo imagesfile = new DirectoryInfo(("d:/"));
            string strFileName = imagesfile.FullName.ToString();
            int index = 0;
            //填充表头
            IRow dataRow = sheet.CreateRow(0);
            foreach (PropertyInfo pi in list.FirstOrDefault().GetType().GetProperties())
            {
                dataRow.CreateCell(index).SetCellValue(pi.Name);
                index++;
            }
            int id = 0;
            foreach (T model in list)
            {
                id = id + 1;
                IRow headerRow = sheet.CreateRow(id);
                PropertyInfo[] proList = model.GetType().GetProperties();

                for (int i = 0; i < proList.Count(); i++)
                {
                    var name = proList[i].GetValue(model, null);
                    if (name == null)
                        headerRow.CreateCell(i).SetCellValue("");
                    else
                        headerRow.CreateCell(i).SetCellValue(name.ToString());
                }
            }
            //保存
            using (MemoryStream ms = new MemoryStream())
            {
                workbook.Write(ms);
                File.Create(strFileName + title + ".xls").Close();
                using (FileStream fs = new FileStream(strFileName + DateTime.Now.Second + ".xls", FileMode.Create, FileAccess.Write))
                {
                    byte[] data = ms.ToArray();
                    fs.Write(data, 0, data.Length);
                    fs.Flush();
                    fs.Close();
                    fs.Dispose();
                }
            }
        }
        //导入
        public static void WriterToExcel(out List<T> list, string fileName)
        {
            list = new List<T>();
            using (var stream = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite))
            {

                IWorkbook workbook = new HSSFWorkbook(stream);
                ISheet sheet = workbook.GetSheetAt(0);
                //Execel第一是标题,不是要导入数据库的数据
                for (int i = 1; i <= sheet.LastRowNum; i++)
                {
                    T model = new T();
                    IRow dataRow = sheet.GetRow(i);
                    for (int j = 0; j < dataRow.Cells.Count; j++)
                    {
                        ICell cell = dataRow.Cells[j];
                        int num;
                        Guid id;
                        DateTime time;
                        if (model.GetType().GetProperties()[j].Name != "Mark")
                        {
                            if (int.TryParse(cell.StringCellValue, out num))
                            {
                                model.GetType().GetProperties()[j].SetValue(model, num, null);

                            }
                            else if (Guid.TryParse(cell.StringCellValue, out id))
                            {
                                model.GetType().GetProperties()[j].SetValue(model, id, null);
                            }
                            else if (DateTime.TryParse(cell.StringCellValue, out time))
                            {
                                model.GetType().GetProperties()[j].SetValue(model, time, null);
                            }
                            else if (cell.StringCellValue == "")
                            {
                                model.GetType().GetProperties()[j].SetValue(model, null, null);

                            }
                            else
                            {
                                model.GetType().GetProperties()[j].SetValue(model, cell.StringCellValue, null);
                            }
                        }
                    }
                    list.Add(model);
                }
            }
        }
    }
}

  

时间: 2024-08-30 08:40:17

泛型的导入导出的公用方法的相关文章

PL/SQL Developer导入导出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

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

Oracle数据库导入导出逻辑备份方法总结

[EXP常用参数] USERID  即用户名/密码该参数就必须且为第一个: FILE    指定数据输出文件路径: LOG     指定日志输出文件路径: TABLES  导出指定表数据: FULL    完全导出整个文件(N): ROWS    导出数据行(Y): QUERY   用于导出表的子集的 select 子句: [示例] 1.[全库模式]将数据库orcl完全导出,用户名scott密码scott数据文件导出到D:/orcl/scott.dmp,日志文件到出到D:/orcl/scott.

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

原文地址:http://www.2cto.com/database/201405/305452.html 1.Oracle数据库导出步骤 1.1 Tools→Export User Objects...选项,导出.sql文件. 说明:此步骤导出的是建表语句(包括存储结构),不包括表中的数据,要导出数据需要用Tools→Export Tables. 1.2 Tools→Export Tables...导出表结构及数据 PL/SQL工具包含三种方式导出Oracle表结构及数据,三种方式分别为:Ora

MySQL 文本文件的导入导出数据的方法

MySQL写入数据通常用insert语句,如 代码如下: insert into person values(张三,20),(李四,21),(王五,70)-; 但有时为了更快速地插入大批量数据或交换数据,需要从文本中导入数据或导出数据到文本. 一. 建立测试表,准备数据 首先建立一个用于测试的表示学生信息的表,字段有id.姓名.年龄.城市.薪水.Id和姓名不 能为空. 代码如下: create table person( id int not null auto_increment, name

MySQL Workbench 导入导出乱码解决方法

1.点击导出 2.默认选择cvs 3.打开后发现乱码 4.用记事本的方式打开会发现编码正常 5.文件->另存为,会发现编码为UTF-8,正是MySQL表的编码方式.我们选择编码方式为ANSI,保存类型为所有,覆盖源文件 6.现在我们再打开cvs文件就没有乱码了 7.我们增加一条数据 8.用记事本打开并以UTF-8编码另存为,覆盖源文件 9.用MySQL Workbench 导入,发现导入结果正常 10.现在可以直接在cvs文件中编辑和导入了 总结: 用记事本将源cvs文件(UTF8格式)另存为

PHP 高效导入导出Excel(csv)方法之fgetcsv()和fputcsv()函数

CSV,是Comma Separated Value(逗号分隔值)的英文缩写,通常都是纯文本文件. 一.CSV数据导入函数fgetcsv() fgetcsv() 函数从文件指针中读入一行并解析 CSV 字段. 与 fgets() 类似,不同的是 fgetcsv() 解析读入的行并找出 CSV 格式的字段,然后返回一个包含这些字段的数组. fgetcsv() 出错时返回 FALSE,包括碰到文件结束时. 具体使用时封装函数如下: /** * 导入Excel数据表格 * @param string

Net使用Npoi导入导出Excel的方法

www.qdmm.com/BookReader/41468,68391862.aspxwww.qdmm.com/BookReader/41468,68391863.aspxwww.qdmm.com/BookReader/41468,68391864.aspxwww.qdmm.com/BookReader/41468,68391870.aspxwww.qdmm.com/BookReader/41468,68391871.aspxwww.qdmm.com/BookReader/41468,68391

MySQL导入导出方法总结

使用into outfile 和 load data infile导入导出数据 这种方法的好处是,导出的数据可以自己规定格式,并且导出的是纯数据,不存在建表信息,你可以直接导入另外一个同数据库的不同表中,相对于mysqldump比较灵活机动. 下面的mysql命令是把select的mytable表中的数据导出到/home/db_bak2012文件. select * from mytable where status!=0 and name!='' into outfile '/home/db_