通用类 对象Excel互转
public class ExcelHelper
{ public void Demo(string filePath)
{
if (File.Exists(filePath)) File.Delete(filePath);
var RootElement = new XLWorkbook();
var workSheet = RootElement.AddWorksheet("Demo");
RootElement.SaveAs(filePath);
}
public void CreatNewFile(string filePath,string workSheetName)
{
if (File.Exists(filePath)) File.Delete(filePath);
var RootElement = new XLWorkbook();
var workSheet = RootElement.AddWorksheet(workSheetName);
RootElement.SaveAs(filePath);
} public List<T> ReadeExcel<T>(string filePath) where T:new()
{
if (!File.Exists(filePath)) throw new Exception("目标文件不存在");
bool result = true;
int index = ;
string Identity = "";
XLWorkbook RootElement = new XLWorkbook(filePath);
List<T> list = new List<T>();
IXLWorksheet workSheet = RootElement.Worksheet();
Dictionary<int, string> keys = new Dictionary<int, string>();
while (result)
{
Identity = (workSheet.Cell(, index).Value + "").Trim();
if (string.IsNullOrEmpty(Identity))result = false;
else keys.Add(index, Identity);index++;
}
result = true;
index = ;
while (result)
{
Identity = workSheet.Cell(index, ).Value + "";
if (string.IsNullOrEmpty(Identity))
{
result = false;
}
else
{
var model = new T();
var t = model.GetType();
foreach (var item in t.GetProperties())
{
var proper = keys.FirstOrDefault(p => p.Value == item.Name);
if (proper.Value == null)
{
item.SetValue(model, "", null);
}
else
{
item.SetValue(model, workSheet.Cell(index, proper.Key).Value + "", null);
}
}
list.Add(model);
index++;
} } return list;
} public bool WriteExcel<T>(List<T> source,string filePath)
{
var type = typeof(T);
CreatNewFile(filePath, type.Name);
XLWorkbook RootElement = new XLWorkbook(filePath);
List<T> list = new List<T>();
IXLWorksheet workSheet = RootElement.Worksheet(type.Name);
int i = ; Dictionary<int, string> keys = new Dictionary<int, string>();
foreach (var item in type.GetProperties())
keys.Add(i++, item.Name); i = ;
foreach (var key in keys)
workSheet.Cell(i, key.Key).Value = key.Value; foreach (var item in source)
{
i++;
type = item.GetType();
foreach (var key in keys)
{
var vaue = type.GetProperty(key.Value);
if (vaue != null)
workSheet.Cell(i, key.Key).Value = vaue.GetValue(item);
else
workSheet.Cell(i, key.Key).Value = "";
}
}
RootElement.Save(); return true;
} }
通用类 对象Excel互转的更多相关文章
- 通用类 对象和XML互转
public class XMLHealper { /// <summary> /// 将自定义对象序列化为XML字符串 /// </summary> /// <para ...
- NPOI MVC 模型导出Excel通用类
通用类: public enum DataTypeEnum { Int = , Float = , Double = , String = , DateTime = , Date = } public ...
- MVC NPOI Linq导出Excel通用类
之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...
- Excel通用类工具(二)
前言 上一篇中写到了用反射来处理类中的不用的属性,但是Excel的列名还得手动输入,这样还是比较麻烦的,今天这篇就利用自定义注解来解决手动传入列名的问题:其实很简单的,只需要在上一篇的基础上加一个类就 ...
- NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中
以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...
- 无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来 自 HRESULT:
无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”.此操作失败的原因是对 IID 为“{000208D5 -000 ...
- XML和对象属性互转的基类
本人做了一个XML和对象属性互转的基类,现在放上来有兴趣拿去看一下,用法很简单,声明一个BaseConversion的子类,该子类与你想转换的对象相对应,然后覆盖基类的两个虚方法,然后在里面写元素与对 ...
- C#:导入Excel通用类(CSV格式)
一.引用插件LumenWorks.Framework.IO.dll(CsvReader) 插件下载地址:https://pan.baidu.com/s/1c3kTKli 提取密码 dz7j 二.定义 ...
- C#:导入Excel通用类(Xls格式)
PS:在CSV格式和XLSX格式中有写到通用调用的接口和引用的插件,所以在这个xls格式里面并没有那么详细,只是配上xls通用类. 一.引用插件NPOI.dll.NPOI.OOXML.dll.NPOI ...
随机推荐
- 记一次简单的GetShell案例
案例链接: http://202.112.51.184:8007/ 打开链接,发现分了多个页面: 挨个点击,大概清楚是上传指定格式的文件然后在搜索的时候使文件执行从而GetShell,观察发现点击每个 ...
- 第十三章:UNDO段
一.UNDO UNDO 段是用于存储还原数据的特殊段,在发生实例故障的时候,UNDO 段用来对数 据进行恢复.本章内容包括介绍 UNDO 段的工作原理,并进行自动和手工的 UNDO 段的管理 1.1 ...
- 【DOS】Win7系统文件夹名太长无法删除问题的解决
一个测试工具产生了几个坑爹文件夹名为n个“x” ,系统提示删除不掉. 网上百度,说什么压缩.写bat文件...统统没用. 猛地看到右击菜单中安装了git客户端工具,想试试看.在该文件夹目录下Git B ...
- 非root用户加入docker用户组省去sudo
服务器环境:centos7.6.1810,Docker version 18.09.3 1.使用有sudo权限的帐号登录到服务器系统,如:test用户 2.新建用户组docker之前,查看用户组中有没 ...
- python sys.argv[]简单解释
上一篇UDP编程中简单使用了一些sys模块的argv参数,也是我第一次看见这个参数,这里做个记录: sys.argv是一个从程序外部获取参数的桥梁,这个“外部”很关键, 因为我们从外部取得的参数可以是 ...
- [Linux][转载]Curl命令详解
命令:curl 在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,是一款很强大的http命令行工具,当处在无界面的服务器上的时候,利用curl下载上传文件是较为方便的事情. 语法 ...
- session的几种模式
https://www.cnblogs.com/panchunting/archive/2012/06/25/ASPNET_Session_Mode.html token的生成和应用 session和 ...
- flexbuilder 开发工具
https://www.cnblogs.com/xuling/archive/2010/02/15/1668580.html
- sql查询单表之中大于2条的数据
SELECT COUNT(字段)AS COUNT,字段FROM 表名 GROUP BY 字段 HAVING COUNT >=
- Bumped! 2017 ICPC North American Qualifier Contest (分层建图+dijstra)
题目描述 Peter returned from the recently held ACM ICPC World finals only to find that his return flight ...